Forum: Mikrocontroller und Digitale Elektronik Arduino IDE überholt sich selbst


von Klaus S. (kseege)


Lesenswert?

Wollte für mein Bluepill-Board ein neues Projekt anfangen, aber die 
Arduino-IDE behauptete steif und fest, sie könne den (passenden) 
Com-Port nicht öffnen. Da es vor 2 Jahren noch funktioniert hatte, habe 
ich einen Backup eingespielt und mit Win10 Version 1909 klappte alles 
wie am Schnürchen. Aber schon nach der automatisch ablaufenden 
Vorbereitung für das Funktionsupdate 21H2 war wieder Ende der 
Vorstellung.

Mit etwas Umweg über Neucompilierung des Programms stm32flash.exe kam 
dann eine viel einfachere Lösung zustande: In die Batchdatei 
serial_upload.bat habe ich eine kleine Verzögerung eingebaut (ping 
localhost -n 2) und schwupps, alles lief wieder. Der serial sniffer 
zeigte es dann eindeutig: Die Arduino IDE macht irgendwo den Port kurz 
zum Testen der Anwesenheit auf und stm32flash.exe wird aufgerufen, bevor 
der Port wieder zu ist. Klarer Fall von Selbstüberlistung.

Für alle Arduinohasser ein Grund mehr, Arduino zu vermeiden. Für mich 
ein Grund, es zu benutzen. Ich mag es, wenn meine Tools so einfach 
gestrickt sind, daß ich sie selbst reparieren kann.

Gruß Klaus (der soundsovielte)

von Schlaumaier (Gast)


Lesenswert?

Klaus S. schrieb:
> Die Arduino IDE macht irgendwo den Port kurz
> zum Testen der Anwesenheit auf und stm32flash.exe wird aufgerufen, bevor
> der Port wieder zu ist. Klarer Fall von Selbstüberlistung.

Das klingt aber eher nach einen System-Timing-Problem. Was auch deine 
Aussage mit den Win-Update erklären würde.

Einfach gesagt, windows kommt wieder mal mit den Ports/Schnittstellen 
nicht zeitgemäß zurecht.

Das Problem ist so alt wie Windows selbst. Hatte ich schon mit 
X-Geräten.

Besonders beliebt USB-Teile, besonders Handys. Datenzugriff via USB und 
du brauchst Glück das das Timing stimmt und das Handy als Laufwerk(e) 
auftaucht.

Und bei deinen Teil da hängt ein USB-Serial-Wandler (klingt verrückt ist 
aber wahr) dazwischen. Das mag Windows eh nicht sonderlich.

von Oliver S. (oliverso)


Lesenswert?

Klaus S. schrieb:
> Ich mag es, wenn meine Tools so einfach
> gestrickt sind, daß ich sie selbst reparieren kann.

Klingt sehr nach Indiens Autolegende Ambassador.

Vorteil: Kann jeder Schmied im nächsten Dorf reparieren.
Nachteil: Muß jeder Schmied im nächsten Dorf reparieren.

Aber jeder, wie er will.

Oliver

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Klaus S. schrieb:
> Ich mag es, wenn meine Tools so einfach
> gestrickt sind, daß ich sie selbst reparieren kann.

Und dann benutzt du Windows? Wenn du kein Arduino nutzt, wie reparierst 
du die (meistens proprietäre) Debugger- oder Bootloader-Software?

von Klaus S. (kseege)


Lesenswert?

Niklas G. schrieb:
> Und dann benutzt du Windows? Wenn du kein Arduino nutzt, wie reparierst
> du die (meistens proprietäre) Debugger- oder Bootloader-Software?

Die Frage verstehe ich nicht. Ich nutze auch AVR mit Arduino. Dessen 
Bootloader ist OpenSource: Optiboot. Zur Not hat er dann noch die 
Hardwareschnittstelle ISP und Ponyprog mit einem 245er am LPT-Port.

Der Bootloader der Bluepill hat AN2606 und AN3155, die von 
stm32flash.exe benutzt werden. Das ist auch Open Source, ich habs zur 
eigenen Überraschung ruck-zuck fehlerfrei compiliert bekommen.

Ich habe während der Fehlersuche etwa 50 Threads gelesen, die ähnliche 
Probleme beschrieben, aber nicht eine einzige Lösung angeboten bekommen, 
sondern nur Vermutungen, die ich auch selber anstellen kann. Daher 
dachte ich, es wäre doch nett, wenn es auch einmal eine Lösung mit 
passender Begründung gibt. Und meine Vermutung kann ich auch noch 
hinterherschieben: Da hat sich irgendein Programmierer bei Arduino einen 
schlanken Fuß gemacht und sich gedacht, daß Windows das Schließen der 
Schnittstelle auch von selber macht, wenn er sein Programm beendet. Dass 
er damit den Effekt von Blocking-I/O versaut und genau solche 
race-conditions erzeugt, das hat er in dem Moment wohl nicht bedacht. 
Aber das ist vorerst nur Vermutung! Spekulation!

Gruß Klaus (der soundsovielte)

von Schlaumaier (Gast)


Lesenswert?

Klaus S. schrieb:
> Da hat sich irgendein Programmierer bei Arduino einen
> schlanken Fuß gemacht und sich gedacht, daß Windows das Schließen der
> Schnittstelle auch von selber macht, wenn er sein Programm beendet. Dass
> er damit den Effekt von Blocking-I/O versaut und genau solche
> race-conditions erzeugt, das hat er in dem Moment wohl nicht bedacht.

