Forum: Mikrocontroller und Digitale Elektronik Update Funktion für eigenes Projekt


von Stefan M. (mannitb303)


Lesenswert?

Hallo an alle,

Ich bin dabei einen MIDI Controller zu bauen mit einem atmega2560. 
Software und Controller laufen nun möchte ich aber die Möglichkeit eines 
Softwareupdates integrieren. Am liebsten über einen USB Stick oder über 
MIDI Sysex. Meine Überlegung ist nun den bootloader so um zu 
programmieren, dass der MIDI Controller beim einschalten testet ob eine 
bestimmte Taste gedrückt ist und von einem USB Stick die neue Software 
flashed.
Wie spreche ich aber einen USB-Stick an und kann ich z.b. die LCD- 
library im bootloader benutzen?
Welche anderen einfachen (PC und MAC kompatibel)Möglichkeiten gibt es 
für eine Update über einen Rechner, ohne programmer.
 Es soll für andere User meines MIDI Controllers so einfach wie möglich 
sein die Software des MIDI Controllers zu aktualisieren.
Hoffe ihr wisst was ich meine.
Sorry für den vielen Text.

Danke für eure Hilfe und Tipps.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Der Bootloader sollte relativ klein sein und mit möglichst wenig 
komplexen Dingen auskommen können um ein Update durchführen zu können.

Man könnte dies machen:

In der Applikation ist das ganze mit Display und USB Bedienung 
enthalten. Wenn nun ein Update durchgeführt werden soll so wird die 
Applikation den USB Stick (oder andere Quelle) lesen und die Daten zu 
erst in einen externen Falsh (z.B. DataFlash über SPI) speichern. Das 
kann alles die Applikation erledigen.
Im zweiten Schritt führt der Prozessor einen Reset aus, dabei startet 
der Bootloader. Seine Aufgabe ist es im externen Flash nach zu schauen 
ob eine neue Firmware vorhanden ist, dann ausrechnen ob die Firmware 
gültig ist anhand einer Prüfsumme. Wenn ja, dann wird der Inhalt vom 
externen Flash in das interne Flash kopiert.
Während der Bootloader diese Aktion durchführt braucht es auch kein 
Display, da dies in der Regel ohnehin innerhalb weniger Sekunden 
erledigt ist.
Wenn der Bootloader fertig ist startet dieser die Applikation.
Sollte der Bootloader kein Update erkennen, so startet er direkt die 
Applikation, ohne Update.

Dann kann man die Sache noch etwas verfeinern, dass z.B. der Bootloader 
erst einmal vor dem Update die zu letzt gültige Firmware noch mal in das 
externe Flash sichert, so dass wenn der eigentliche Update fehl schlägt 
die zuvorige nochmals restauriert werden könnte.
Oder dass der Bootloader den Flash vom Prozessor bei jedem Start mit 
einer Prüfsumme kontrolliert, ob der überhaupt noch gültig ist und ggf. 
aus dem externen Flash den wieder restauriert.

Mit einem externen DataFlash hat man sehr viele Möglichkeiten. Auch 
könnte die Applikation da drin noch Parameter ablegen. (z.B. Bilder für 
das Display usw.)

: Bearbeitet durch User
von Johannes S. (Gast)


Lesenswert?

USB Host mit ATMega wird schwierig.

von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Ich würde dazu ein USB Laufwerrk nehmen da gibt es welche die dan über 
RS232 Protokoll und einfachen befehlen Dateien Lesen und schreiben 
können.
Das macht es einfacher.
Habe als beispiel schon bei Bestehenden Steuerungen dies RS232 zu USB 
Converter realisiert

von Cyblord -. (cyblord)


Lesenswert?

Patrick L. schrieb:
> Ich würde dazu ein USB Laufwerrk nehmen da gibt es welche die dan über
> RS232 Protokoll und einfachen befehlen Dateien Lesen und schreiben
> können.

Hast du mal einen Link dazu?
Außerdem hört sich das teuer an. Sowas kann sicher niemand kostendeckend 
in ein Seriengerät einbauen.

Die einfachste Lösung ist ein USB->UART Dongle und Update via Serielle 
Schnittstelle und einem PC Programm.
Wer seinen Kunden das nicht zumuten will, kann auch einfach ein eigenes 
einfaches Dongle machen, z.B. mit einem seriellen Flash drauf. Das gibt 
man dem Kunden als Update.
Dabei spart man sich den USB Kram dazwischen. Und so ein Dongle kann man 
trotzdem noch sehr günstig fertigen lassen.
Nachteil: Muss körperlich versendet werden.

