bitfield v avr-gcc

Jan Waclawek konfera@efton.sk
Čtvrtek Červen 19 09:02:28 CEST 2008


>>On ten "magic" moze mat svoje miesto ale aj ta akademicka cistota o ktoru 
>>Wirth usiloval ma nieco do seba.
>
>A co si Kefaline predstavujete pod slovem "magic"? 
>Definicia je podla mna uplne exaktna.
>Raz si v tomto threade pisal, ze co moze urobit prekladac, nech urobi a clovek sa o to nemusi starat. To, ze sizeof vrati celu velkost objektu vratane interneho a koncoveho paddingu je presne tento pripad.


No, pod slovom "magic" tu Kefalin myslel to co pan kolega AP nazyva "atribut", t.j. "nieco" co rozsiruje jazyk v "smere" jeho konkretnej implementacie. To, ze to funguje, je jedna vec; to, ci je dobre to pouzivat je vec druha.

Wirthova akademicka predstava je, ze ak programu zapisanemu vo vyssom jazyku poskytnes vstupny vektor (data, stimuly), tak z neho vypadne jednoznacny a reprodukovatelny vystupny vektor, nezavisle na platforme kde bol program prekladany a spustany. To sizeof je typicka ukazka toho, ked to neplati.

V skutocnosti vsak sizeof vobec nepotrebujes, s vynimkou:
1. ked sa lezie na nejaky konkretny hardware, ako som pisal, Wirth toto riesi mavnutim ruky a odkazom na sluzby OS, ktory sa ma pisat v asembleri. Nemyslim si, ze to tak musi byt; nech teda ten sizeof tam je ale nech su programatori varovani ze jeho pouzitie je obmedzene a kontrolovane a zneuzitie sa tresta podla zakona.
2. ako sizeof/sizeof na zistenie velkosti konstantneho (prip. dynamickeho) pola; na to vsak ma existovat "magic" ineho druhu, "sizeofarray" alebo nieco take, co je na rozdiel od samotneho sizeof nezavisle od platformy, t.j. neporusuje to Wirthovsku cistotu.

---

Donedavna som si myslel, ze u small embedded sa roznym takymto magicom neda vyhnut - najma kvoli pirstupom k roznym druhom pamati (na to vyssie jazyky vobec nijako nemyslia, predpoklada sa uniformna jedna pamat, co je vo "velky" pocitacoch takmer vyhradne tak). Vypukle je to prave u '51 kde je tych pamati (fyzicky) a pristupov k nim hafo; takze sa pouzivaju rozne "atributy" (v tomto kontexte sa niekedy nazyvaju "memory class designator", ak by sme tych slovicok mali malo). Lenze teraz vznika novy '51 (presnejsie, C8051, kde C=Cygnal t.j. SiLabs) prekladac u HiTechu (ano to su ti PICkari), ktory tuto predstavu ruca - sam rozhoduje, do ktorej pamati co umiestnit; napriklad jedna z jeho fint je, ze konstantne pole (k comu typicky u ostatnych prekladacov treba lepit atributy aby ho dal do programovej pamate) nielenze da automaticky do programovej pamate, ale ked usudi, ze ma dostatok internej pamate, tak si ho tam prekopiruje a pouziva odtial... Cim jazyk ostane akademicky cisty a umozni jednak vyssiu prenositelnost, druhak optimalizaciu necha na prekladaci (co je v dlhodobej perspektive tiez dobra vec).

wek






Další informace o konferenci Hw-list