bitfield v avr-gcc
Andrej Jancura
hw_aj@zoznam.sk
Úterý Červen 17 11:21:36 CEST 2008
Jano,
este ma napadlo nasledovne. Neviem ci to je trochu mimo, ale nestacilo by
namiesto tych Tvojich funkcii len praobycajne nastavenie/nulovanie toho
Tvojho flagu. Asembler pouzije aj tak jednoslovnu instrukciu. Takze si
myslim, ze si staci len nadefinovat to bitove pole a je hotovo. Na
nastavovanie mozes pouzit priamo Pole.Bit.Funkcia = 1. Zapis do EEPROM si
urobis cez EEPROM_DATA=Pole.Byte.Data[0..N].
To potom mozes robit presne to, co chces a kompilator sa postara o vsetko
ostatne, vratane toho, ze mozes nastavovat aj skupiny bitov. To mozes mat
potom poprehadzovane aj poradie tych bitov ci ich grup. Nazvy si postrazi
kompilator. Jedine obmedzenie je na pocet bitov v byte.
A.
----- Original Message -----
From: "Jan Waclawek" <konfera@efton.sk>
To: "HW-news" <hw-list@list.hw.cz>
Sent: Monday, June 16, 2008 8:41 PM
Subject: Re: bitfield v avr-gcc
>Skus napisat konkretne co potrebujes, lebo ja tomu nejako nerozumiem.
Mam menu riadene tabulkou. Drviva vacsina poloziek je nieco zmenit, typicky
je to nastavit (YES/NO, ON/OFF) nejaky konfiguracny bit. Tabulka je pole
structov, prva polozka je string ktory popisuje polozku ("COMPRESSOR
MOTOR"), druha polozka je typ polozky (bit s hodnotami "ON/OFF"), tretia je
"nejaky" pointer. Jedna z moznosti je mat pointer na funkciu ktora dany bit
nastavi/vynuluje, ale to je na hony vzdialene efektivite. Idealny by bol
pointer priamo na menenu polozku, lenze to momentalne nejde. Takze to
obchadzam tym pevnym poradim bitov v konfiguracnom byte a quasi-"pointer" si
skladam (presnejsie, v realnej implementacii ako to teraz je, je to pointer
na iny struct, ktory obsahuje dva pseudopointre (pointer na byte a poradie v
byte), pretoze menim sucasne hodnotu v EEPROM aj shadowRAM).
Další informace o konferenci Hw-list