: Bearbeitet durch User
von Patrick L. (Firma: S-C-I DATA GbR) (pali64)


Lesenswert?

Cyblord -. schrieb:
> Hast du mal einen Link dazu?

Ich muss morgen mal im Lager schauen wie die geheißen haben.
Das waren so kleine weiße Einbaudinger, die auch nicht besonders Teuer 
waren.
Ganz am Anfang als es noch keine MSP430 mit USB Host gab, hatten wir die 
Verbaut. Der Name fällt mir aber grad nicht ein. schaue aber morgen mal 
im Lager wie die Dinger hießen.
Heute verwende ich MSP430 mit Onboard USB Host.

von Stefan M. (mannitb303)


Lesenswert?

Hey danke für eure Tips und Ideen.

Markus M. Die Idee ist super, da ich eh eine SD-Karte zum Speichern 
verschiedener Konfigurationen nutze. Muss ich Mal testen. Kann man in 
den bootloader auch library's mit einbinden oder wird das dann zu gross? 
Im Moment nutze ich die spi und SD library zum lesen, schreiben und 
löschen von Dateien auf die SD-Karte.

Es soll für den User so einfach wie möglich sein.

Danke für eure Tipps

Grüsse Stefan

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan M. schrieb:
> Kann man in den bootloader auch library's mit einbinden oder wird das
> dann zu gross?

"Libraries" sind ja auch erstmal nur compilierter Code wie alles andere.

Du hast einen ATmega2560, der hat maximal 8 KiB für den 
Bootloaderbereich, da passt einiges rein.

In einem kommerziellen Projekt (auf einem ARM, aber das spielt hier 
keine große Rolle) haben wir es so gemacht, dass bei eingesetzter 
SD-Karte grundsätzlich das erstbeste .bin-File auf der Karte gesucht und 
analysiert worden ist. Dabei wurden ein paar Plausibilitätstests gemacht 
(passt die Datei überhaupt in den Flash, zeigen alle Interruptvektoren 
nach innerhalb des Images) und danach wurde eine CRC über die Datei und 
den gleich langen Flash-Bereich gemacht. War die CRC gleich, dann besaß 
der Flash bereits das aktuelle Image, und die eigentliche Firmware wurde 
gestartet. Wenn nicht, wurde das neue Image geflasht.

Über alles zusammen (gefundene Datei, Größe, CRC) wurde auf der Karte 
ein Logfile geschrieben.

von Thomas Z. (usbman)


Lesenswert?

Ich bau auch gerade sowas für für meinen Midi Code und habe mich 
entschlossen das mit SysEx Requests zu lösen. Dazu werte ich einen 64 
Byte SysExBuffer aus. Dieser besteht immer aus einer konst. Preaambel 
gefolgt von einer normalen Intel Hex Zeile. Damit habe ich gleichzeitig 
das 8Bit Problem im Griff was ja sonst eine Umcodierung erforderlich 
machen würde. Den Code speichere ich dann mit Offset einfach im internen 
Flash.

Bei mir ergibt das folgendes Layout (kein AVR sondern MCS51)
 - Firmware 0x0000-0x17FD
 - Update   0x1800-0x27FD
 - Flasher  0x3000-0x37FF
Die letzten beiden Bytes enthalten jeweils eine 16Bit CRC Prüfsume.
Das eigentliche Update wird dann beim Start aufgerufen wenn sich die CRC 
Werte unterscheiten (aber gültig sind).

Die entsprechenden CRCs und Hexfiles werden beim Postprocessing 
generiert.

Der Flasher ist ein eigenständiges C Programm was nach 0x3000 gelinkt 
wird. Der Nachteil dieser Lösung ist das man die Hälfte des Flashs für 
die die doppelte Firmware verliert. Das kann man umgehen wenn als 
Zwischenspeicher ein ext SPI Flash zum Einsatz kommt.

von jo (Gast)


Lesenswert?

Stefan M. schrieb:
> nun möchte ich aber die Möglichkeit eines
> Softwareupdates integrieren.

Der Arduino-Bootloader (eigentlich ein Monitor) kann über die serielle 
Schnittstelle / USB ein Update fahren.

Kuck Dir auch mal Optiboot an: https://github.com/Optiboot/optiboot

