ATmega328 a PROGMEM

Šerých Jakub Serych na panska.cz
Středa Březen 24 20:35:23 CET 2021


Asi jsem se blbě vyjádřil. Myslel jsem to přesně v tom smyslu, jak psal původní tazatel. Když jsem si nějaké konstanty uložil do PROGMEM, program je vyhodnocoval nesprávně, aniž bych někde dostal alespoň nějaký Warning, že něco je podezřelého. Po odstranění direktivy PROGMEM mi to začalo fungovat dobře. Nepochybně to bylo nějakou mojí chybou kdesi v programu, ale to že to kompilátor v pohodě sežere, výsledný program "funguje" ale dělá něco úplně jiného, než by měl, protože asi sahá pro data někam jinam než bylo zamýšleno, je velmi nepříjemné a hrozně blbě se pak hledá problém. 

Jakub Šerých  

-----Original Message-----
From: Hw-list <hw-list-bounces na list.hw.cz> On Behalf Of Jindrich Fucik
Sent: Wednesday, March 24, 2021 8:10 PM
To: hw-list na list.hw.cz
Subject: Re: ATmega328 a PROGMEM

Co si mám představit pod pojmem "není moc spolehlivé"?
Já mám takovou zkušenost, že mi pokaždé funguje stejně. Pokaždé je potřeba si dávat pozor, na co překladač v danou chvíli myslí. Tedy pokud čeká práci s RAM, je potřeba používat variantu příkazu, která navede překladač do progmem. například memcpy vs. memcpy_P

Dne 24.3.2021 v 20:02 Šerých Jakub napsal(a):
> PROGMEM není moc spolehlivé a většinou se musí obsah před použitím zkopírovat do RAMky pomocí něčeho jako:
> memcpy_P(BuffRam, &ConstProgmem, NumberOfBytes);
> 
> Jakub Šerých
> 
> -----Original Message-----
> From: Hw-list <hw-list-bounces na list.hw.cz> On Behalf Of Petr Zapadlo
> Sent: Wednesday, March 24, 2021 7:42 PM
> To: HW-news <hw-list na list.hw.cz>
> Subject: ATmega328 a PROGMEM
> 
> Zdravím,
> 
> hraji si tady generátorem sinu v atmega328 a narazil jsem na to, že  že mi nefunguje direktiva PROGMEM.
> 
> Definuji si pole s předpočítanými hodnotami sinu:
> 
> const  PROGMEM uint8_t sin_table[]  ={0,8,16,24,32..... };
> 
> a následně ho v přerušení používám:
> 
>     OCR1A=sin_table[count];
> 
> Pokud je definice pole s direktivou progmem, tak je něco špatně - průběh má několik zubů - rozhodně se to ani neblíží sinu - připadá mi, jako by to četl odněkud nesmyslně. Jestliže progmem odstraním, tak to funguje přesně jak má a vykresluje sinus, tj kod bude OK. Podle příkladů co jsem na netu nalezl se to používá právě takto. V info při kompilaci vidím, jak se alokace přesouvá mezi flash a ram podle toho jestli progmem je nebo není, ale to čtení z flash nějak nefunguje.
> 
> Co činím špatně?
> 
> Petr
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz 
> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz 
> http://list.hw.cz/mailman/listinfo/hw-list
> 
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list