PIC-C bug ?

Fuzesi Arnold arno at freemail.hu
Tue May 20 13:43:23 CEST 2003


Sziasztok!

Talalkozott mar valamelyotok az alabbi buggal?
(Hi-Tech PIC C 7.86PL3)

#define DELAYuS(dvalue) {uint delaytemp=(dvalue/2); while(delaytemp--)
asm("nop");}

uchar getkey()
{
 KEY3=0;
 KEY4=1;
 DELAYuS(500)
 if(!KEY0) return (1);
 if(!KEY1) return (2);
 if(!KEY2) return (3);

 KEY3=1;
 KEY4=0;
 DELAYuS(500)
 if(!KEY0) return (4);
 if(!KEY1) return (5);
 if(!KEY2) return (6);

 return (0);
}
/***************************************************************************
***/
main()
{
    [...]
    printf("%1u\r\n",getkey());
    [...]
}
Ha a getkey fuggvenyen belul van egy uchar-nal nagyobb lokalis valtozo (a
DELAY makro uint valtozoja jelen esetben), akkor megkergul a program.
A printf table-jat, ahonnal az infokat szedi felrecimzi, es teljesen elteved
a program, amikor a getkey visszater.
A printf folytatja tovabb a visszaadott ertek kiirasanak feldolgozasat, de
teljesen rossz helyrol szedi az infokat, rossz helyre dolgozik.

Ha a

#define DELAYuS(dvalue) {uint delaytemp=(dvalue/2); while(delaytemp--)
asm("nop");}

helyett

#define DELAYuS(dvalue) {uint delaytemp=(dvalue/2); while(--delaytemp)
asm("nop");}

van, akkor pl. teljesen mashova teved.

Elso esetben egy masik printf-et folytat, masodik esetben meg ujraindul a
program.



Arnold





More information about the Elektro mailing list