I2C - Arduino STM32 Nucleo L476RG

Jan Waclawek konfera na efton.sk
Středa Prosinec 12 07:07:57 CET 2018


>to fakt netusim, ale mohu to zitra zkusit. 

Super. Doporucujem zacat s preskumanim mapfile - prosim, postnite ho tu.

Mozno na reprodukciu problemu budeme musiet vyziadat zdrojak od pana kolegu
Jirku MWW, ale mozno na uvod bude stacit nieco jednoduche len s tou
premennou s atributom umiestnujucim ho do .noinit. Mozno treba aj dat
nejake premenne do .data a do .bss aby sa ten efekt prejavil; a mozno ten
efekt suvisi s nejakou konkretnou arduino kniznicou (alebo cube/hal
kniznicou).

Ten .noinit v linker skripte - ak je to tento
https://github.com/stm32duino/Arduino_Core_STM32/blob/master/variants/NUCLEO_L476RG/ldscript.ld
- nie je. Ak nie je ta section priradena nejakym inym sposobom - priamo
niektorym prikazom v command line napr --section-start, pouzitim ineho
alebo doplnkoveho linker scriptu (*) - tak je ta section pokladana za
orphan, . V tom pripade nastupuje "cierna magia", t.j. nie prilis
zdokumentovane pravidla, ktorymi ld odhadne, akeho charakteru ta section
je, a umiestni ju podla toho do prislusnej output section/memory area.
Znova, "cierna magia" je ovplyvnena aj command line, napr. - dost
rukolapne - --orphan-handling. No a na command line samozrejme vplyvaju
specs, ktore tiez netusim ze ako su nastavene pre prekladac, ktory sa s
tym stm32duinom pouziva. 

Skusmo, bez celeho toho arudina/stm32duina ktore si nemienim instalovat, s
nejaky relativne starsim gcc-based prekladacom z launchpadu (t.j. binarnym
balikom vyrobenym ARMom) mi tu .noinit section umiestnilo medzi .data a
.bss a to tak, ze symboly konca .data a zaciatku .bss, ktore pouziva bezny
startup code, boli pred a za tym .noinit, t.j. startup code by sa toho
.noinit u mna nedotkol. Inaksie povedane, mne by tam ten problem nenastal.

Dalej, mozno nieco necakane robia aj init kody jednotlivych arduino
kniznic, ako aj mozno nieco na uvod pribali samotne arduino. Do toho ja
vobec nevidim a ani nechcem vidiet.

Mimochodom, uvedene symptomy by sa asi mohli prejavit aj vtedy, ak umiestni
linker tu .noinit section do FLASH - napriklad na adresu 0x00000000.

(*) Toto je jeden z tych problemov s arduinom - princip "nejako som to
zbastlil a mne to to funguje" - a nie je to prilis transparentne ani
zdokumentovane. Konkretne, netusim, ako su volane komponenty prekladaca, s
akymi prepinacmi; ba dokonca ani netusim, ako presne je z .ino generovany
c, a netusim napriklad ani to, ci a za akych okolnosti sa ten .map
generuje a ak ano, neviem kde je (t.j. neviem si ho od pana kolegu Jirku
MWW vypytat, inak by to bola prva a najsamozrejmejsia vec co by som
urobil; druha by bolo vygenerovat anotovany .disasm). Takze kym sa clovek
drzi nejakeho blizsie nefinovaneho "vyslapaneho chodnicka", vsetko je OK a
zivot je krasny; akonahle sa odkloni co i len na krok, tak mozu nastat
problemy - co by samo osebe ani tak velmi nevadilo, ale v pripade tych
problemov bohuzial ten netransparentny zlepenec ztazuje bezne postupy
ktorymi sa taketo problemy riesia.

Ale to iste plati aj pre cube a podobne "kniznice".


>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? 

Presne k tomu sa Vas snazim dotlacit... ;-)

wek





>> 11. 12. 2018 v 10:48, Jan Waclawek <konfera at efton.sk>:
>> 
>> No dobre, a mozete prosim vysvetlit ten jav co pozoruje pan kolega Jirka
>> Mww?
>> 
>> Preco sa nezachova obsah premennej savedTime pri resete?
>> 
>> wek
>> 
>> 
>> ----- Original Message ---------------
>>> 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. 
>>> 
>>> T
>>> 
>>> 10. 12. 2018 v 19:53, Jaroslav Buchta <jaroslav.buchta at hascomp.cz>:
>>> 
>>>> 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)
>>>> 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.
>>>> 
>>>> 
>>>> Dne 10.12.2018 v 19:22 Jirka Mww napsal(a):
>>>>> Vypadek napajeni urcite nenastal, staci stisknout tlacitko reset na desce a data se prepisou.
>>>>> Je to ale asi opravdu arduinem, hodnota je porad stejna . Prestoze je promenna definovana
>>>>> jako word tak hodnota vypsana po resetu je asi 10x vyssi. Alespon predpokladam, ze word je
>>>>> porad jeste 16bitu bez znamenka.
>>>>> Dnes uz se k tomu nedostanu, zitra budu pokracovat. Podstatne je ale, ze po odstraneni
>>>>> propojek ST linku to uz neresetuje, tak mi to zatim staci.
>>>>> 
>>>>> po 10. 12. 2018 v 18:33 odesílatel Miroslav Mraz <mrazik at volny.cz> napsal:
>>>>>> No jo, po připojení napájení jsou v RAM náhodná data. Je to trochu 
>>>>>> složitější, musíte identifikovat zdroj přerušení - asi i v této řadě 
>>>>>> bude něco jako RCC_CSR registr, ve kterém jsou flagy zdroje přerušení. 
>>>>>> Na začátku musíte identifikovat připojení napájení - něco jako BOR a 
>>>>>> pokud je nastaven, příslušnou proměnnou nastavit na potřebnou hodnotu 
>>>>>> (asi vynulovat). Pokud je zdroj přerušení jiný, neděláte nic. Tedy nic - 
>>>>>> patrně bude nutné flagy vždy nulovat. Bývá na to speciální bit RMVF. 
>>>>>> Není to žádná magie.
>>>>>> 
>>>>>> Mrazík
>>>>>> 
>>>>>> Dne 10. 12. 18 v 18:14 Jirka Mww napsal(a):
>>>>>>> Zkusil jsem to  SW řešení
>>>>>>> unsigned long   savedTime __attribute__ ((section (".noinit")));
>>>>>>> , proměnná se sice neinicializuje na nulu, , ale ani se nezachová obsah  
>>>>>>> před resetem, jsou tam nesmysly ,  takže budu pokračovat zítra.
>>>>>>> Zatím díky za pomoc, hodně jsem se dnes naučil.
>>>>>>> 
>>>>>>> Zdravi
>>>>>>> Jirka Sloupenský  OK1MWW



Další informace o konferenci Hw-list