Zdravím všechny. Potřebuji v tomto malém procesoru mít řadu čísel, podle kterých se budou vykonávat další operace. Jde mi o to, aby čísla byla nejlíp v paměti programu, ne v RAMce, tedy aby nezabírala zbytečný prostor. Jejich hodnoty se nebudou měnit. Jak je spravně zapsat? Zkoušel jsem něco takovéhoto:
ale pokud potřebuji čísel víc a hlavně typ unsigned int, tak prostě program nefunguje (simulace v AVR studiu ano, v procesoru ne). V C se dokonale nevyznám, tak hledám radu zde…
Dík za nápady
Zdarec,
“avr-libc-user-manual.pdf”, kapitola 5 “Data in Program Space”. Kdybys to nedal dohromady tak ti pošlu i příklad. Ovšem části kódu, ze kterých to složíš, tam jsou.
Musíš si však uvědomit, že pro načítání dat z flash musíš použít speciální funkce (Např.: strcmp_P, strcopy_P, atd) z knihovny <avr/pgmspace.h> , protože je nemůžeš číst přímo.
piityy > Dík, to je přesně ono, co jsem potřeboval…
Divous > Dobrý postřeh, na čtení je potřeba použití složitější funkci, ale k dramatickému nárustu kódu naštěstí nedojde…
Výsledek teda nakonec vypadá asi takto (kdyby někdy někdo řešil stejný problém):
[code].
. #include <avr/pgmspace.h>
const unsigned char promenna_char [25] PROGMEM = {27,28,32,38,41,46,49,53,56,60,62,68,73,78…
const unsigned int promenna_int [24] PROGMEM = {4500,2250,1500,1125,900,750,643,563,500…
.
.
.
pom1 = pgm_read_byte(&(promenna_char[0])); // nacteni prvni hodnoty promenne uchar z pameti do “pom1”
pom2 = pgm_read_word(&(promenna_int[0])); // nacteni prvni hodnoty promenne uint z pameti do “pom2”
[/code]