derlemede uyari

Başlatan selvi, 10 Aralık 2013, 19:34:57

selvi

  programda ana fonksiyonda degiskenleri tanimlamama ragmen ve degiskenleri while dongusunde kullaniyorum.programi derlerken  uyarida bu degiskenleri kullanmadigimi soyluyor.derleme resmi asagidaki gibidir.
  birde ana fonksiyonda degiskenler tanimlanabilir mi.
http://imageshack.com/a/img11/5646/vpxf.png

Edit Subram: Kullandığınız resim boyutu çok büyük. Lütfen daha küçük resim kullanınız.
https://www.picproje.org/index.php/topic,49397.0.html
Yaşam anlamlandırıldıkça kutsaldır....

Gökhan BEKEN

Alıntı yapılan: selvi - 10 Aralık 2013, 19:34:57
  birde ana fonksiyonda degiskenler tanimlanabilir mi.
Ana fonksiyonda tanımlarsanız sadece anafonksiyondan erişebilirsiniz. Global olmaz private olur. Bir değişkenin bütün fonksiyonlardan erişilmesini istiyorsanız global tanımlayın yani herhangi bir fonksiyonun içinde değil kütüphane dosyalarının ekledikten ve tanımlamaları yaptıktan hemen sonra tanımlayın.
CCS C ye de fazla güvenmeyin. Bu arada global değişken tanımlarken ilk değer olarak 0(yazıyla: sıfır) veriniz.
Özel mesaj okumuyorum, lütfen göndermeyin.

Okan AKÇA

zaten şu lokal ve glabal tanımlamayı anlamış degilim bütün degişkenleri global tanımla gitsin sonucta ikiside ramden yiyor.

Gökhan BEKEN

#3
Alıntı yapılan: cyclone - 10 Aralık 2013, 22:56:15
zaten şu lokal ve glabal tanımlamayı anlamış değilim bütün degişkenleri global tanımla gitsin sonucta ikiside ramden yiyor.
Local değişkenler de;
Metot çağrıldığında bellekte kendilerine birer yer açılır
Metodun işi bitince, yerel değişkenler de bellekten silinir
Metodun her çağrılışında, her yerel değişkene yeniden yer açılır
Yerel değişkenlere yalnızca ait oldukları metot erişebilir

Bir fonksiyon birden fazla kere çağrıldığında , eski değerleri saklaması gerekiyorsa static olarak tanımlamalısınız.

mesaj birleştirme:: 10 Aralık 2013, 23:06:11

Ayrıca c dilinde malloc veya calloc komutları ile dinamik bellek yönetim konusu vardır. Çalışma sırasında ram bellekten yer alıp, kullanıp, işiniz bitince bu alanı tekrar ram belleğe iade edebilirsiniz.
Özel mesaj okumuyorum, lütfen göndermeyin.

Burak B

Heap ve Stack aynı şeyler değil. Bu kavramları bilmek gerek.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

selvi

  ben de bu degiskenleri(i,j) global degisken olarak tanimladim.buna ragmen uyari vermesi bana tuhaf geldi.degisken kullanim sekli  asagidaki gibi:
  birde bu ayariya ragmen program uzerinde herhangi bir olumsuz etkisi olur mu.uyari olarak vermis.ama ben programda kullanmisim.
ne yapilabilir.ilk defa oyle bir sey ile karsilasiyorum.
#include <16f88.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.
#include <math.h>

#use delay(clock=8000000)   // Gecikme fonksiyonu için kullanýlan osilatör frekansý belirtiliyor
//setup_oscillator(OSC_4MHZ);//#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOLVP,NOBROWNOUT,MCLR
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES MCLR                     //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOIESO  

#use fast_io(a)
#use fast_io(b)

//const unsigned char tx_test_data[10] = {0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6d};  // Tx fixed paylaod every 1 second£¬ the 10th data is the checksum


#define SI4432_PWRSTATE_READY      01      // define ready mode
#define SI4432_PWRSTATE_RX         05      // define Rx mode
#define SI4432_Rx_packet_received_interrupt   0x02      // Packet received interrupt
#define EZRADIOPRO_RECEIVED_PACKET_LENGTH     0x4B      // received packet length

