Arduino IDE a STM32F1xx - problém s voláním uživ. funkcí

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Barbucha54
Příspěvky: 29
Registrován: 27 úno 2014, 00:00

Arduino IDE a STM32F1xx - problém s voláním uživ. funkcí

#1 Příspěvek od Barbucha54 »

Zdravím vespolek. Narazil jsem na problém v programování STM32F103 pod Arduino IDE. Nadefinovaná funkce není kompilátorm akceptovaná a není zařazena do programu. Tj. pokud nadefinuji funkci, tak jak je to obv v Arduino IDE, kterou pak následně volám z těla programu, vůbec se neprovede. Sice jsme nezkoumal výsledný zdrojový kód, ale soudě podle velikosti vygenerovaného kódu se funkce vůbec nepřeloží. Když pak obsah té samé funkce vložím přímo do těla prograni, instrukce se provedou. Netušíte někdo čím to může být? děkuji za názor.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#2 Příspěvek od asdf »

Asi bude nejlepší, když sem dáš ten program.
Uživatelský avatar
bdn
Příspěvky: 560
Registrován: 16 led 2020, 00:00

#3 Příspěvek od bdn »

Tak dej do funkce print("moje funkce"); a hned uvidíš na terminálu, zda se volá nebo né.
Zkoumat podle velikosti kódu, zda se funkce volá nebo nevolá, to já nechápu jak to děláš?
Uživatelský avatar
Barbucha54
Příspěvky: 29
Registrován: 27 úno 2014, 00:00

#4 Příspěvek od Barbucha54 »

bdn píše:Tak dej do funkce print("moje funkce");
No právě, i když se tam dá výpis prostřednictřvím Serial.print, tak nic nevypíš. Tudíž evidentně se funkce neprovádí a tudíž se asi ani nepřeložila. Posouzení velikosti kódu mám na mysli tak, že nechám zkomlilovat program s fukcí a bez funkce a velikosti jsou cca stejné.
Uživatelský avatar
asdf
Příspěvky: 707
Registrován: 06 říj 2022, 00:00
Kontaktovat uživatele:

#5 Příspěvek od asdf »

Tak typicky se tohle stává, když tu funkci zapomeneš zavolat. Nebo když to zapomeneš znova přeložit. Ale co víc asi tak poradit, když se nemůžeme na ten kód podívat? Nechceš ho sem dát?
Uživatelský avatar
Zaky
Příspěvky: 7050
Registrován: 30 říj 2010, 00:00
Bydliště: Praha

#6 Příspěvek od Zaky »

To v dnešní době opravdu někdo dobrovolně pracuje v prostředí, v němž nelze provádět debug? Tedy krokovat program, zastavovat na breakpointech a tak? Proč???
Krátce před tím, než se to rozbilo, tak to ještě fungovalo...
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#7 Příspěvek od Mahoney »

Zaky, co to je za povzdechy? Každej ať si pracuje v čem chce a jak potřebuje... Já třeba používám debug LED a textový editor, nehledě na to že ne každý čip vždy podporuje HW debug - ale hlavně jde o to, že nemůžeš druhým brát svobodu, co je dobré pro tebe, nemusí vždy být dobré pro druhého...
Uživatelský avatar
ondraN
Příspěvky: 944
Registrován: 16 srp 2022, 00:00
Bydliště: Roztoky

#8 Příspěvek od ondraN »

Taky je možné, že se ta funkce volá ve větvi, která se nikdy nemůže provést z logických důvodů a překladač to v rámci optimalizace vyhodí. Jak už ale napsali předchůdci, bez toho kódu ti nikdo moc víc než obecné rady nedá.

P.S. Typicky vznikají chyby v tom, že třeba v podmínce if se zapomene při porovnání druhé =
např. if(x=0) namísto if(x==0)
Oba příkazy jsou přitom syntakticky správné ale logicky úplně jiné. A ten první se nikdy nevykoná, tak překladač odstraní kód pro splnění podmínky(dosadí se do x nula a výsledek je vždy false). Druhý se vykoná když je x nulové.
Uživatelský avatar
mtajovsky
Příspěvky: 3728
Registrován: 19 zář 2007, 00:00
Bydliště: Praha

#9 Příspěvek od mtajovsky »

Tak ať si každý zvolí prostředí jaké mu vyhovuje, ale zrovna STčka HW debug podporují a debugger ST Link stojí pár šupů. A pokud se k tomu přidá dnes již vyspělé CUBE a TrueStudio nebo rovnou CUBE IDE nemá to chybu. A pak se jeden nemusí peklovat s prostředím, které mu nedá odpověď, proč to nefunguje.
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#10 Příspěvek od Mahoney »

Barbucha54 píše:Nadefinovaná funkce není kompilátorm akceptovaná a není zařazena do programu.
Snížit/vypnout úroveň optimalizace kompilátoru.

Arduino IDE 1.6.x:
https://forum.arduino.cc/t/optimization ... 6-5/331335

Arduino IDE 2.0
https://forum.arduino.cc/t/arduino-ide- ... ion/920747
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“