Arduino a alokace mista pro promenne

Pavel Hudecek edizon na seznam.cz
Čtvrtek Říjen 24 17:00:28 CEST 2019


Proto jsem vždycky používal CodeVision. Tam si třeba nadeklaruju "eeprom int 
bla" a vím že bla je v eeprom a hotovo. Stejně tak s flash.

Vtipný je, že x86 tohle podporují už od 286 (a od 386 použitelně), ale z mě 
nepochopitelných důvodů se to tam v podstatě nepoužívá a tak existují věci 
jako útok přes přetečení bufferu do programu:-)

PH

-----Původní zpráva----- 
From: Jan Waclawek
To je skor prejav toho, ze C (a tym aj C++) nie je pripraveny na koncept
roznych pamatovych priestorov. Existuje uz asi 15 rokov navrh rozsireni,
tzv. named address spaces, ale nejako sa neujal. Pre AVR je zhodou
okolnosti tiez uz asi 10 rokov implementovany
https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spaces.html , ale aj
"vdaka" arduinu sa zakonzervovalo prave skor pouzitie toho nestandardneho
atributu __progmem.

Ono to ma este vselijake relativne zlozite suvislosti najma pre vacsie
AVRka (nad 64kB FLASH) a aj s kompromisom medzi efektivnym (co sa tyka
velkosti binaru aj rychlosti vykonavania a ciastocne aj spotreby RAM) a
"unifikovanym" (t.j. kde netreba rozmyslat) kodom.

K tomu textu z manualu avr-libc este doporucujem ako doplnkove citanie
tento tutorial (v podstate len prvy post z celeho vlakna)
https://www.avrfreaks.net/forum/tut-c-gcc-and-progmem-attribute?name=PNphpBB2&file=viewtopic&t=38003

----- Original Message ---------------
Subject: Re: Arduino a alokace mista pro promenne>ne, to je vlastnost 
architektury CPU - viz. třeba
>https://www.nongnu.org/avr-libc/user-manual/pgmspace.html
>
>Pavel Brychta
>
>Dne 24.10.2019 v 14:00 Jirka Mww napsal(a):
>> Ahoj Martine,
>> díky za vysvětlení.  To je vlastnost Arduina nebo jazyka C++ nebo co
>> to je za jazyk  ?
>>
>> Zdravi
>> Jirka Sloupenský  OK1MWW
>>
>>
>> čt 24. 10. 2019 v 13:45 odesílatel Martin Locker <locker na vosrk.cz
>> <mailto:locker na vosrk.cz>> napsal:
>>
>>     Ahoj Jirko,
>>
>>     RAM je potřeba na ten textový řetězec, standardně se ukládá do RAM
>>     jako proměnné. Dá se vynutit jeho uložení do FLASH makrem F().
>>
>>     Serial.println(F("Retezec ve FLASH"));
>>
>>     Martin
>>
>>         ------------------------------------------------------------------------
>>         ----- Původní zpráva -----
>>         Odesilatel: "Jirka Mww" <jirka.mww na gmail.com>>         mám tady 
>> rozpracovaný "větší projekt " s Arduinem Mini s
>>         ATMEGA328. Větší to je jen z hlediska použitelnosti toho
>>         procesoru, jinak nic moc náročného. Při překladu se mi ale
>>         začala objevovat hláška, že budu mít brzo málo místa pro
>>         proměnné v RAM , přitom jich tam zas až tolik není.
>>         Mám tam ale dost ladících výpisů, ve velké většině jen pevný
>>         text o tom, že se něco stalo.
>>         Když některý z těch výpisů zakomentuji, místo pro proměnné se
>>         okamžitě o několik bajtů zvětší. Můj dotaz je tedy, na co
>>         potřebuje Arduino pro každý příkaz
>>         serial.print ("hlaska"); nejake místo v RAM. Kdyz jsem jeste
>>         psal v assembleru, měl jsem proceduru, ktera měla za svym
>>         volanim primo umisteny text v ASCI , zakonceny nulou a tento
>>         text se vypsal bez naroku na pamet RAM. Nevite, jak to dela to
>>         Arduino ? Docela bych tomu chtel rozumet. 



Další informace o konferenci Hw-list