Ansonsten fällt mir noch RISM ein. Hatte ich vor zig Jahren mal in der 
Ausprägung RISM-51 eingesetzt. Kuck hier: 
http://www.sxlist.com/techref/8051/slide6.html
Lag mal auf ftp.intel.com : /pub/mcs51/tools
Findet sich vielleicht noch über http://archive.org

Was ähnliches hatte ich mal für ARM. Müsste ich mal suchen. Der Monitor 
muss die Kommandos "L" (load) und "R" (run) und IntelHEX verstehen. Ist 
also keine Raketenwissenschaft.

von Stefan M. (mannitb303)


Lesenswert?

Hey, danke für eure Tipps.
Werde wohl eher auf die SD-Karten Möglichkeit zurück greifen, da ich 
sowieso eine Karte benutze.
Da ich mich mit dem bootloader noch nicht auseinander gesetzt habe gehe 
ich davon aus das der umprogrammiert werden muss. Gibt es eine gute 
Erklärung oder den sourcecode  für den bootloader?

Schönen Sonntag

von Stefan F. (Gast)


Lesenswert?

Für mich wäre die Nutzung des Arduiono Bootloaders mit dem bei Arduino 
üblichen USB-UART Chip die naheliegendste Lösung

Dabei wir der AVR durch ein Handshake Signal vom USB-UART resetted. In 
der ersten Sekunde erwartet er den Empfang eines bestimmtes 
Startsignals. Kommt das nicht, dann beendet sich der Bootloader und 
startet das normale Programm.

Diesen Bootloader kann man ganz einfach mit der Arduino IDE 
installieren.

Ich fürchte dass du den seriellen Port bereits mit der MIDI 
Schnittstelle belegt hast. Das ist aber kein Problem, denn mit wenigen 
Bauteilen (z.B einer Diode) kann man sie ruhig doppelt belegen. Der 
Benutzer soll nur während des Updates dafür sorgen, dass die MIDI 
Schnittstelle inaktiv ist, oder besser das Kabel abstecken.

Für die Eingabe:
1
                   
2
                                 +------[===]----o 5V
3
                                 |
4
USB-UART >-----|<|---------------+---------------> AVR RxD Eingang
5
                                 |
6
                     ____________|_
7
MIDI IN >---[===]---|              |
8
                    | Optokoppler  |
9
MIDI IN >-----------|______________|
10
                                 |
11
                                 |
12
                                 +--------------- GND

Für die Ausgabe:
1
                        +-----------------> USB-UART
2
                        |
3
AVR TxD Ausgang >-------+------[===]------> MIDI OUT
4
              
5
5V ----------------------------[===]------> MIDI OUT

von Thomas Z. (usbman)


Lesenswert?

Stefan ⛄ F. schrieb:
> Dabei wir der AVR durch ein Handshake Signal vom USB-UART resetted. In
> der ersten Sekunde erwartet er den Empfang eines bestimmtes
> Startsignals.

ziemlich umständlich, da man nur fürs Update eine extra USB Verbindung + 
USB Uart braucht. Das widerspricht etwas der Forderung möglichst einfach 
für den User. Beim SysEx Transfer würde die vorhandene Midi 
Schnittstelle verwendet.
Nicht ohne Grund verwenden Mid Gerätehersteller oft SysEx für FW Updates

von Stefan F. (Gast)


Lesenswert?

Thomas Z. schrieb:
> ziemlich umständlich, da man nur fürs Update eine
> extra USB Verbindung + USB Uart braucht

Du kannst ja ein WLAN Modul mit Cloud Anbindung einbauen, wenn du dich 
damit wohler fühlst.

Wie oft willst du denn die Firmware aktualisieren? Ich persönlich würde 
mich mit einem extra Kabel wohler fühlen, oder noch besser wenn ein 
physischer Schalter umgestellt werden muss.

Weil:

Mein Fernseher hat eigenmächtig ein Update installiert obwohl die 
Funktion im Menü deaktiviert war. Seit dem muss ich nach jedem 
Einschalten umständlich die Audio-Ausgabe auf Bluetooth umstellen.

Ich hatte früher mal einen Drucker, der nach einem eigenmächtigen Update 
die Nutzung von umweltfreundlich aufbereiteten Tinten-Tanks verweigerte.

Also: Ich habe die Nase voll in ungewollten upgrades.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Du kannst ja ein WLAN Modul mit Cloud Anbindung einbauen, wenn du dich
> damit wohler fühlst.

