Cpp Sınıfı İçinde Global ve Yerel Değişken Kullanımı: Performans ve Hafıza Yönetimi

78 Kişi Okudu

Cpp Sınıfı İçinde Global ve Yerel Değişken Kullanımı: Performans ve Hafıza Yönetimi

Yazılım geliştirme sürecinde, performans ve hafıza yönetimi hayati öneme sahiptir. Bu yazımızda, C++ programlama dilinde sınıf içinde global ve yerel değişken kullanımının performans ve hafıza yönetimi üzerindeki etkilerini detaylı bir şekilde ele alacağız. Ayrıca, bu konseptleri anlamak için basit ancak etkili örnek kodlar ve bu kodların assembly diline çevrilmiş hallerini inceleyeceğiz.

C++ Örnek Kod

#include <stdint.h>

struct LargeStruct {
    uint64_t num1 = 0;
    uint64_t num2 = 0;
    uint64_t num3 = 0;    
    
    // Büyük bir veri bloğu
    uint8_t data[10000] = {0}; 
};

class MyClass {
public:
    void updateGlobalInstance();
    void updateLocalInstance();
    // Sınıf seviyesinde global bir örnek
    LargeStruct globalInstance = {0}; 
};

void MyClass::updateGlobalInstance() {
    // Global örneği güncelle
    globalInstance.num1 = 0; 
}

void MyClass::updateLocalInstance() {
   // Fonksiyon seviyesinde yerel bir örnek
    LargeStruct localInstance = {0}; 
    localInstance.num1 = 0;
}

Assembly Dilindeki İki Fonksiyonun Karşılaştırılması ve Performans Etkileri

Okumaya devam et Cpp Sınıfı İçinde Global ve Yerel Değişken Kullanımı: Performans ve Hafıza Yönetimi

STM32f0 UART Gelen Veri Okuma MİkroC

856 Kişi Okudu

STM32f0 içerisinde seri port üzerinden gelen veriyi okunan değişkeni içerisinde tutar

int okunan;
 void main() {

    UART2_Init(9600); // 9600 hız protokolünde seri port iletişimi sağlanacağını gösteriyor
    Delay_ms(10);    // Ayarlar yapılırken 100ms bekleme
    UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle); // SeriPort iletişimi aktive ediyor. Okuma,yazma gibi özellikleri açar.

   do
   {

   if (UART2_data_ready())
   { // Eğer seri portdan okunan veri varsa.
   
     okunan = Uart2_read(); 

  }

}while(1);


}

3 ADC kanalından okunan veriyi seri port üzerinden gönderen yazılım.

467 Kişi Okudu

MikroC dili ile yazılan bir program. ADC A0 A1 A3 pinlerinden okunan verileri seri port üzerinden göndere program. Seri porttan okunan veri int tipinden gelmekte biz bu verileri string tipine dönüştürerek gönderiyoruz.
UART 2 kullanılmıştır bu pin A2 de TX pinidir.

void main()
 {
 char txt1[12],txt2[12],txt3[12];
 int adc1=0,adc2=0,adc3=0;
 
  GPIO_Digital_Output(&GPIOc_ODR, _GPIO_PINMASK_8) ;
  GPIO_Digital_Input(&GPIOa_IDR, _GPIO_PINMASK_0);

  ADC_Set_Input_Channel(_ADC_CHANNEL_ALL); // adc kanalında 1. pini kullanacağımız belirtilde A1
  ADC1_Init();// Adc Ayarları yapıldı
  UART2_Init(9600);                    // initialize UART2 module
  Delay_ms(100);

  UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle ); // Uart modüllerini aktive ediyor...


   do  {
           adc1=ADC1_Get_Sample(0);
           IntToStr(adc1,txt1);
           
           adc2=ADC1_Get_Sample(1);
           IntToStr(adc2,txt2);
           
           adc3=ADC1_Get_Sample(3);
           IntToStr(adc3,txt3);
           
           UART2_Write_Text("ADC-1=");
           UART2_Write_Text(txt1);
           
           UART2_Write_Text("ADC-2=");
           UART2_Write_Text(txt2);
           
           UART2_Write_Text("ADC-3=");
           UART2_Write_Text(txt3);
           
           UART2_Write(13);
           UART2_Write(10);
           Delay_ms(500);

  }  while (1) ;
  
}

Analog Dijital Çerici ADC