#define  TX0_RX1   spi_rw(0x0e|0x80, 0x02)      // antenna state for Rx
#define  TX0_RX0   spi_rw(0x0e|0x80, 0x00)         // antenna state for ready mode ,standby mode, power down mode 

#define LED_RX     pin_a3   //eklenecek kisimlar
//#define button  pin_a3   //eklenecek kisimlar

#define  nIRQ      pin_b6      // MCU   input
#define  SDO       pin_b1      // MCU   input
#define  nSEL      pin_a1      // MCU   output
#define  SDI       pin_b2      // MCU   output
#define  SCK       pin_b4      // MCU   output
#define  SDN       pin_b5      // MCU   output

unsigned char  i, j,rxlen,chksum;
Yaşam anlamlandırıldıkça kutsaldır....

xoom

Warninglerin programın çalışmasına bir etkisi olmuyor.
Hatanın olduğu yerler nereleri ? Ekran görüntüsü veya hatalı kodun olduğu satırı kopyalar mısınız.

Gökhan BEKEN

#7
Alıntı yapılan: meftun - 10 Aralık 2013, 22:36:13
Bu arada global değişken tanımlarken ilk değer olarak 0(yazıyla: sıfır) veriniz.
Dediğim şekilde bir dener misiniz?
Yani:
unsigned char  i=0, j=0,rxlen=0,chksum=0;


mesaj birleştirme:: 11 Aralık 2013, 20:17:13

Bu da olmazsa main fonksiyonun içine
i=0; 
j=0;
rxlen=0;
chksum=0;

şeklinde yazın ki, kullandığınızı anlasın...
Özel mesaj okumuyorum, lütfen göndermeyin.

olemiss

Yerel (yani stack üzerinde yaratılmış olan) değişkenler ile ilgili bir not da benden; aşağıdaki örneğe bakın:

int my_function()
{
    int temp;
    static int perm;

    ...
}

Evet, perm değişkeni "yerel" bir değişken, fakat static olarak tanımlandığı için, my_function() fonksiyonu işini bitirdikten sonra perm değerini koruyacak, fonksiyonun bir sonraki çağrılışında bu değişken sıfıra initialize edilmeyecektir.  Bilginize.
Yazılım Mühendisi, Çevirmen.

selvi

Alıntı yapılan: meftun - 11 Aralık 2013, 20:11:38
Dediğim şekilde bir dener misiniz?
Yani:
unsigned char  i=0, j=0,rxlen=0,chksum=0;


mesaj birleştirme:: 11 Aralık 2013, 20:17:13

Bu da olmazsa main fonksiyonun içine
i=0; 
j=0;
rxlen=0;
chksum=0;

şeklinde yazın ki, kullandığınızı anlasın...

belirttiginiz iki farkli sekilde denedim ayni hatayi veriyor.
j ve chksum degiskenleri bir fonksiyonda tanimlandigi halde fonksiyon icinde kullanilmamis onun icin uyari veriyormus.
  ama i degiskeni hala hata veriyor.i degiskeni ana fonksiyon icinde while dongusunde kullanildi.i degiskeni farkli fonksiyonlarda ayriyeten tanimlanmis ve program icinde kullanilmis.ornek;
unsigned char spi_rw(unsigned char addr, unsigned char data)
{
   unsigned char i;
   
   //SCK = 0;
   output_low(SCK);
  // nSEL = 0;
  output_low(nSEL);
   
   for (i = 0; i < 8; i++) 
   {
      if (addr & 0x80)
         //SDI = 1;
         output_high(SDI);
      else
        // SDI = 0;
        output_low(SDI);
      addr <<= 1;
     // SCK = 1;
     output_high(SCK);
     #asm
     // asm("NOP");
       NOP
     #endasm
     // SCK = 0;
     output_low(SCK);
   }
   
   for (i = 0; i < 8; i++) 
   {
      if (data & 0x80)
         //SDI = 1;
         output_high(SDI);
      else
         //SDI = 0;
         output_low(SDI);
      data <<= 1;
      //SCK = 1;
      output_high(SCK);
      if (input(SDO))
         data |= 0x01;
      else
         data &= 0xfe;
      //SCK = 0;
      output_low(SCK);
   }
   //nSEL = 1;
   output_high(nSEL);
   //SCK = 1;
   output_high(SCK);
   return (data);
}
Yaşam anlamlandırıldıkça kutsaldır....