Er hatte aber explizit die SD-Karten-Lösung als Optimum für sich bereits 
deklariert. Was soll dann diese Anmerkung?

Die SD-Karten-Lösung ist nicht wirklich schwierig. Natürlich nimmt man 
Chan's FatFS zum Lesen der Karte, das muss man halt in den Bootloader 
mit rein linken. Da Stefan (M.) die SD-Karte bereits nutzt, gehe ich 
davon aus, dass ihm das nicht fremd ist und dass er auch schon einen 
Lowlevel-Treiber zum Zugriff auf die Karte hat.

Ansonsten habe ich den groben Ablauf weiter oben schon skizziert, wie 
wir es in einer kommerziellen Lösung bei einem früheren Brötchengeber 
von mir implementiert haben. Das funktionierte am Ende recht zuverlässig 
dort.

von Stefan M. (mannitb303)


Lesenswert?

Danke für eure Tipps.

Stefan F.: Ich nutze einen atmega 90USB162 für die USB UART Anbindung. 
Auf den wird Hiduino geflashed und danach kommt der atmega2560. Die 
Nutzung des 90USB162 nutze ich das mein Midi controller nicht als 
Universal Audio Midi device am Rechner erkannt wird sondern als mein 
eigenes Gerät mit eigenem Namen.

Mein Problem bei der USB Update Möglichkeit ist das ich nicht ganz 
verstehe wie ich den Atmega 2560 welcher ja hinter dem at90USB162 hängt 
Flashen kann. Dazu brauche ich doch dann ein eigenes Programm für den 
Rechner. Ich hoffe ihr wisst was ich meine?

Schönen Abend.

von Thomas Z. (usbman)


Lesenswert?

Stefan M. schrieb:
> Mein Problem bei der USB Update Möglichkeit ist das ich nicht ganz
> verstehe wie ich den Atmega 2560 welcher ja hinter dem at90USB162 hängt
> Flashen kann

Das macht eben eine Software (Bootloader)

Diese liest von der SD Karte dein Update und macht die notwendigen 
Plausibilitätstests. Sind diese Tests ok wird das File mittels IAP Calls 
blockweise ins interne Flash geschrieben. Wenn alles geschrieben ist 
wird die FW gestartet. Diesen Loader must du in jedem Fall schreiben.

Die FW kannst du entweder direkt auf die SD Karte kopieren, oder deine 
FW loggt die SysEx Requests auf passende Kennungen und schreibt das File 
dann auf deine SD Karte.
Falls du mit SysEx arbeiten willst brauchst du auch ein Programm auf dem 
PC was solche Messages erzeugen kann. Das ist aber nicht schwer da MS 
die entsprechende Multimedia API seit ewigen Zeiten eingebaut hat.

Beispiel für ein SysEx request wie ich das mache
0xF0
  "usbman"
  ":1000B50075E20075EB0C7E007F008FED75EC007E2070"
0xF7

Das ACK / NAK Protokoll hab ich allerdings nicht implementiert. Mir 
reicht die Quersumme im Intel Hex. Wenn was schief geht verlasse ich 
mich darauf dass die CRC Sicherung das merkt.

: Bearbeitet durch User
Beitrag #6858391 wurde vom Autor gelöscht.
von Stefan M. (mannitb303)


Lesenswert?

Hallo,
sorry das ich mich erst jetzt wieder melde.

Ich glaube ich werde mich mal mit der Bootloader Thematik beschäftigen.
Gibt es da eine Seite die das leicht erklärt?
Kann ich z.b. mit der Arduino IDE jeden Bootloader brennen?
Gibt es Beispielcode für/von einem Atmega Bootloader?

Stefan F.: Wie übertragst du das Update per SysEx vom Rechner? Nutzt du 
da ein eigenes PC Programm?

Ach noch etwas, hat zwar nicht wirklich was mit dem Thema zu tun aber 
hat jemand von euch erfahrung mit Kickstarter Projekten?


Danke für eure Hilfe.


Grüße

Stefan

von Stefan F. (Gast)


Lesenswert?

Stefan M. schrieb:
> Kann ich z.b. mit der Arduino IDE jeden Bootloader brennen?

Nur die Bootloader, die in die Arduino IDE integriert sind. Bzw in den 
Core Plugins die du hinzugefügt hast.

