bitfield v avr-gcc

Jindrich Kubec kubecj@asw.cz
Úterý Červen 17 00:40:31 CEST 2008


At 00:34 17.6.2008, Jan Waclawek wrote:
>Mno, ja som myslel konstantne tabulky. Ako ten priklad toho menu co sme 
>dnes spominali: v menu sa vo viacerych bodoch manipuluje s premennou 
>(napr.: vytiahni z pamate byte, zobraz, pri stlaceni tlacitka +/- 
>inkrement/dekrement a zobraz, pri stlaceni tlacitka ENTER uloz naspat do 
>pamate); potom pre vsetky premenne mozeme vygenerovat takuto funkciu plus 
>mozeme vygenerovat nejaky system ako sa chodi z funkcie do funkcie; alebo 
>si napiseme jednu funkciu ktorej sa odovzda pointer na premennu, a vsetky 
>pointre si ulozime do (konstantnej) tabulky, a menu len chodi po tabulke, 
>vytahuje z nej pointre a vola stale tu istu manipulacno-zobrazovaciu 
>funkciu. U menu je to hovadina, lebo na rychlosti nezalezi; ale inde je 
>takyto pristup typicky pomalsi ale setri pamat; no a to je ten moj bias.

Mno, treba ja bych to tree-menu resil jako jednourovnovnou tabulku, 
jednotlive urovne jsou serazeny za sebou, max. 255 polozek celkem:

typedef struct
{
   const char* s_szName;
   BYTE m_btChild; //special value 0 = last entry
} entry;

entry g_aMenu[] = { ... };

Funkce, co se o menu stara, umi obslouzit 'nahoru' (skoci na predchozi 
polozku), 'dolu' (skoci na dalsi polozku), 'escape' - skok o uroven vys a 
'enter' - coz bud skoci na podmenu a dal se vykonava, nebo vyskoci ven s 
indexem polozky v tabulce. A pak uz staci jen dlooooooooooouhy switch, 
podle delky tabulky.

Srovnejte s poctem prvku pole p. Sinka (jehoz reseni je samozrejme taky 
spravne, jen jinak). Je samozrejme mozne, ze jsem nejakou dodatecnou 
funkcionalitu prehledl - tohle umi jen zakladni navigaci a nejaky bit 
toggle. A samozrejme vyzaduje nejaky stack historie.


Jindroush (kubecj@avast.com)
http://www.kostky.org - Pro fany stavebnic LEGO.




Další informace o konferenci Hw-list