Gökhan BEKEN

Şimdi işin rengi değişti. Bizim gördüğümüz i değişkenin warning'i anafonksiyondaki "i" değil değil bu fonksiyonlardaki "i" değişkenleri olabilir. En iyi yöntem değer vermek yani kullanmak. Dediğim yöntemleri onlara da uygulayınız.
Özel mesaj okumuyorum, lütfen göndermeyin.

xoom

Tekrar ediyorum.. warningi verdiği satırdaki Değişkeni kullanıp kullanmadığınızı kontrol edin.. birden fazla i değişkeni farklı fonksiyonlarda olabilir ama siz birisini hiç kullanmıyorsunuz demekki.  Derleyicinin yalan söyleyecek hali yok.. Hatayı aldığınız satırdaki değişkeni kullanmıyorsunuz demekki.

selvi

#12
Alıntı yapılan: xoom - 12 Aralık 2013, 16:42:50
Tekrar ediyorum.. warningi verdiği satırdaki Değişkeni kullanıp kullanmadığınızı kontrol edin.. birden fazla i değişkeni farklı fonksiyonlarda olabilir ama siz birisini hiç kullanmıyorsunuz demekki.  Derleyicinin yalan söyleyecek hali yok.. Hatayı aldığınız satırdaki değişkeni kullanmıyorsunuz demekki.

programi birden fazla kontrol ettim.degisken olarak tanimlanip da programda kullanilmayan bir fonksiyon yok.uyari global olarak tanimladigi degisken satiri gosteriyor.o satirda:50 satirda uyari var.50.satirda da asagidaki tanimlama var.
unsigned char  i, j,rxlen,chksum;



mesaj birleştirme:: 12 Aralık 2013, 18:25:08

  en iyisi ben programi komple vereyim.hem derleme hem de bakmaniz icin program asagidaki gibifir.

#include <16f88.h>     // Kullanýlacak denetleyicinin baþlýk dosyasý tanýtýlýyor.
#include <math.h>

#use delay(clock=8000000)   // Gecikme fonksiyonu için kullanýlan osilatör frekansý belirtiliyor
//setup_oscillator(OSC_4MHZ);//#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOLVP,NOBROWNOUT,MCLR
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES MCLR                     //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOIESO  

#use fast_io(a)
#use fast_io(b)

//const unsigned char tx_test_data[10] = {0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6d};  // Tx fixed paylaod every 1 second£¬ the 10th data is the checksum


#define SI4432_PWRSTATE_READY      01      // define ready mode
#define SI4432_PWRSTATE_RX         05      // define Rx mode
#define SI4432_Rx_packet_received_interrupt   0x02      // Packet received interrupt
#define EZRADIOPRO_RECEIVED_PACKET_LENGTH     0x4B      // received packet length

#define  TX0_RX1   spi_rw(0x0e|0x80, 0x02)      // antenna state for Rx
#define  TX0_RX0   spi_rw(0x0e|0x80, 0x00)         // antenna state for ready mode ,standby mode, power down mode 

#define LED_RX     pin_a3   //eklenecek kisimlar
//#define button  pin_a3   //eklenecek kisimlar

#define  nIRQ      pin_b6      // MCU   input
#define  SDO       pin_b1      // MCU   input
#define  nSEL      pin_a1      // MCU   output
#define  SDI       pin_b2      // MCU   output
#define  SCK       pin_b4      // MCU   output
#define  SDN       pin_b5      // MCU   output

unsigned char  i, j,rxlen,chksum;

unsigned char count_50hz;

unsigned char ItStatus1, ItStatus2;

unsigned char rf_timeout;

unsigned char rx_buf[64];

typedef struct 
{   
   unsigned char reach_1s               : 1;
   unsigned char rf_reach_timeout         : 1;
   unsigned char is_tx                  : 1;   
}   FlagType;

FlagType                   Flag;

void rx_data(void);

unsigned char spi_byte(unsigned char data);
unsigned char spi_rw(unsigned char addr, unsigned char data);