> Gibt es Beispielcode für/von einem Atmega Bootloader?

Sicher, Arduino ist komplett Open-Source. Schau in Github. Der aktuelle 
Bootloader heißt "Optiboot".

von Thomas Z. (usbman)


Lesenswert?

Stefan M. schrieb:
> Stefan F.: Wie übertragst du das Update per SysEx vom Rechner? Nutzt du
> da ein eigenes PC Programm?

Für den Anfang zum Testen reicht reicht dafür auch MidiOx. Damit kannst 
du einzelne SysEx Requests verschicken und damit deine Programmlogik 
testen.
Im Endausbau musst du dann halt eine Update.exe bauen die mit Hilfe der 
Multimedia API deine komplette Firmware an das Device sendet.

von EAF (Gast)


Lesenswert?

Stefan M. schrieb:
> Kann ich z.b. mit der Arduino IDE jeden Bootloader brennen?

Natürlich!
Jeden AVR Bootloader.
Vieles ist vorbereitet, den Rest kann man selber definieren.

Stefan M. schrieb:
> Gibt es Beispielcode für/von einem Atmega Bootloader?
Liegt in deiner Arduino Installation.
Verschiedene Varianten, incl Quellcode und Toolchain.

Beitrag #6866380 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Stefan M. schrieb:
> Wie übertragst du das Update per SysEx vom Rechner?

Ich verstehe die Frage nicht "SysEx" kenne ich nicht. Vermutlich meinst 
du damit ein Midi Kommando (ist zu lange her dass mit Midi zu tun 
hatte).

Wenn ich Firmware auf Mikrocontroller update, dann per Bootloader oder 
Programmieradapter. Auf jeden Fall versuche ich nicht, es möglichst 
einfach zu machen, weil das riskant ist.

Mir reicht, dass die Firmware von meinem Fernseher manchmal 
ferngesteuert  verschlimmbessert wird, obwohl ich das Feature in den 
Settings deaktiviert habe. Nie wieder Samsung!

Update per Midi Interface finde ich furchtbar. Das soll bitteschön über 
eine separate Schnittstelle gehen oder wenigstens manuelle Betätigung 
von Steckbrücken erfordern, für die man das Gerät aufschrauben muss.

Ich akzeptiere, dass du dir das Update per Midi in den Kopf gesetzt 
hast. Das sollte theoretisch mit einem Bootloader machbar sein. 
Allerdings muss der dann das Midi Protokoll "sprechen", also wohl nicht 
die sonst üblichen Bootloader mit STK500 oder AVR910 Protokoll.

von jo (Gast)


Lesenswert?

Thomas Z. schrieb:
> Im Endausbau musst du dann halt eine Update.exe bauen die mit Hilfe der
> Multimedia API deine komplette Firmware an das Device sendet.

Soso - eine Update.exe. Da freu'n sich aber die MACies unter den 
Musikern. Wie viele sind das denn - in Prozent? Neunzig - oder doch 
schon mehr?

Wenn ich sowas höre wie: "da baut man *halt*", oder noch besser: "da 
baut man *einfach*" - da weiß ich von vorne rein: Das geht in die Hose.

von Cyblord -. (cyblord)


Lesenswert?

jo schrieb:
> Soso - eine Update.exe. Da freu'n sich aber die MACies unter den
> Musikern. Wie viele sind das denn - in Prozent? Neunzig - oder doch
> schon mehr?

Der Windows User erwartet eine Update.exe die einfach funktioniert.

Mit MACies verfährt man auch völlig anders: Man zockt richtig Kohle für 
das Update ab. Egal wie das dann da drauf kommt. Im Zweifel ein neues 
Gerät. Die zahlen das gerne. Die brauchen das.

Einem Linuxer schmeißt man einfach alle Quellcode Dateien in einem 
tarball hin und behauptet man müsse das Ding selber bauen. Bis der merkt 
dass es nicht geht, nach monatelangem probieren, man pages lesen, in 
Foren fragen, ist das Gerät abgekündigt.



So geht modernes zielgruppenorientiertes Marketing.

: Bearbeitet durch User
von jo (Gast)


Lesenswert?

Stefan M. schrieb:

> Ich glaube ich werde mich mal mit der Bootloader Thematik beschäftigen.
> Gibt es da eine Seite die das leicht erklärt?
> Kann ich z.b. mit der Arduino IDE jeden Bootloader brennen?
> Gibt es Beispielcode für/von einem Atmega Bootloader?