466 Kişi Okudu
unsigned gelen;
void main ()
{
  GPIO_Digital_Output(&GPIOc_ODR, _GPIO_PINMASK_8| _GPIO_PINMASK_9);
  GPIOC_ODR.b8 = 0 ;
  ADC_Set_Input_Channel(_ADC_CHANNEL_1); // adc kanalında 1. pini kullanacağımız belirtilde A1
  ADC1_Init();// Adc Ayarları yapıldı

  do {
    gelen = ADC1_Get_Sample(1);  //ADC 1. pininden gelen veri gelen isimli değişkene aktarılıyor.

   if (gelen<2095 )   //1,6 voltdan küçük olduğu zaman yan
  {               
   GPIOC_ODR.b9 = 1 ;
   GPIOC_ODR.b8 = 0 ;
  }

  else {  // değilse sön
   GPIOC_ODR.b8 = 1 ;
   GPIOC_ODR.b9 = 0 ;
  }
 } while(1);

}

STM32F0 USART MikroC örnek kodları

821 Kişi Okudu
 #define   button  GPIOf_ODR.B5

unsigned okunan, yaz;

void main()

{

 GPIO_Digital_output(&GPIOc_ODR, _GPIO_PINMASK_1| _GPIO_PINMASK_2) ;
 GPIO_Digital_Input(&GPIOF_IDR, _GPIO_PINMASK_5);
 GPIO_Digital_Input(&GPIOA_IDR, _GPIO_PINMASK_0);

  UART2_Init(9600);                    // initialize UART2 module
  Delay_ms(100);

 UART_Set_Active(UART2_Read, UART2_Write, UART2_Data_Ready,UART2_Tx_Idle ); // Uart modüllerini aktive ediyor... 
 UART2_Write_Text("Bismillah");   //ilk olarak gönderilen yazı
 delay_ms(100);
 UART2_Write(13); //başlangıç biti
 UART2_Write(10); // bitiş biti

   While (1)
  {
    if(GPIOA_IDR.B0 == 1) {
      UART2_Write_text("Ahmet");
      UART2_Write(13);
      UART2_Write(10);
    delay_ms(100);
   }

   delay_ms(55);
   if(GPIOF_IDR.B5 == 1) {
     UART2_Write_text("yasin");
     UART2_Write(13);
     UART2_Write(10);
     delay_ms(100);
   }
 }
}
Okumaya devam et STM32F0 USART MikroC örnek kodları

STM32F0 İnterrup MikroC kodları

660 Kişi Okudu

Aşağıda yazmış olduğumuz programda kesme birimi kullanmaktadır C2 pinine bağlı ledimizi 400ms de bir C8 pinine bağlı ledi 100ms de bir yakıp söndürecektir.Bu işlemi belirli aralıklarla ana programı durdurarak yapacaktır.Kesmeye uğradığı zaman ana programda çalışan 100ms lik yanıp sönen led duracak C8 pinine bağlı olan led 5 sefer yanıp sönecektir

#define button GPIOf_IDR.B5
int a;

void Timer2_interrupt() iv IVT_INT_TIM2 {

TIM2_SR.UIF = 0; // Toggle PORTC led on
   if ( button == 1 ){
    a=0;
    do {
    GPIOC_ODR.B2 = 1 ;
    delay_ms(400);
    GPIOC_ODR.B2 = 0 ;
    delay_ms(400);
    a++;
    }while(a!=5) ;
  }

}

void main() {
 GPIO_Digital_Output(&GPIOC_BASE, _GPIO_PINMASK_8 | _GPIO_PINMASK_2 );
 GPIO_Digital_Input (&GPIOf_BASE, _GPIO_PINMASK_5) ;
 GPIO_Digital_Input (&GPIOa_BASE, _GPIO_PINMASK_0) ;

//GPIOC_ODR.B8 = 0;

 RCC_APB1ENR.TIM2EN = 1;     // Enable clock gating for timer module 2
 TIM2_CR1.CEN = 0;           // Disable timer
 TIM2_PSC = 10;              // set timer prescaler
 TIM2_ARR = 10;
 NVIC_IntEnable(IVT_INT_TIM2); // Enable timer interrupt
 TIM2_DIER.UIE = 1;          // Update interrupt enable
 TIM2_CR1.CEN = 1;          // Enable timer

while (1) {
  GPIOC_ODR.B8 = 1;
  delay_ms(100);
  GPIOC_ODR.B8 = 0;
  delay_ms(100) ;
 }
}

STM32F0 Donanımsal PWM MikroC kodları

574 Kişi Okudu

