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