Gääähhn - wie wäre es mit Lesen?
Beitrag "Re: Update Funktion für eigenes Projekt"

von Thomas Z. (usbman)


Lesenswert?

jo schrieb:
> Soso - eine Update.exe. Da freu'n sich aber die MACies unter den
> Musikern. Wie viele sind das denn - in Prozent? Neunzig - oder doch
> schon mehr?

wie man sowas auf dem Mac macht weis ich nicht. Ich bin mir aber sicher 
das auch auf dem Mac eine entsprechende API existiert die es erlaubt 
SysEx Requests zu verschicken. Das letzte mal als wir sowas für den MAC 
gebraucht habe, hat das ein anderer Programmierer in der Firma gemacht.

jo schrieb:
> Wenn ich sowas höre wie: "da baut man *halt*", oder noch besser: "da
> baut man *einfach*" - da weiß ich von vorne rein: Das geht in die Hose.

Nun eine entsprechende Update.exe läuft hier schon im Testbetrieb. (für 
meine Midi Firmware)

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Man könnte das Update Programm als Webseite konzipieren. WebUSB, 
WebMIDI, oder einfach als abspielbares wav file, wie früher mit den 
kasetten. Was auch immer gerade am einfachsten ist.

von Stefan F. (Gast)


Lesenswert?

Wenn hier jemand von einer "exe" schreibt, meint er ein ausführbares 
Programm. Das muss nicht unbedingt ein Windows Programm sein.

