R

ccs c goto komutu

Başlatan r_d_, 10 Temmuz 2014, 15:49:08

r_d_

Arkadaşlar merhaba, c konusunda biraz tecrübesizim ve bir konuda takıldım. Başım goto komutu ile dertte, kullanmam gerekiyor ama bu sefer de sorun çıkarıyor. Goto yerine ne kullanabilirim onu bilmiyorum. Yapmak istediğim şeyi kısaca açıklayayım: Senkron çalışan led moduller tasarlamaya çalışıyorum ve şu anda modül 2 flash moduna sahip.  Void bekle() fonksiyonunda pin_b4 den sinyal geldiğinde tekrar mainin içerinde bulunan case 1(1. mod) a dallanması gerekiyor. Goto kullandığım zaman undefined label that was used in a goto> aaa ve bbb diyor  tanımıyor doğal olarak. Void bekle() fonsiyonunda pin_b4 den sinyal geldiği zaman nasıl  aaa: veya bbb: noktasına dallandırabilirim?
int b=0;
int a=0;
int mode=0;
void bekle();

void moded(){
mode++;
while(input(pin_b1));
}

void main()
{
      setup_adc_ports(NO_ANALOGS);
      setup_adc(ADC_OFF);
      setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
      setup_comparator(NC_NC);
      set_tris_b(0b00110010);
     
   while(1)
   {  output_b(0x00);            //önemli
         
      if(input(pin_b1))
      {
         moded();
      }     
     
      switch (mode)
      {     
         case 0:                           //mode=0
         {                     
            if(input(pin_b4))                //SLAVE
            {             
               if (input(pin_b1))
               {
                  moded();
               }
               else
               {
                  aaa:
                  output_high(pin_b0);
                  delay_ms(25);
                  b=19;
                  bekle();
                  output_low(pin_b0);
                  b=20;
                  bekle();
               }
            }
            else                             //MASTER
            {                     
               output_high(pin_b0);
               output_high(pin_b2);
               delay_ms(25);
               output_low(pin_b2);
               b=19;
               bekle();
               output_low(pin_b0);
               b=20;
               bekle();
            }
         break;
         }
         case 1:                          //mode=1
         {                 
            if(input(pin_b4))              //slave
            {             
               if (input(pin_b1))
               {
                  moded();
               }
               else
               {
                  bbb:
                  output_high(pin_b0);
                  delay_ms(25);
                  b=9;
                  bekle();
                  output_low(pin_b0);
                  b=10;
                  bekle();
                  output_high(pin_b0);
                  b=10;
                  bekle();
                  output_low(pin_b0);
                  b=10;
                  bekle();
               }
            }
            else
            {                      //master
               output_high(pin_b0);
               output_high(pin_b2);
               delay_ms(25);
               output_low(pin_b2);
               b=9;
               bekle();
               output_low(pin_b0);
               b=10;
               bekle();
               output_high(pin_b0);
               b=10;
               bekle();
               output_low(pin_b0); 
               b=10;
               bekle();
            }
         break;
         }
         case 2:                         //mode=2
         {
            mode=0;
         break;
         }
      }
   }
}
   
void bekle()
{
   for (a=0;a<b;a++)
   {
      if(input(pin_b4))
      {
              if(mode==0)
              { goto aaa;
              }
            else if(mode==1)
              {
               goto bbb;
              }
         
         
      }
      else
      {
      delay_ms(25);
      }
   }
}

kdrsrn

Öncelikle merhaba,

CCS C ye yeni yeni başladım baya acemiyim hatam varsa affola şuradaki;

else 
               {
                  aaa:
                  output_high(pin_b0);
                  delay_ms(25);
                  b=19;
                  bekle();
                  output_low(pin_b0);
                  b=20;
                  bekle();


gibi bir etiket yapmışşın bu etiketi if else ye değilde ayrı bir bölümde etiket olarak eklesen ve burada yaptırmak istediğin işlemleri orada yapıp tekrar programa dönsen olmazmı ? ???

xoom

Tam olarak açıklamanı anlamamakla birlikte.
Switch - Case yapını bir fonksiyon içinde tanımlayıp pin_b4'den gelen verilere göre fonksiyona değer döndürebilirsin..bu sayede case yapısında istediğin case yapısına dallanabilirsin.

Powered by EzPortal