An Plan mäßig glaube ich nicht.  Ehen an ein vergessenen "Close 
Com-port".

Ist selbst mir bei einer SQL-Datenbank-Programmierung sehr oft passiert. 
Das merkt man erst wenn eine andere Sub eine "unerlaubte" Operation 
durchführen will.

von Veit D. (devil-elec)


Lesenswert?

Klaus S. schrieb:
> Da hat sich irgendein Programmierer bei Arduino einen
> schlanken Fuß gemacht und sich gedacht, daß Windows das Schließen der
> Schnittstelle auch von selber macht, wenn er sein Programm beendet. Dass
> er damit den Effekt von Blocking-I/O versaut und genau solche
> race-conditions erzeugt, das hat er in dem Moment wohl nicht bedacht.
> Aber das ist vorerst nur Vermutung! Spekulation!

Hallo,

zur Richtigstellung.

Das kann nur Spekulation sein, weil Arduino.cc mit Bluepill gar nichts 
zu tun hat. Die Leute vom "Bluepill" nutzen nur die Arduino IDE, stellen 
ein Core Package dafür zur Verfügung, damit man das Board zusammen mit 
der Arduino IDE einfacher zum laufen bekommt. Eine serial_upload.bat 
gibt es nämlich von Arduino.cc nicht, die muss mit dem Core Package 
mitgekommen sein. Wird vermutlich auf Github liegen, also schreibe einen 
netten Hinweis an den Core Package Entwickler.

von DerEinzigeBernd (Gast)


Lesenswert?

Schlaumaier schrieb:
> Einfach gesagt, windows kommt wieder mal mit den Ports/Schnittstellen
> nicht zeitgemäß zurecht.

Nee, die Arduino-Leute sind zu blöd, die Schnittstelle richtig zu 
programmieren. Kein Wunder, bei dem ganzen Schichtkuchen an zig 
Java-Abstraktionslayern, die die "IDE" und das ganze Geraffel drumherum 
so gigantisch aufbläht und gleichzeitig lahm macht.

von Schlaumaier (Gast)


Lesenswert?

DerEinzigeBernd schrieb:
> Kein Wunder, bei dem ganzen Schichtkuchen an zig
> Java-Abstraktionslayern, die die "IDE" und das ganze Geraffel drumherum
> so gigantisch aufbläht und gleichzeitig lahm macht.

Bei der ganzen Geschichte stellt sich mir EINE Frage.

Über welche IDE reden wir eigentlich und unter welchen OS.

IDE 1.* = Soll problemlos unter ab Win-7 laufen
IDE 2.* = Soll unter Win-10 o. höher laufen ist aber noch ziemlich 
"Frisch".

Ps. : Ich habe die IDE-2.* unter mein Win-7-64 problemlos ans laufen 
bekommen. Aber ich hätte mich auch nicht beschwert, wenn es nicht 
geklappt hätte.

von Klaus S. (kseege)


Lesenswert?

Veit D. schrieb:
> Das kann nur Spekulation sein, weil Arduino.cc mit Bluepill gar nichts
> zu tun hat. Die Leute vom "Bluepill" nutzen nur die Arduino IDE, stellen
> ein Core Package dafür zur Verfügung, damit man das Board zusammen mit
> der Arduino IDE einfacher zum laufen bekommt. Eine serial_upload.bat
> gibt es nämlich von Arduino.cc nicht, die muss mit dem Core Package
> mitgekommen sein. Wird vermutlich auf Github liegen, also schreibe einen
> netten Hinweis an den Core Package Entwickler.

Das hört sich einleuchtend und vernunftig an. Macht zwar nicht soviel 
Vergnügen wie wilde Spekulation, erhöht aber wohl deutlich den 
Wahrheitsgehalt. Deshalb 12 Punkte dafür!

Leider hat der gute Dan Drown, von dem das Package stammt, zwar einen 
Blog mit funktionierender Webadresse, aber keine Möglichkeit vorgesehen, 
ihm eine Nachricht zuzusenden. Ich gehe daher davon aus, dass er auch 
lieber nichts hören möchte und nehme Rücksicht auf seine Entscheidung,

Für Leser, die es noch etwas genauer wissen wollen: Es handelte sich um 
ein altes Thinkpad X200 mit SSD und 4GByte RAM, was ich wegen der 1000g 
Gewicht als Reiselaptop über alles schätze. Da 4GByte schon der 
Vollausbau ist, hat es Win10pro in der 32-bit-Version und Arduino hat 
die Version 1.8.15.

Ich denke aber, dass die wichtigste Erkenntnis ist, dass die Blockade 
des Com-Ports von der eigenen Anwendung kommen kann. In den Postings, 
die ich gelesen habe, war immer von Blockade durch andere Teilnehmer die 
Rede, nie aber von der eigenen Anwendung. Ich bin selber erst darauf 
gekommen, als ich in Ruhe die Übergabeparameter für stm32flash.exe 
anschauen wollte und die Ausgabe der argv[]-Tabelle direkt nach dem 
Start mit Sleep(2000) verziert habe. Zack, es lief! Das Naheliegendste 
sieht man nicht unbedingt als Erstes.

Gruß Klaus (der soundsovielte)

von Markus (Gast)


Lesenswert?

STM32Duino nutzt, wenn ich es recht weiß, den orginal Bootloader von STM 
der den STLINK V2 ansteuern kann.
Je nachdem, was man machen will, reicht das Framework auch für ein 
BluePill Board:
https://github.com/stm32duino/Arduino_Core_STM32

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.