codevision - problem s pointery

Aleš Novák ales.novak@t-email.cz
Středa Červenec 5 21:32:52 CEST 2006


G>  Diky za odpovedi. Tu prvni variantu s celociselnym delenim
G> bohuzel zavrhuji, potrebuji to provest behem par instrukci a ne
G> cekat na deleni :). Je dost mozne ze jazyk CodeVision C plne

Inteligentni kompilator vi jak se deli 256. Mozna by stalo za to
vyzkouset. Keil vezme jen horni bajt.

G> neodpovida specifikacim C. Coz mi neprimo potvrdil i autor po mailu.
G>  (zapomnel jsem podotknout ze program byl pro Atmega32 , memory model : Small )
G>  
G>  Vyzkousim jeste "spravnejsi" pretypovani :
G>  
G> ptrL = (unsigned char*)&addr;Jinak co se tyce dalsich BUG,
G> napriklad problem s integer operacemi.
G> uvedu prikladunsigned int cislo;
G> cislo = 1234;
G> cislo &= 0b 0000111111111111; //0x0FFF

Tady bych radeji zvolil zapis 0x0FFF nez ten neobvykly prefix.
Krome toho nemusim ty jednicky pocitat :-)

G> //cislo by nyni melo byt 1234, jenze neni. je 0x0000Zajimava
G> zaludnost se taky skryva v adresovani poli. Dle manualu by pole
G> mohlo byt az s 16bit indexem (unsig.int).
G> Nekdy to funguje, jindy ne. To je ale problem v jinem mem programu.
G> Opet uvadim jen priklad a jde mi o to zda promenna i jakozto index
G> pole se ma nejak pretypovat nebo ne. Standartni C jazyk nic
G> takoveho nevyzaduje, ani CAVR to v manualu nema.unsigned char pole[511];
G> unsigned int i;
G> for (i=0; i<512; i++) pole[i]=0xFA;BTW. mate nekdo vyssi verzi nez CAVR 1.23.6a (standart) ?

Nejak to muj postovni klient nezvladl opsat, nicmene posledni prvek
pole je 510 ne 511.

G> LP.





Další informace o konferenci Hw-list