veď som aj čítal. Nikde som nepísal že mi chýba tých 5 bytov poľa, ale že si zamlčal kód ktorý inacializuje to pole v SRAM.
pôvodne si písat toto
1. Že si myslel miesto code const ma nenapadlo. Myslel som si že to code je tam po nepodarenom code taguxmilos napísal:Zapis som neverikoval.Kód: Vybrať všetko
code unsigned char arr[] = {0, 0b00010000, 0b00011000, 0b00011100 ,0b00011110, 0b00011111 };
2. Chýba tam slovo PROGMEM takže to do FLASH nebolo myslené.
3.
Kód: Vybrať všetko
const unsigned char arr[] = {0, 0b00010000, 0b00011000, 0b00011100 ,0b00011110, 0b00011111 };
AVR je Harvardská architektúra a C primárne počíta skôr s von Neumannovskou, takže taká FLASH sa obhospodaruje všelijakými oblbovákmi. Neviem ako je to na iných harvadrských procesoroch, ak myslíš napr ARM tam je tušim adresný priestor jeden a teda je tam architektúra von Neumann a nie je problém s rozdelenou pamäťou programu a dát.
4.V asm čo si priložil na ukážku je
Kód: Vybrať všetko
6e: 80 81 ld r24, Z
5. na prístup do poľa si použil
Kód: Vybrať všetko
tmp = arr[tmp];
Na základe týchto piatich bodov som dedukoval že pole v SRAM nieje omyl. Tak som upresnil že si neukázal kód ktorý to pole do SRAM dostal. Tým sa totiž riešenie dĺžkou programu približuje iným riešeniam. Rýchlosťou však ani náhodou. Ešte som poukázal na menšiu robustnosť. Znova opakujem nikde som nepísal že mi tam chýba 5 prvkov pola.
lh:
tvoje riešenie je elegantné z pohľadu prenositelnosti. Na AVR sa to preloží ako veľmi slušne optimálny cyklus. Na nejakej platforme ktorá má barel shifter ktorý vie rotovať o ľubovolný počet bitov v jednej inštrukcii to bude možno najlepšie možné riešenie. Pravdu povediac na takýto spôsob riešenia som ani nepomyslel. Keby si prestal prispievať bola by to veľká škoda.
BgDestroy:
Ako sa to vezme. pri veľkosti tej FLASH sa 3 - 4 inštrukcie stratia a bežne sa to prekladá pomocou makra aby to bežalo rýchlejšie.
Najpodstatnejšie z tejto debaty je asi to že optimálnych riešení môže byť niekoľko a C dáva možnosť použiť práve to ktoré sa komu hodí. Na druhej strane to ale nie je jazyk pre lepičov kódu ktorý nemajú ani potuchu o tom ako to pracuje. Tým nemyslím nikoho kto sa zúčastnil na tejto debate. Myslím tým prevažne iné vlákna hlavne v sekcii Arduino.