Aşağıda yazmış olduğumuz program; işlemcinin 1. ve 4. kanalına bağlı motorları 100 ms lik aralıklarla hızlandıran bir programdır.

Kullandığımız STM32F0 PWM kanalları 16 bir çözünürlüktedir. Bu da demek oluyor ki çözünürlüğümüz 65535 maksimum değer alır. Oldukça iyi.

int b=0 ;

void pwm(int motor1 , int motor2, int bekle) {
  PWM_TIM1_Set_Duty(motor1, _PWM_NON_INVERTED, _PWM_CHANNEL1);
  PWM_TIM1_Set_Duty(motor2, _PWM_NON_INVERTED, _PWM_CHANNEL4);
  Vdelay_ms(bekle) ;
}

void main() {

 PWM_TIM1_Init(10000);
 PWM_TIM1_Start(_PWM_CHANNEL1, _GPIO_MODULE_TIM1_CH1_PA8);
 PWM_TIM1_Start(_PWM_CHANNEL4, _GPIO_MODULE_TIM1_CH4_PA11);
  
   do{
    pwm(b,b,100);
    b=b+10;
    if(b=4000){
    b=0;    
    }
  }while(1);
 }
}

ARM STM32F0 MikroC Karaşimşek Örnek Uygulaması

611 Kişi Okudu

Uygulama fonksiyonları kullanarak basit bir şekilde karaşimşek led uygulamsını yapmktayız. Aşağıda yapılan uygulamayı sizlerde “for” kullanarak yapabilirsiniz.

void led (int led){
  GPIO_Digital_Output(&GPIOC_ODR, _GPIO_PINMASK_1 | _GPIO_PINMASK_2 | _GPIO_PINMASK_3 | _GPIO_PINMASK_4 | _GPIO_PINMASK_5 | _GPIO_PINMASK_6 | _GPIO_PINMASK_7 ) ;

   if (led==0){
   GPIOc_ODR.B1 = 0 ;
   GPIOc_ODR.B2 = 0 ;
   GPIOc_ODR.B3 = 0 ;
   GPIOc_ODR.B4 = 0 ;
   GPIOc_ODR.B5 = 0 ;
   GPIOc_ODR.B6 = 0 ;
   GPIOc_ODR.B7 = 0 ;
  }

   if (led==1)  {
   GPIOc_ODR.B1 = 1 ;
  }

   if (led==2)  {
  GPIOc_ODR.B2 = 1 ;
  }

  if (led==3)  {
  GPIOc_ODR.B3 = 1 ;
  }

  if (led==4)  {
  GPIOc_ODR.B4 = 1 ;
  }

  if (led==5)  {
  GPIOc_ODR.B5 = 1 ;
  }

  if (led==6)  {
  GPIOc_ODR.B6 = 1 ;
  }

  if (led==7)  {
  GPIOc_ODR.B7 = 1 ;
  }
}

int a;
void main() {
   a=0;
    while (1) {
     do{
       led (a);
       delay_ms(100);
       led (0);
       a++ ;
     } while (a!=6);

     do{
       led (a);
       delay_ms(100);
       led (0);
       a-- ;
     }while (a!=1)  ;

  }

}

ARM STM32F0 İf – Else Kontrol Yapısı

474 Kişi Okudu
unsigned int a ;
void main ()
{
  GPIO_Digital_Input (&GPIOA_IDR, _GPIO_PINMASK_0) ;
  GPIO_Digital_Output(&GPIOB_ODR, _GPIO_PINMASK_5) ;
  GPIO_Digital_Output(&GPIOC_ODR, _GPIO_PINMASK_8 | _GPIO_PINMASK_1 | _GPIO_PINMASK_14 | _GPIO_PINMASK_9) ;
  GPIO_Digital_Output(&GPIOB_ODR, _GPIO_PINMASK_12) ;
   do
    {
      GPIOC_ODR.B14 = 1 ;
      Delay_ms (1) ;
      GPIOC_ODR.B14 = 0 ;
      Delay_ms (10) ;
      GPIOC_ODR.B1 = 1 ;

      a = 1 ;
       if (Button(GPIOA_IDR, 0, 1, 1))
      {
       GPIOC_ODR.B1 = 0 ;
       GPIOC_ODR.B14 = 1 ;
       Delay_ms(200);
       do
       {
        GPIOC_ODR.B14 = 1 ;
        if (GPIOA_IDR.b0 == 1) {a=0;}
       delay_ms (110) ;
       } while (a) ;
    }
   } while (1) ;
}