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