bitfield v avr-gcc

Jan Waclawek konfera@efton.sk
Středa Červen 18 20:45:00 CEST 2008


> Dospeli sme k tomu, ze v C to nejde,

K tomu si dosiel Ty.

C je taky bastard nepodareny, ad-hoc a zle zadefinovany, ktory sa len vdaka takymto hackom moze vyvijat - vid prave sizeof a jeho magicke vlastnosti. Samotny standard sa nijako nebrani rozsireniam, akurat sa clovek tym vzdava prenositelnosti, no ale prenositelnost u malych jednocipov je aj tak len marketingovy kec.

> tak som sa opytal aj na ine jazyky. Ciste pre inspiraciu, alebo poucenie, ako sa to da - ak sa to vobec niekde da.  

Samozrejme ze sa to da. Flag predsa nie je nic ine ako typ boolean, ktory je hadam vo vsetkych vyssich jazykoch (a samozrejme mozes mat polia bitov, mat ich v strukturach, mat na ne pointre atd.; nemozes ich volne priradovat inym typom a naopak, mozes na nich robit len logicke operacie takze sa neda pomylit, atd.) V Pascale mozes vytvorit ordinalny typ s tolkymi prvkami kolko chces, a je vec prekladaca, ako to prelozi, nic nebrani prekladacu optimalizujucemu pre jednocipy to prelozit s minimom potrebnych bitov. Znova su k dispozicii pointre a kompletny aritmeticky aparat.  Je pravda ze v Pascale nie je definovane priame priradenie premennej ci bitu absolutnej adrese (ako ani napr. endianovost) ale to v konecnom dosledku nie je ani v standardnom C a je to implementacne zavisle (a casto ide o rozsirenia). Wirthov argument na tuto vec je typicky sovinizmus z velkych pocitacov, a to ze strojovo zavisle veci maju byt izolovane ovladacmi a operacnym systemom, a tieto nemaju byt kvoli efektivite pisane vo vyssom jazyku (ale v asembleri).

wek




Další informace o konferenci Hw-list