Früher konnte ich ein Hello-World für die Kommandozeile unter Debian
schreiben und mit mingw für Windows übersetzen. Das lief in einem
DOS-Fenster unter XP. Wie einfach geht das heute bzw. wie macht man das
heute?
Das Programm muss über einen FTDI USB-zu-RS422 Konverter und den
STM-UART-Bootloader einen STM32L451 flashen. Soweit ist es nicht
verhandelbar. Eine Virtuelle Maschine würde ich deshalb eher nicht
versuchen, vom Aufwand für den Windows-Benutzer mal abgesehen. Das
Programm verwendet ziemlich spezielle Header und portieren per mingw ist
wahrscheinlich schon deshalb aussichtslos?
Bauform B. schrieb:> und mit mingw für Windows übersetzen.
Geht immer noch. Aber Treiber werden unter Windows natürlich anders als
unter Linux angesprochen.
Bauform B. schrieb:> Wie einfach geht das heute bzw. wie macht man das> heute?
Heute hat Windows 10 ein Linux Subsystem. Man kann sich Ubuntu direkt
aus dem Microsoft Store intallieren. Da hat Dein Linux Programmer
ziemlich gute Chancen direkt zu funktionieren...
Jim M. schrieb:> Da hat Dein Linux Programmer ziemlich gute Chancen direkt zu funktionieren
Zumindest WSL 1 ist kein Linux, Linux Treiber kann man darin erstmal
nicht nutzen. WSL 2 hab ich noch nicht versucht, das soll wohl eine art
VM sein?
Jim M. schrieb:> Heute hat Windows 10 ein Linux Subsystem. Man kann sich Ubuntu direkt> aus dem Microsoft Store intallieren. Da hat Dein Linux Programmer> ziemlich gute Chancen direkt zu funktionieren...Bauform B. schrieb:> Das Programm muss über einen FTDI USB-zu-RS422 Konverter und den> STM-UART-Bootloader einen STM32L451 flashen. Soweit ist es nicht> verhandelbar.
Zitat aus der WLS2-FAQ:
1
In initial releases of WSL 2 hardware access support will be limited, e.g: you will be unable to access the GPU, serial or USB devices.
Einen Tipp zur Nutzung von USB-Serial Adapter findet man hier:
https://www.scivision.dev/usb-tty-windows-subsystem-for-linux/
(noch nicht selber probiert).
Die Möglichkeit WSL2 (jetzt schon) zu nutzen hängt an der Teilname am
Windows-Insider Programm. Hat das hier schon jemand probiert? Schon in
WSL1 läuft der gcc (für ARM) gefühlt deutlich schneller, in WSL2 sollen
die Dateizugriffe nochmal schneller werden. Hat hier jemand das schon
installiert?
VSCode hat übrigens eine Extension um sich mit WSL zu verbinden, damit
kann im VSCode auf das Linux Dateisystem zugegriffen werden. Andersrum
kann auch VSCode im WSL gestartet werden und man hat den Editor mit
Linux Shell.
Walter T. schrieb:> Aber Treiber werden unter Windows natürlich anders als> unter Linux angesprochen.
Und ganz besonders, wenn man jede Menge ioctl() verwendet hat. Es ist
sicher machbar, aber etwas aufwendiger als ich dachte.
Oliver S. schrieb:> Zitat aus der WLS2-FAQ: In initial releases of WSL 2 hardware access> support will be limited, e.g: you will be unable to access the GPU,> serial or USB devices.> nach "out of the box" klingt das jetzt nicht.
Nur gut, dass mir WSL sowieso eine Nummer zu groß wäre ;) Eigentlich
darf ich garnichts installieren, mein Programm sollte vom USB-Stick
laufen (was ja genau genommen auch nicht sein darf).
Den Benutzern wäre es am liebsten, wenn ein Kollege das Programm nach
Pascal/Delphi portiert, zwecks GUI und so. Meinetwegen, bis dahin tut es
auch so ein kleiner Linux-Rechner als Programmiergerät.
Also, vielen Dank für alle Tipps!
Bauform B. schrieb:> Wie einfach geht das heute bzw. wie macht man das heute?
Versuche es mal mit CygWin. Das ist so eine Art Kompatibilitätslayer
damit du Linux Quelltexte als echte Windows .exe compilieren kannst.
Um das Programm danach auf anderen Computern ausführen zu können,
brauchst du meistens nur die eigene .exe Datei und die cygwin1.dll.
-> https://www.cygwin.com/
Eine GUI kannst du mit einer Scriptsprache deiner Wahl drumherum bauen.
Python ist für so etwas gerade angesagt. Wenn eine Art GUI im Textmodus
Ok ist, schau Dir mal die manual Page von "dialog" an. Damit kannst du
in Shell-Scripten Dialoge basteln.
-> https://linux.die.net/man/1/dialog
Wenn es schlank sein soll, dann ist es wohl am besten, die GUI mit einer
Entwicklungsumgebung von Microsoft zu erstellen, auf Basis von
Bibliotheken die in Windows bereits enthalten sind.
Was spricht denn gegen die einfachste(n) Lösung(en)?
Entweder was zum Abstrahieren der Seriellen zu schreiben, was dann vom
Rest des Programms genutzt werden kann (so schwierig ist das unter
Windows auch nicht) oder was fertiges von ST
https://www.st.com/en/development-tools/flasher-stm32.html zu nehmen
(oder sich den Quelltext der ST-Lösung für ersteres ansehen).
Stefan ⛄ F. schrieb:> Versuche es mal mit CygWin. Das ist so eine Art Kompatibilitätslayer> damit du Linux Quelltexte als echte Windows .exe compilieren kannst.>> Um das Programm danach auf anderen Computern ausführen zu können,> brauchst du meistens nur die eigene .exe Datei und die cygwin1.dll.
Das wollte ich so machen, aber mit mingw-w64, angeblich braucht man dann
keine dll.
Arc N. schrieb:> Was spricht denn gegen die einfachste(n) Lösung(en)?> Entweder was zum Abstrahieren der Seriellen zu schreiben, was dann vom> Rest des Programms genutzt werden kann (so schwierig ist das unter> Windows auch nicht)
im Prinzip ist das garnicht schwierig, für XP hat es auch funktioniert,
aber mir fehlt die Geduld.
> oder was fertiges von STdas wäre natürlich mit Abstand das Beste, geht aber leider nicht.
Meine Hardware hat keine Taster oder Jumper, also muss das PC-Programm
ein Break mit definierter Länge senden um den Bootloader zu starten. Wer
kann denn ahnen, dass sowas mal mit Windows funktionieren muss ;)
Hi
https://sourceforge.net/projects/lpc21isp/ reicht nicht? Evtl anpassen
und gut. Compilieren mit mingw unter Linux für Windows. Du bekommst eine
EXE die einfach so läuft ohne was zu installieren.
Matthias
Bauform B. schrieb:> Das wollte ich so machen, aber mit mingw-w64, angeblich braucht man dann> keine dll.
Kann ich mir nicht vorstellen, denn Windows stellt doch gar nicht die
(BSD) API für ioctl Bereit, die das Programm (vermutlich) benötigt.
Bauform B. schrieb:> Nur gut, dass mir WSL sowieso eine Nummer zu groß wäre ;) Eigentlich> darf ich garnichts installieren, mein Programm sollte vom USB-Stick> laufen (was ja genau genommen auch nicht sein darf).
Linux-Programme laufen nicht unter Windows.
Der Quelltext könnte zwar mit minGW unter Windows kompiliert werden, die
serielle Kommunikation muß dafür aber an Windows angepasst werden.
Also entweder auf Windows portieren, komplett neu schreiben, oder einen
Linux-Rechner verwenden.
Oliver
Μαtthias W. schrieb:> https://sourceforge.net/projects/lpc21isp/
knapp daneben. Laut Werbetext ist das ein ISP-Tool, nur für LPCxxx und
nicht einmal für Cortex-M4 zu gebrauchen. Ich will aber STM32L4 über die
sowieso vorhandene RS-422 Schnittstelle flashen.
Stefan ⛄ F. schrieb:> Bauform B. schrieb:>> Das wollte ich so machen, aber mit mingw-w64, angeblich braucht man dann>> keine dll.>> Kann ich mir nicht vorstellen, denn Windows stellt doch gar nicht die> (BSD) API für ioctl Bereit, die das Programm (vermutlich) benötigt.
Nicht nur vermutlich, da ist Fleißarbeit angesagt...
"DLL oder nicht" hab' ich bei Wikipedia gelesen, allerdings im
mingw-Artikel. Ich hoffe, das stimmt auch fÜr mingw-w64
1
Windows programs written with Cygwin run on top of a copylefted
2
compatibility DLL that must be distributed with the program,
3
along with the program's source code. MinGW does not require
4
a compatibility layer, since MinGW-based programs are compiled
5
with direct calls to Windows APIs.
6
7
It is also possible to cross-compile Windows applications with
8
MinGW-GCC under POSIX systems. This means that developers do not
9
need a Windows installation with MSYS to compile software that will
Bauform B. schrieb:> Arc N. schrieb:>> Was spricht denn gegen die einfachste(n) Lösung(en)?>> Entweder was zum Abstrahieren der Seriellen zu schreiben, was dann vom>> Rest des Programms genutzt werden kann (so schwierig ist das unter>> Windows auch nicht)>> im Prinzip ist das garnicht schwierig, für XP hat es auch funktioniert,> aber mir fehlt die Geduld.>>> oder was fertiges von ST>> das wäre natürlich mit Abstand das Beste, geht aber leider nicht.> Meine Hardware hat keine Taster oder Jumper, also muss das PC-Programm> ein Break mit definierter Länge senden um den Bootloader zu starten. Wer> kann denn ahnen, dass sowas mal mit Windows funktionieren muss ;)
Bauform B. schrieb:> Μαtthias W. schrieb:>> https://sourceforge.net/projects/lpc21isp/>> knapp daneben. Laut Werbetext ist das ein ISP-Tool, nur für LPCxxx und> nicht einmal für Cortex-M4 zu gebrauchen. Ich will aber STM32L4 über die> sowieso vorhandene RS-422 Schnittstelle flashen.
Sorry. Falschen Link erwischt. Nimm
https://sourceforge.net/projects/stm32flash/. Ob RS232 oder RS422 sollte
da kein Thema sein wenn sich dein Adapter als COMxy meldet.
Dein genaues Device musst du evtl. noch in dev_table.c ergänzen.
Matthias
Sheeva P. schrieb:> Oliver S. schrieb:>> Linux-Programme laufen nicht unter Windows.>> Aber natürlich tun sie das.
Nicht wenn sie Linux-Systemaufrufe verwenden.
Stefan ⛄ F. schrieb:> FS schrieb:>> Nicht wenn sie Linux-Systemaufrufe verwenden.>> Und genau diese Lücke füllt CygWin soweit es geht. Deswegen hatte ich> das empfohlen.
Mein Programm nutzt ziemlich viel ioctl() und vor allem das
Linux-spezifische tcsendbreak(). Es ist möglich, dass CygWin die 1:1
emuliert. Wenn allerdings "nur" die POSIX-Eigenschaften eingebaut
wurden, nützt es nichts. Außerdem müssten die Benutzer CygWin
installieren, das möchte man vermeiden.
Arc N. schrieb:> SetCommBreak(handle);> Sleep(milliSeconds);> ClearCommBreak(handle);> Wann Sleep nicht genutzt werden sollte, siehe> https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-sleep> Ansonsten eine Schleife mit QueryPerformanceCounter basteln oder wenn> gröberes Timing reicht mit GetTickCount.
Das scheint mir die vernünftigste Lösung zu sein, aber es sieht nach
viel Fleißarbeit aus. Ich müsste zum Testen einen Windows-Rechner kaufen
und der letzte Versuch, auch nur ein Angebot zu bekommen, ist an zu
vielen Unbekannten gescheitert.
Einen Linux-Rechner zusammen zu schrauben und Debian zu installieren hat
auch einen Nachmittag gedauert, aber ich wusste vorher, dass es dann
funktioniert. Der einzige Nachteil von der Lösung: das Alix3 Board ist
nicht mehr lieferbar und für Raspberries und Freunde kenne ich keine
vernünftigen Gehäuse. Jetzt könntet ihr mir statt CygWin oder
SetCommBreak() eine Alix3-Alternative empfehlen ;)
Stefan ⛄ F. schrieb:> Bauform B. schrieb:>> Außerdem müssten die Benutzer CygWin>> installieren, das möchte man vermeiden.>> Meistens genügt es, die DLL mit zu liefern.
Da kennt man den echten CygWin Fan ;) Dankeschön, vielleicht beim
nächsten Versuch; jetzt läuft das erstmal auf einem "Programmiergerät"
mit Linux.
Um welches Program handelt es sich?
Stm32flash? https://sourceforge.net/projects/stm32flash/
Ich hatte das vor Jahren für Windows auf Linux zu einem exe compiliert
(GCC Cross Compiler) das klappte problemlos, ich musste an den Sourcen
nichts ändern. (Ich müsste aber auch wieder Googeln wie das das machen
muss. Die erzeugte Win-32 Version verwende ich heute noch auf Win7 und
Win10 (für 32Bit und 64Bit)