Založen: May 22, 2013 Příspěvky: 325 Bydliště: Psáry JN79GW
Zaslal: út březen 29 2016, 20:15 Předmět: Kontrola zásobníku v Atmel Studiu
Dělám jednu aplikaci v Atmel Studiu 6 a mám podeření, že jsem neuhlídal zásobník a ten mě převálcoval část datové oblasti. V projektech, které jsem dosud dělal jsem velikostí RAM neměl problémy, tak jsem to zatím nemusel řešit. Je nějaká metoda, jak omezit velikost zásobníku, nebo alespoň monitorovat maximální hodnotu zásobníku?
Díky Jirka _________________ Jirka
Většinou stačí když globální proměnné nezabírají víc než cca 70% RAM a nepoužívat (velká) lokální pole.
Monitorovat zásobník jde např. tak, že oblast RAM, která nás zajímá, vyplníme nějakou hodnotou, třeba 'A' a pak můžeme sledovat rozsah stacku při běhu programu, např. v simulátoru nebo výpisem RAM na terminál.
Založen: May 22, 2013 Příspěvky: 325 Bydliště: Psáry JN79GW
Zaslal: st březen 30 2016, 16:42 Předmět:
AB1 napsal(a):
Většinou stačí když globální proměnné nezabírají víc než cca 70% RAM a nepoužívat (velká) lokální pole.
Tak tohle bohužel není můj případ. Mě proměnné zabírají cca 85% RAM a mám tam i velké komunikační buffery. Na nějaké optimalizaci ještě zapracuji, zatím je SW v dost syrovém stavu, nicméně kontrola by nebyla od věci.
FHonza napsal(a):
Vyzkoušel sem nástroj s ATTiny2313 a funguje. Není to všemocné, ale pro první nástřel docela dobrý.
Honzo mnohokrát děkuji. Já jsem nabyl dojmu, že je to pro procesory od AVR nahoru. Tím každopádně začnu. _________________ Jirka
Založen: Jan 12, 2009 Příspěvky: 7105 Bydliště: Plzeňsko
Zaslal: st březen 30 2016, 16:47 Předmět:
ATtiny je AVR. _________________ Sháním hasičák s CO2 "sněhový", raději funkční.
(Nemusí mít platnou revizi.)
(Celkově budu raději, když se to obejde bez papírů.)
Založen: May 22, 2013 Příspěvky: 325 Bydliště: Psáry JN79GW
Zaslal: čt březen 31 2016, 19:53 Předmět:
Tak děkuji všem za rady.
Nakonec se prokázalo že zásobník nepřetéká. Problém způsobuje pole konstatnt, které jsou uložené v RAM a které se z mě neznámého důvodu přepíšou. Já nyní začnu zkoumat všechna místa v programu, kde používám nepřímé adresování. Napadlo mě ale jestli to nemůže způsobovat optimalizace v překladači.
pole mám deklarované následovně:
volatile char pole1[50] = {k0,k1 .. K49};
Ten Stack Checker se mě nepovedlo rozpohybovat. Povedlo se mě vložit kód, přeložit, nahrát do MCU ale když jsem to spustil, tak hned na 1. programové instrukci mě to hlásilo 100% paměti pro zásobník 1024/1024. A ať jsem to stopnul v jakémkoli bodě, nikdy jsem neviděl jinou hodnotu.
Nicméně to vypadá jako dobrý pomocník, tak to zkusím ještě v jném projektu. _________________ Jirka
Založen: May 22, 2013 Příspěvky: 325 Bydliště: Psáry JN79GW
Zaslal: pá duben 01 2016, 18:55 Předmět:
Děkuji za připomínky matjovsky i AB1. Důvod je jednoduchý. Nevím, jak nadeklarovat pole konstatnt do Flash a následně, jak se na toto pole odkazovat v programu. V materiálech, které jsem přečetl jsem to buď nenašel nebo to nefungovalo.
Nicméně mám pocit, že způsob deklarace problém nevyřeší. Zdá se, že se mě část paměti dat nekontrolovaně přepisuje. Když na tomto místě nebudou konstanty ale jiná data, dojde s největší pravděpodobností rovněž k přepisu a bude zlobit jiná část programu.
Pokud je to jednoduché, napište mě sem deklaraci konstanty do Flash a referenci na ni v programu. Případně odkaz na něco, kde se to dočtu.
Teď při psaní odpovědi jsem si uvedomil, že vlastně již deklaraci jednoduchých konstant používám. Pomocí direktivy #define deklaruji jednoduché konstanty, nezkoušel jsem to zobecnit pro pole konstant.
Díky za odpověď. _________________ Jirka
Funkce pgm_read_byte() má jako parametr adresu do programové paměti. takže screen_len je adresa prvního prvku pole, status je index do pole.
Příklad pro řetězcové konstanty pro zobrazení obsahu LCD displeje pro různé stavy programu. Vše řešeno přes pointery vypočítané při kompilaci a umístěné do programové paměti:
Založen: May 22, 2013 Příspěvky: 325 Bydliště: Psáry JN79GW
Zaslal: pá duben 01 2016, 21:48 Předmět:
Mnohokrát děkuji mtajovsky. Takhe bezpracně naservírováno jsem již dlouho nic nedostal. Zítra to vyzkouším v Atmel Studiu.
Děkuji. _________________ Jirka
Psal jsem kdysi nějaké výukové texty, tak kousek přikládám.
Jsou to jenom jednoduché operace, pokud možno bez hvězdiček, s kterými mají začátečníci problémy.
Založen: May 22, 2013 Příspěvky: 325 Bydliště: Psáry JN79GW
Zaslal: ne duben 03 2016, 21:27 Předmět:
Děkuji všem za rady. Deklarace konstant v paměti Flash funguje i v Atmel Studiu. Můj problém to ale bohužel nevyřešilo. Stále si mě neznámým způsobem přepisuji data v ram. _________________ Jirka
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.