<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Kde ti zakerni arduinisti udelali chybu ze jim to funguje? :-)<div class=""><br class=""></div><div class=""><div class="">#include "stm32l4xx_ll_rcc.h"</div><div class=""><br class=""></div><div class="">extern "C" {</div><div class="">  int test __attribute__ ((section (".noinit")));</div><div class="">}</div><div class=""><br class=""></div><div class="">void setup() {</div><div class="">  if (LL_RCC_IsActiveFlag_SFTRST() != RESET) {</div><div class="">    test = 0;</div><div class="">  }</div><div class="">  __HAL_RCC_CLEAR_RESET_FLAGS();</div><div class=""><br class=""></div><div class="">  Serial.begin(9600);</div><div class="">  Serial.print("RESET FIRE: ");</div><div class="">  Serial.println(test++);</div><div class="">}</div><div class=""><br class=""></div><div class="">void loop() {</div><div class="">}</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">vystup:</div><div class=""><div class="">RESET FIRE: 0</div><div class="">RESET FIRE: 1</div><div class="">RESET FIRE: 2</div><div class="">RESET FIRE: 3</div><div class="">RESET FIRE: 4</div><div class="">RESET FIRE: 5</div><div class="">RESET FIRE: 6</div><div class="">RESET FIRE: 7</div><div class="">RESET FIRE: 8</div><div class="">RESET FIRE: 9</div><div class="">RESET FIRE: 10</div><div class="">RESET FIRE: 11</div><div class="">RESET FIRE: 12</div></div><div class=""><br class=""></div><div class="">Napsano a kompilovano v Arduino IDE v1.8.7., pouzito <a href="https://github.com/stm32duino/Arduino_Core_STM32" class="">https://github.com/stm32duino/Arduino_Core_STM32</a> (Nucleo L476RG)</div><div class=""><br class=""></div><div class="">T</div><div class=""><br class=""></div><div><br class=""><blockquote type="cite" class=""><div class="">12. 12. 2018 v 7:07, Jan Waclawek <<a href="mailto:konfera@efton.sk" class="">konfera@efton.sk</a>>:</div><br class="Apple-interchange-newline"><div class=""><div class=""><blockquote type="cite" class="">to fakt netusim, ale mohu to zitra zkusit. <br class=""></blockquote><br class="">Super. Doporucujem zacat s preskumanim mapfile - prosim, postnite ho tu.<br class=""><br class="">Mozno na reprodukciu problemu budeme musiet vyziadat zdrojak od pana kolegu<br class="">Jirku MWW, ale mozno na uvod bude stacit nieco jednoduche len s tou<br class="">premennou s atributom umiestnujucim ho do .noinit. Mozno treba aj dat<br class="">nejake premenne do .data a do .bss aby sa ten efekt prejavil; a mozno ten<br class="">efekt suvisi s nejakou konkretnou arduino kniznicou (alebo cube/hal<br class="">kniznicou).<br class=""><br class="">Ten .noinit v linker skripte - ak je to tento<br class=""><a href="https://github.com/stm32duino/Arduino_Core_STM32/blob/master/variants/NUCLEO_L476RG/ldscript.ld" class="">https://github.com/stm32duino/Arduino_Core_STM32/blob/master/variants/NUCLEO_L476RG/ldscript.ld</a><br class="">- nie je. Ak nie je ta section priradena nejakym inym sposobom - priamo<br class="">niektorym prikazom v command line napr --section-start, pouzitim ineho<br class="">alebo doplnkoveho linker scriptu (*) - tak je ta section pokladana za<br class="">orphan, . V tom pripade nastupuje "cierna magia", t.j. nie prilis<br class="">zdokumentovane pravidla, ktorymi ld odhadne, akeho charakteru ta section<br class="">je, a umiestni ju podla toho do prislusnej output section/memory area.<br class="">Znova, "cierna magia" je ovplyvnena aj command line, napr. - dost<br class="">rukolapne - --orphan-handling. No a na command line samozrejme vplyvaju<br class="">specs, ktore tiez netusim ze ako su nastavene pre prekladac, ktory sa s<br class="">tym stm32duinom pouziva. <br class=""><br class="">Skusmo, bez celeho toho arudina/stm32duina ktore si nemienim instalovat, s<br class="">nejaky relativne starsim gcc-based prekladacom z launchpadu (t.j. binarnym<br class="">balikom vyrobenym ARMom) mi tu .noinit section umiestnilo medzi .data a<br class="">.bss a to tak, ze symboly konca .data a zaciatku .bss, ktore pouziva bezny<br class="">startup code, boli pred a za tym .noinit, t.j. startup code by sa toho<br class="">.noinit u mna nedotkol. Inaksie povedane, mne by tam ten problem nenastal.<br class=""><br class="">Dalej, mozno nieco necakane robia aj init kody jednotlivych arduino<br class="">kniznic, ako aj mozno nieco na uvod pribali samotne arduino. Do toho ja<br class="">vobec nevidim a ani nechcem vidiet.<br class=""><br class="">Mimochodom, uvedene symptomy by sa asi mohli prejavit aj vtedy, ak umiestni<br class="">linker tu .noinit section do FLASH - napriklad na adresu 0x00000000.<br class=""><br class="">(*) Toto je jeden z tych problemov s arduinom - princip "nejako som to<br class="">zbastlil a mne to to funguje" - a nie je to prilis transparentne ani<br class="">zdokumentovane. Konkretne, netusim, ako su volane komponenty prekladaca, s<br class="">akymi prepinacmi; ba dokonca ani netusim, ako presne je z .ino generovany<br class="">c, a netusim napriklad ani to, ci a za akych okolnosti sa ten .map<br class="">generuje a ak ano, neviem kde je (t.j. neviem si ho od pana kolegu Jirku<br class="">MWW vypytat, inak by to bola prva a najsamozrejmejsia vec co by som<br class="">urobil; druha by bolo vygenerovat anotovany .disasm). Takze kym sa clovek<br class="">drzi nejakeho blizsie nefinovaneho "vyslapaneho chodnicka", vsetko je OK a<br class="">zivot je krasny; akonahle sa odkloni co i len na krok, tak mozu nastat<br class="">problemy - co by samo osebe ani tak velmi nevadilo, ale v pripade tych<br class="">problemov bohuzial ten netransparentny zlepenec ztazuje bezne postupy<br class="">ktorymi sa taketo problemy riesia.<br class=""><br class="">Ale to iste plati aj pre cube a podobne "kniznice".<br class=""><br class=""><br class=""><blockquote type="cite" class="">nemyslim to na nikoho konkretne, ale nebylo by lepsi snazit se radeji pomoci a poradit nez se povysovat jen proto, ze nejaky hobik s jinym hlavnim zajmem pouziva nejou formu arduina na nejakou trivialni ulohu jednou dvakrat za rok? <br class=""></blockquote><br class="">Presne k tomu sa Vas snazim dotlacit... ;-)<br class=""><br class="">wek<br class=""><br class=""><br class=""><br class=""><br class=""><br class=""><blockquote type="cite" class=""><blockquote type="cite" class="">11. 12. 2018 v 10:48, Jan Waclawek <konfera@efton.sk>:<br class=""><br class="">No dobre, a mozete prosim vysvetlit ten jav co pozoruje pan kolega Jirka<br class="">Mww?<br class=""><br class="">Preco sa nezachova obsah premennej savedTime pri resete?<br class=""><br class="">wek<br class=""><br class=""><br class="">----- Original Message ---------------<br class=""><blockquote type="cite" class="">Pokud pouziva stm32duino tak je to nadstavba nad HALem od ST. A kod je zcela otevreny. Startovaci kod je standartni od ST. Je tedy uplne jedno jestli pouzije arduino, hal nebo ll pokud nezna arm a stm32. Tyhle hrabeci rady vychazeji z cire neznalosti. <br class=""><br class="">T<br class=""><br class="">10. 12. 2018 v 19:53, Jaroslav Buchta <jaroslav.buchta@hascomp.cz>:<br class=""><br class=""><blockquote type="cite" class="">Nevim, jak to dela arduino ale standardni startovaci kod data v sekci BSS nuluje, heap zustava nepovsimnut ale tezko asi alokujete stejny blok... Hardwarove by snad reset nemel mit na obsah RAM vliv (az asi na oblasti ktere pouziva pevny bootloader)<br class="">Cistym resenim by IMHO bylo pouzit externi USB/VCP prevodnik na jiny UART a programovadlo nechat na programovani. A nejlip zahodit arduino a mit program pod kontrolou.<br class=""><br class=""><br class="">Dne 10.12.2018 v 19:22 Jirka Mww napsal(a):<br class=""><blockquote type="cite" class="">Vypadek napajeni urcite nenastal, staci stisknout tlacitko reset na desce a data se prepisou.<br class="">Je to ale asi opravdu arduinem, hodnota je porad stejna . Prestoze je promenna definovana<br class="">jako word tak hodnota vypsana po resetu je asi 10x vyssi. Alespon predpokladam, ze word je<br class="">porad jeste 16bitu bez znamenka.<br class="">Dnes uz se k tomu nedostanu, zitra budu pokracovat. Podstatne je ale, ze po odstraneni<br class="">propojek ST linku to uz neresetuje, tak mi to zatim staci.<br class=""><br class="">po 10. 12. 2018 v 18:33 odesílatel Miroslav Mraz <mrazik@volny.cz> napsal:<br class=""><blockquote type="cite" class="">No jo, po připojení napájení jsou v RAM náhodná data. Je to trochu <br class="">složitější, musíte identifikovat zdroj přerušení - asi i v této řadě <br class="">bude něco jako RCC_CSR registr, ve kterém jsou flagy zdroje přerušení. <br class="">Na začátku musíte identifikovat připojení napájení - něco jako BOR a <br class="">pokud je nastaven, příslušnou proměnnou nastavit na potřebnou hodnotu <br class="">(asi vynulovat). Pokud je zdroj přerušení jiný, neděláte nic. Tedy nic - <br class="">patrně bude nutné flagy vždy nulovat. Bývá na to speciální bit RMVF. <br class="">Není to žádná magie.<br class=""><br class="">Mrazík<br class=""><br class="">Dne 10. 12. 18 v 18:14 Jirka Mww napsal(a):<br class=""><blockquote type="cite" class="">Zkusil jsem to  SW řešení<br class="">unsigned long   savedTime __attribute__ ((section (".noinit")));<br class="">, proměnná se sice neinicializuje na nulu, , ale ani se nezachová obsah  <br class="">před resetem, jsou tam nesmysly ,  takže budu pokračovat zítra.<br class="">Zatím díky za pomoc, hodně jsem se dnes naučil.<br class=""><br class="">Zdravi<br class="">Jirka Sloupenský  OK1MWW<br class=""></blockquote></blockquote></blockquote></blockquote></blockquote></blockquote></blockquote><br class="">_______________________________________________<br class="">HW-list mailing list  -  sponsored by www.HW.cz<br class="">Hw-list@list.hw.cz<br class="">http://list.hw.cz/mailman/listinfo/hw-list<br class=""></div></div></blockquote></div><br class=""></div></body></html>