Kviz - podivna chovani programu pro 8bitove uP

Jan Kral kral@fortech.cz
Pondělí Leden 8 10:56:01 CET 2007


Zdravim vespolek,

kazdy se jiz urcite setkal, ze jim napsany program do procesoru fungoval podivne a nekdy chybu najdeme a nekdy obcasne podivne chovani urcime jako vliv ruseni z vnejsku. Prave na tento typ chyby tady mam maly kviz, kdy je je problematika vysyntetizovana do nekolika malo radku kodu, tak aby to bylo patrne co nejdrive. Kod je urceny pro 8bitove uP typu AVR nebo 51. Rychlost procesoru je dostatecna, aby se stihla vykonavat smycka v main.

Jestli nekdo spravne pozna, jaka bude konecna hodnota promenne "result" a hlavne proc? Pro stouraly "konecnou" je mysleno dlouhe obdobi treba i nekolika dnu. 

Ja samozrejme reseni i duvod znam. Kdo prijde na spravnou odpoved, tak mu nektera podivna chovani nekterych programu budou jasnejsi.

S pozdravem Jan Kral

int    counter = -22;
int    result = 1;

void timer0handler( void ) interrupt 1 {
       counter --;
       if (counter == -20 )
          counter = 0;
       if (counter == -5 )
          counter -= 10;
       if (counter <-40 )
          counter = 0;
}

void main( void ) {
      Init_Timer;			// casovac 1000x/s

      while (1) {
        if (counter == -10)
           result = 5;             // A
        if (counter == -30)
           result = 10;            // B
        if ((counter-result)>0)
           result = 100;           // C
        if ((counter-result)<-400)
           result = 100;       }   // C
  }




Další informace o konferenci Hw-list