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