void SI4432_init(void);

void delay_1ms(unsigned char time);

void port_init(void); 

void timer_init(void);


void main()
{ 
   
   setup_oscillator(OSC_8MHZ);  
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(no_analogs);
   setup_adc(ADC_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   // unsigned char  i, j,rxlen,chksum;
  // OSCCON = 0X70;   // internal osc, 8M osc
   
  // WDTCON = 0X00;  // watchdog
   
   
    port_init();     // initial io port
     
    output_high(SDN);
    delay_1ms(10);   // reset RF module
    
    output_low(SDN);
    delay_1ms(200);   // delay 200ms then enter normal mode 
 
    
    SI4432_init();  // initail RF module
    
    TX0_RX0;   // set antenna 
 
   //output_high(LED_RX) ;delay_ms(500);output_low(LED_RX);delay_ms(1000);  //zamani denemek icin
   timer_init();
   
   count_50hz = 0;
   Flag.reach_1s = 0;

   ////INTCON = 0xc0;   // enable interrupt
   //setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
   
   //set_timer1(63036);
   
   //enable_interrupts(int_timer1);
   
   while(TRUE)
   {   
      if(input(!nIRQ))
      {    
         ItStatus1 = spi_rw(0x03,0x00);   // clr interrupt                                 //read the Interrupt Status1 register
         ItStatus2 = spi_rw(0x04,0x00);   // clr interrupt
         
         if(ItStatus1&0x02)
         {   
            rxlen = spi_rw(EZRADIOPRO_RECEIVED_PACKET_LENGTH,0x00);      // read packet length
            
            //SCK = 0;
            output_low(SCK);
            //nSEL = 0;
            output_low(nSEL);
            spi_byte(0x7f);      // read data from FiFo
            for(i = 0;i<rxlen;i++)   
            {
               rx_buf[i] = spi_byte(0x00);
            }
           // nSEL = 1;
           output_high(nSEL);
            
            spi_rw(0x07|0x80, SI4432_PWRSTATE_RX);                  // back to receive mode after received data
            
            if(rxlen==10)
            {                              
               chksum = 0;
               for(i=0;i<9;i++)      // cal Checksum
                    chksum += rx_buf[i];
                    
                 if(( chksum == rx_buf[9] )&&( rx_buf[0] == 0x41 ))     // check the checksum and packet                  
                 {                       
                    //LED_RX=LED_RX^1;   // data is correct then flash the LED
                    output_toggle(LED_RX);
                 } 
                 else
                 {
                    rx_data();     // restart Rx when data is not correct.
                 }   
              }
           }   
      }   
   }   
}


void delay_1ms(unsigned char time)
{
   unsigned char i,k;
   for(k = 0; k< time; k++)
   {
      for(i = 0; i<130; i++)
      {
        #asm
         NOP
        #endasm
      }
   }      
}


void timer_init(void)
{
   //T1CON = 0x31; 

   //TMR1IE = 1;
  // TMR1L = 0x78;    //intial timer
   //TMR1H = 0xec;
  
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
  
   set_timer1(63036);                  //intial timer
   enable_interrupts(int_timer1);
   enable_interrupts(GLOBAL);    // enable interrupt
}

#int_timer1
void interrupt_ISR_timer(void)
{
 
    //unsigned char i;
   //if(TMR1IF)
     //if(interrupt_active(int_timer1))  //istenirse ccs c icin eklenebilir
    // {
     
         //TMR1L = 0x78;      // timer = 20ms  
        // TMR1H = 0xec;
      set_timer1(63036);    // timer = 20ms 
   
      rf_timeout++;
      if(rf_timeout == 25)
      {
         Flag.rf_reach_timeout = 1;   // tx timeout or Rx timeout
      }   
      count_50hz++;
          if(count_50hz==50)  // 
           {
                count_50hz=0;
                Flag.reach_1s = 1;   //timer for 1s
                
           } 
          // clear_interrupt(int_timer1); //istenirse ccs c bayragi silmek icin kullanilabilir.
           
         // TMR1IF=0;
   //}
   
} 
void port_init(void) 
{ 
    //ANSEL = 0;
   // ANSELH = 0;   // AD is not used   
   //WPUA = 0;   // no pull up resister
   // IOCA = 0;  // no io interupt
    
    set_tris_a(0x00);
    set_tris_b(0b01000010);
    output_a(0x00);
    output_b(0x00);
}   


void SI4432_init(void)
{   
   ItStatus1 = spi_rw(0x03,0x00);      // clr RF interrupt factor
   ItStatus2 = spi_rw(0x04,0x00);
   
   spi_rw(0x06|0x80, 0x00);           //  Set RF interrupt
   
   spi_rw(0x07|0x80, SI4432_PWRSTATE_READY);   // enter ready mode

   spi_rw(0x09|0x80, 0x7f);     //  load cap = 12P

   spi_rw(0x0a|0x80, 0x05);   // output clk set
   spi_rw(0x0b|0x80, 0xea);    // GPIO 0 digital output
   spi_rw(0x0c|0x80, 0xea);    // GPIO 1 digital output
   
   spi_rw(0x0d|0x80, 0xf4);     // /GPIO 2 = rx data
   
   spi_rw(0x70|0x80, 0x2c);  
   spi_rw(0x1d|0x80, 0x40);     // enable afc
      
   // 1.2K bps setting
   spi_rw(0x1c|0x80, 0x16);   // according to Silabs's excel   
   spi_rw(0x20|0x80, 0x83);     
   spi_rw(0x21|0x80, 0xc0); 
   spi_rw(0x22|0x80, 0x13); 
   spi_rw(0x23|0x80, 0xa9); 
   spi_rw(0x24|0x80, 0x00); 
   spi_rw(0x25|0x80, 0x04);   
   spi_rw(0x2a|0x80, 0x14);
   spi_rw(0x6e|0x80, 0x09);
   spi_rw(0x6f|0x80, 0xd5);   
   //1.2K bps setting end      
   
   spi_rw(0x30|0x80, 0x8c);   // enable PH+ FIFO, enable crc, msb                  
   spi_rw(0x32|0x80, 0xff);   // head = byte0, 1, 2, 3    
   spi_rw(0x33|0x80, 0x42);   //  header = byte 0,1,2,3, sync = byte 3, 2
            
   spi_rw(0x34|0x80, 16);     // preamble = 16 nibbles
   spi_rw(0x35|0x80, 0x20);     // preamble detection = 20bit
   spi_rw(0x36|0x80, 0x2d);     // sync word =  0x2dd4
   spi_rw(0x37|0x80, 0xd4);
   spi_rw(0x38|0x80, 0x00);
   spi_rw(0x39|0x80, 0x00);
   spi_rw(0x3a|0x80, 's');     // header for tx £º¡°swwx"
   spi_rw(0x3b|0x80, 'w');
   spi_rw(0x3c|0x80, 'w');
   spi_rw(0x3d|0x80, 'x');
   spi_rw(0x3e|0x80, 10);     // length of payload = 10
   spi_rw(0x3f|0x80, 's');    // head check £º¡±swwx"
   spi_rw(0x40|0x80, 'w');
   spi_rw(0x41|0x80, 'w');
   spi_rw(0x42|0x80, 'x');
   spi_rw(0x43|0x80, 0xff);     // all bit to be checked 
   spi_rw(0x44|0x80, 0xff);     
   spi_rw(0x45|0x80, 0xff);     
   spi_rw(0x46|0x80, 0xff);     
   spi_rw(0x6d|0x80, 0x07);     // maximum ouput power

   spi_rw(0x79|0x80, 0x0);     // non hop
   spi_rw(0x7a|0x80, 0x0);     // non hop   
   
   spi_rw(0x71|0x80, 0x22);    // FiFo, FSK , not need clk         
   spi_rw(0x72|0x80, 0x20);     // deviation:  20KHz   

   spi_rw(0x73|0x80, 0x0);     // no frequency offset
   spi_rw(0x74|0x80, 0x0);     // no frequency offset
      
   spi_rw(0x75|0x80, 0x53);     // frequency:  433.5
   spi_rw(0x76|0x80, 0x57);  
   spi_rw(0x77|0x80, 0x80);      
}

void rx_data(void)
{   
   //unsigned char i, chksum;
   Flag.is_tx = 0;
   
   spi_rw(0x07|0x80, SI4432_PWRSTATE_READY);   //enter ready mode
   TX0_RX1;      // antenna switch set
   delay_1ms(5);      //
   
   spi_rw(0x08|0x80, 0x03);  //clr tx, Rx fifo
   spi_rw(0x08|0x80, 0x00);  //clr tx, Rx fifo
      
   spi_rw(0x07|0x80,SI4432_PWRSTATE_RX );  // enter rx mode
   
   spi_rw(0x05|0x80, SI4432_Rx_packet_received_interrupt);  // set rf module packet receive interrupt
      
   ItStatus1 = spi_rw(0x03,0x00);      //clr interrupt factor
   ItStatus2 = spi_rw(0x04,0x00);      //clr interrupt factor      
}   


unsigned char spi_byte(unsigned char data)
{
   unsigned char i;
   
   for (i = 0; i < 8; i++)      // spi simulation with normal IO
   {                           // read data at rising edge and wite data at falling edge of the sck
      if (data & 0x80)
        // SDI = 1;
         output_high(SDI);
      else
         //SDI = 0;
         output_low(SDI);
         
      data <<= 1;
      //SCK = 1;
     output_high(SCK);
      
      if (input(SDO))
         data |= 0x01;
      else
         data &= 0xfe;
         
      //SCK = 0;
      output_low(SCK);
   }
   
   return (data);
}
//-------------------------------------------
unsigned char spi_rw(unsigned char addr, unsigned char data)
{
   unsigned char i;
   
   //SCK = 0;
   output_low(SCK);
  // nSEL = 0;
  output_low(nSEL);
   
   for (i = 0; i < 8; i++) 
   {
      if (addr & 0x80)
         //SDI = 1;
         output_high(SDI);
      else
        // SDI = 0;
        output_low(SDI);
      addr <<= 1;
     // SCK = 1;
     output_high(SCK);
     #asm
     // asm("NOP");
       NOP
     #endasm
     // SCK = 0;
     output_low(SCK);
   }
   
   for (i = 0; i < 8; i++) 
   {
      if (data & 0x80)
         //SDI = 1;
         output_high(SDI);
      else
         //SDI = 0;
         output_low(SDI);
      data <<= 1;
      //SCK = 1;
      output_high(SCK);
      if (input(SDO))
         data |= 0x01;
      else
         data &= 0xfe;
      //SCK = 0;
      output_low(SCK);
   }
   //nSEL = 1;
   output_high(nSEL);
   //SCK = 1;
   output_high(SCK);
   return (data);
}
Yaşam anlamlandırıldıkça kutsaldır....

Burak B

#13
Global olarak tanımladığınız bir değişkeni local olarak da tanımlamanız doğru bir yazım şekli değil. Global olarak tanımladığınız değişkenlerin başına "g_" gibi bir önek koymanız ayrım açısından size kolaylık sağlayacaktır. Yani örnek vermek gerekirse;
unsigned char  g_i, g_j, g_rxlen, g_chksum;


ve

void delay_1ms(unsigned char time)
{
   unsigned char i,k;  // <- burdaki i local yukarıda g_i olarak değiştiğimiz ise global. Derleyici olsanız hangini seçersiniz ? 
   for(k = 0; k< time; k++)
   {
      for(i = 0; i<130; i++)
      {
        #asm
         NOP
        #endasm
      }
   }      
}



Örnekte olduğu gibi bir durum ile karşılaşan derleyicinin ne yapacağı kestirilemeyebilir. Bu durumda derleyici global olan değişkeni local olanla karıştırabilir. Bu derleyiciden derleyiciye değişebilir.

Hatta benim düşünceme göre i,j,k,l,m,n,... gibi basit değişenkenlerin global olarak tanımlanması da yanlıştır. Kodlama etik ve kurallarına aykırı buluyorum. :)
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

selvi

 belirttiginiz sekilde global degiskenleri farkli isimle tanimladim.derleyicide  "i degiskenini herhangi bir yerde kullanmadiniz diye uyari veriyor"
  imkaniniz varsa o programi derleyebilirmisiniz.
Yaşam anlamlandırıldıkça kutsaldır....