von EAF (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn hier jemand von einer "exe" schreibt, meint er ein
> ausführbares
> Programm. Das muss nicht unbedingt ein Windows Programm sein.

Natürlich kann man auch unter Linux ein Programm Update.exe nennen.
Nur: Wer würde auf eine solche irre Idee kommen....

von Cyblord -. (cyblord)


Lesenswert?

EAF schrieb:
> Stefan ⛄ F. schrieb:
>> Wenn hier jemand von einer "exe" schreibt, meint er ein
>> ausführbares
>> Programm. Das muss nicht unbedingt ein Windows Programm sein.
>
> Natürlich kann man auch unter Linux ein Programm Update.exe nennen.
> Nur: Wer würde auf eine solche irre Idee kommen....

Das ist typischer Nullbeitrag von Stefan. Leider in einer Reihe mit sooo 
vielen.
Natürlich referenziert "Update.exe" eindeutig und unzweifelhaft auf ein 
Windows Programm. Es ging eben auch nicht um "irgendeine ausführbare 
Datei".

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Cyblord -. schrieb:
> Natürlich referenziert "Update.exe" eindeutig und unzweifelhaft auf ein
> Windows Programm.

mono

von Cyblord -. (cyblord)


Lesenswert?

🐧 DPA 🐧 schrieb:
> Cyblord -. schrieb:
>> Natürlich referenziert "Update.exe" eindeutig und unzweifelhaft auf ein
>> Windows Programm.
>
> mono

Ist auch nichts anderes als ein Windows Programm. Nur dass man es in 
einer Linux Umgebung ausführen kann.

von 🐧 DPA 🐧 (Gast)


Lesenswert?

Cyblord -. schrieb:
> 🐧 DPA 🐧 schrieb:
>> Cyblord -. schrieb:
>>> Natürlich referenziert "Update.exe" eindeutig und unzweifelhaft auf ein
>>> Windows Programm.
>>
>> mono
>
> Ist auch nichts anderes als ein Windows Programm. Nur dass man es in
> einer Linux Umgebung ausführen kann.

Nein, die sind technisch gesehen kein Windows Programm.
Ähnlich wie EFI Dateien sind es auch PE Dateien, was Windows Anwendungen 
zufällig auch sind. Es ist aber ein .NET Program, und kein Windows 
Programm. Naja, zumindest alles bevor .NET 5.0.

Der Code in den Anwendungen ist kein Maschinencode, sondern vergleichbar 
mit Java binär Code 
https://en.wikipedia.org/wiki/Common_Intermediate_Language

Die APIs die unterstützt werden müssen, sind standardisiert: 
https://github.com/dotnet/standard

Idealerweise nutzt eine Anwendung nur die Standardisierten APIs.
Beliebige unabhängige Implementationen von .NET implementieren diese 
ebenfalls. So eine Anwendung ist dann eigentlich nicht Platformabhängig 
in dem sinne, das irgend ein bestimmtes OS, oder eine bestimmte 
Implementation benötigt wird. Deshalb ist es eine .NET Anwendung, aber 
keine Windows Anwendung.

Es ist genau wie bei Java. Und Java Programme sind ja auch keine Windows 
Programme, sondern eben Java Programme.

Es geht darum, worauf laufen die Anwendungen, was ist deren Platform. 
Und die Antwort ist in dem Fall halt technisch gesehen nicht Windows.

Man sollte aber beachten, dass das .NET Ökosystem hauptsächlich von 
Microsoft Kontrolliert wird. Ich würde also trotzdem davon abraten, es 
zu verwenden.

von c-hater (Gast)


Lesenswert?

Cyblord -. schrieb:

> 🐧 DPA 🐧 schrieb:
>>
>> mono
>
> Ist auch nichts anderes als ein Windows Programm. Nur dass man es in
> einer Linux Umgebung ausführen kann.

Ich wusste, dass du vom Programmieren keine Ahnung hast.

Natürlich steckt in einer Exe für Mono kein Stück "Windows-Programm", 
jedenfalls nicht, wenn man mal annimmt, dass ein Windows-Programm sich 
dadurch auszeichnet, dass es die Windows-APIs verwendet.

Das Einzige, was so ein Executable mit Windows verbindet, ist die 
Tatsache, dass es das unter Windows übliche Format für Executables hat. 
Dieses Format ist aber vom OS (und auch der Maschine) prinzipiell 
unabhängig, war sogar von Anfang an so geplant, wie schon der Name 
"portable executable" besagt.

von Cyblord -. (cyblord)


Lesenswert?

c-hater schrieb:

> Natürlich steckt in einer Exe für Mono kein Stück "Windows-Programm",
> jedenfalls nicht, wenn man mal annimmt, dass ein Windows-Programm sich
> dadurch auszeichnet, dass es die Windows-APIs verwendet.
>
> Das Einzige, was so ein Executable mit Windows verbindet, ist die
> Tatsache, dass es das unter Windows übliche Format für Executables hat.

Und das reicht für die Charakterisierung "Windows Programm" nicht aus?

> Dieses Format ist aber vom OS (und auch der Maschine) prinzipiell
> unabhängig, war sogar von Anfang an so geplant, wie schon der Name
> "portable executable" besagt.

Darum war der Einwand mit Mono auch eher quatsch. Und der kam nicht von 
mir.

: Bearbeitet durch User
von 🐧 DPA 🐧 (Gast)


Lesenswert?

Cyblord -. schrieb:
> Und das reicht für die Charakterisierung "Windows Programm" nicht aus?

Nö. Ist ja weder die erste, noch die einzige Platform, die das PE Format 
und die .exe Endung verwendet.

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> Natürlich kann man auch unter Linux ein Programm Update.exe nennen.
> Nur: Wer würde auf eine solche irre Idee kommen....

Es geht nicht um die Dateiendung. Mit "exe" meint man ein "executable".

von Stefan F. (Gast)


Lesenswert?

Cyblord -. schrieb:
> Ist auch nichts anderes als ein Windows Programm. Nur dass man es in
> einer Linux Umgebung ausführen kann.

Das stimmt nicht. Zum Beispiel ist die Linux Version von Keepass2 eine 
*.exe Datei. Darin befindet sich kein Nativer Windows Code. Aber mir 
ging es wie gesagt nicht um die Dateiendung, sondern um "exe" als 
Abkürzung für "executable program".

von EAF (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Mit "exe" meint man ein "executable".

Alles klar!
Du hast die Definitionshoheit, und darfst darum bestimmen was andere 
meinen.
Alles klar!
Keine Fragen mehr.

von Stefan F. (Gast)


Lesenswert?

EAF schrieb:
> Alles klar! Du hast die Definitionshoheit

Der Thomas hat doch längst klar gestellt dass er mit exe nicht 
ausdrücken wollte, dass es nur unter Windows möglich sei.

Thomas Z. schrieb:
> Im Endausbau musst du dann halt eine Update.exe bauen die mit Hilfe der
> Multimedia API deine komplette Firmware an das Device sendet.

Thomas Z. schrieb:
> wie man sowas auf dem Mac macht weis ich nicht. Ich bin mir aber sicher
> das auch auf dem Mac eine entsprechende API existiert die es erlaubt
> SysEx Requests zu verschicken.

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.