Forum: Mikrocontroller und Digitale Elektronik Projektvorstellung: FirmwareBatchTools (Seriennummerierung, Production Programming, hex bin convert)
Hallo!
Ich möchte euch mein neues Projekt vorstellen. Es handelt sich um ein
Tool, das zur Manipulation von Firmware- und anderen Dateien und zum
Flashen in Produktivumgebungen gedacht ist.
Das Ganze ist gewachsen aus folgendem Thread:
Beitrag "STM32 Seriennummer vergeben"
Erstmal die Anforderungen an das Projekt: 1 | - Ein-Klick-Ausführung des Prozesses
| 2 | - Kommandozeilen- + GUI-Ausführung des Prozesses
| 3 | - Projekteinstellungen
| 4 | - Lesen & Speichern von Projekteinstellungen (XML)
| 5 | - Speichern von Zusatzinfo (aktuelle Seriennummer etc)
| 6 |
| 7 | - Log-Ausgabe speichern
| 8 | - Pro Projekt / Pro Datum / Pro Ausführung
| 9 | - CSV-Export
| 10 |
| 11 | - HEX-Datei einlesen
| 12 | - Gültigen Speicherbereich definieren
| 13 | - Füllbyte definieren für Speicherbereiche die "undefiniert" sind
| 14 |
| 15 | - HEX-Datei ausgeben
| 16 | - Gültigen Speicherbereich definieren
| 17 |
| 18 | - Aliase (Variablen) definieren
| 19 | - Lesen aus dem Speicher
| 20 | - Aus Tasks wie bspw. Seriennummer
| 21 | - Schreiben in den Speicher
| 22 |
| 23 | - Binärdaten intern definieren
| 24 | - als Hexwerte / Statische Byte-Werte definieren
| 25 |
| 26 | - als Alias
| 27 |
| 28 | - Binärdatei (Rohdaten) einlesen
| 29 | - Offsetkorrektur (an die richtige Stelle schieben)
| 30 |
| 31 | - Inputdaten mergen (zuletzt eingelesene Datei überschreibt evtl vorherige Daten)
| 32 |
| 33 | - Externes Programm aufrufen mit Parametern
| 34 | - Programmausgabe in Logfenster darstellen können
| 35 | - SUCCESS/FAIL - Analyse anhand des Ausgabetextes (string.contains(...), evtl RegEx)
| 36 |
| 37 | - Einfache Anzeige des Ergebnisses mit RotKreuz/GrünHaken/GrauFragezeichen-Symbol
| 38 |
| 39 | - Seriennummer erzeugen
| 40 | - Alias
| 41 | - Seriennummer hochzählen: Immer / bei Erfolg
| 42 |
| 43 | - Schreiben von Variablen (Aliasen) in den Speicher
| 44 | - Text (Maximallänge, Füllbyte bspw 0x00)
| 45 | - Integer(8, 16, 32 Bit, Big - / Little Endian)
| 46 |
| 47 | - Überall Aliase als Platzhalter ermöglichen, bspw bei
| 48 | - Ausgabedateien
| 49 | - Log-Texten / CSV-Export
| 50 | ...
| 51 |
| 52 | - Erfolgsmeldung / Fehlschlagmeldung frei definierbar (bspw um Alias mit einzubauen)
|
Die Software hat jetzt den Status "öffentliche Alpha-Version". Die
Punkte oben sind soweit alle erfüllt, es gibt jedoch noch einiges, was
ich gerne einbauen würde.
Als Lizenz gibt es vorerst CC-BY-NC-ND. Ich möchte mir damit
vorbehalten, später für geringes Geld eine kommerzielle Version anbieten
zu können.
Weiterhin geplant: 1 | - CRC8, 16, 32-Berechnung über Speicherbereiche
| 2 | - S19-Dateiformat (Motorola) einlesen/ausgeben
| 3 | - ELF-Dateiformat einlesen/ausgeben
| 4 | - OH51-Dateiformat einlesen/ausgeben
|
Wäre so ein Tool für euch nützlich / Was hättet ihr gern noch drin?
Hallo,
ich würde mir für solch ein Programm auch noch wünschen, dass es direkt
mit einer SQL-Datenbank (MySQL o.ä.) verbunden werden könnte. Die
Generierung der Seriennummer sollte dann wahlweise durch das Programm
oder die Datenbank (UNIQUE-Eigenschaft des Feldes) erfolgen.
Es sollten Skripte vor und nach dem Programmieren aufgerufen werden
können, z.B. um seriennummernbezogene Prüfsummen berechnen zu können
oder im Anschluss an das Programmieren Messwerte aufzeichnen oder
Kalibrierungen/Justierungen durchführen zu können.
Andreas Schweigstill schrieb:
> Hallo,
>
> ich würde mir für solch ein Programm auch noch wünschen, dass es direkt
> mit einer SQL-Datenbank (MySQL o.ä.) verbunden werden könnte. Die
> Generierung der Seriennummer sollte dann wahlweise durch das Programm
> oder die Datenbank (UNIQUE-Eigenschaft des Feldes) erfolgen.
>
> Es sollten Skripte vor und nach dem Programmieren aufgerufen werden
> können, z.B. um seriennummernbezogene Prüfsummen berechnen zu können
> oder im Anschluss an das Programmieren Messwerte aufzeichnen oder
> Kalibrierungen/Justierungen durchführen zu können.
Hallo und danke für deine Antwort!
Bis auf SQL wäre jetzt schon alles von dem aufgezählten möglich:
- Skripte aufrufen geht über "Run external program". Da gehen natürlich
auch Batch-Dateien, wie im Demo gezeigt. Man könnte auch darüber
nachdenken, eine Skriptingfunktion mit einzubauen (sprich: Skripte
direkt im Projekt zu speichern und Programmintern auszuführen). Das ist
aber relativ viel Arbeit: Entweder man schreibt einen eigenen
Skript-Interpreter oder man bindet einen fertigen ein, wobei ich nicht
weiß, wie einfach/gut die Schnittstelle zum restlichen Programm
funktionieren wird.
- Du kannst so viele Tasks definieren wie du willst. Im Demo habe ich
jeden Task einmal definiert, aber es ist ohne Probleme möglich, 20
externe Programme auszuführen.
- SQL würde ich allerdings nicht für den Spezialfall "Seriennummer"
implementieren wollen, sondern als generisches "Variable lesen /
schreiben".
- Was auch noch fehlt ist, "Variable aus RAM lesen" (Äquivalent zu
"schreiben"), dann könnte man bspw ein Read/Modify/Write auf
Speicherzellen machen.
Edith sagt: Man könnte natürlich SQL auch über Kommandozeile/Script
bereits benutzen. Ist natürlich nicht so schön wie direkt integriertes.
Phantomix Ximotnahp schrieb:
> - SQL würde ich allerdings nicht für den Spezialfall "Seriennummer"
> implementieren wollen, sondern als generisches "Variable lesen /
> schreiben".
Die Seriennummer ist in diesem Kontext insofern etwas Besonderes, weil
sie normalerweise von Deinem Programm erzeugt wird. Dies könnte mit
einer datenbankerzeugten Seriennummer kollidieren.
Ich habe mir im Rahmen solcher Überlegungen (und deren
Implementierungen) auch abgewöhnt, den Begriff Seriennummer zu
verwenden, sondern stattdessen Testsequenznummer. In Deinem Programm
siehst Du ja auch die Auswahlmöglichkeit vor, die Seriennummer entweder
bei gelungener Programmierung oder in jeden Fall zu inkrementieren. Im
ersten Fall wäre es sehr schwierig, eine fehlprogrammierte Leiterplatte
bzw. solch ein Gerät datentechnisch zu verwalten.
Hallo!
- "Seriennummer erzeugen" ist nur ein "Task" in dem Projekt. Ob du den
für dein Projekt anlegst oder nicht ist dir überlassen.
Das Inkrementieren der Seriennummer bei "Erfolg" hat sich bei mir auf
Arbeit so etabliert. Dabei spielt es erst einmal keine Rolle, ob die
Platine fehlerfrei ist oder nicht, sondern sagt nur aus, dass das
Programmieren geklappt hat. Das ist natürlich evtl. bei anderen
Unternehmen nicht der Fall; da muss der Test durchlaufen. Das
funktioniert natürlich auch wenn man den Test als ext.
Kommandozeilen-Programm ausführen kann.
Wenn man aber schon SQL einbaut, sollte man gleich flexibler sein: Wie
wäre es mit dem Abrufen der neuen Seriennummer, dynamischer Parameter,
Schreiben der Testergebnisse, ...
Ich stelle mir gerade vor, dass ich die Eingabe von SQL-Befehlen
unterstützen werde. Das ist am flexibelsten - wenn auch nicht ganz
DAU/Nutzerfreundlich. Das Thema Nutzerfreundlichkeit zieht sich aber eh
schon durch das ganze Programm, da es absichtlich sehr abstrakt gehalten
ist, um möglichst viele Anwendungsfälle zu unterstützen.
Roadmap für die nächsten Tage:
- Definition von Variablen über die Kommandozeile. Das hat den Sinn,
dass man bspw. Pfadangaben von extern mit einfüttern kann (evtl. braucht
das Projekt dazu auch noch eine Checkbox, ob das erlaubt ist oder nicht)
- Registrierung eines Dateitypen. Natürlich dann nicht .xml sondern
etwas wie .fwbatch - Ich bin für Vorschläge offen.
- Planen, wie und wo man allgemeine Programmeinstellungen speichern
könnte - es soll ja auch möglichst portabel bleiben, da ich Installer
einfach nicht mag.
0.0.2.0 (140510)
FIX TaskRunExternal: Prevented opening of extra console window
FIX SettingsTaskFileInput: renamed memory window to "... in file"
CHANGED SettingsBasePage: AutoScroll=true for generic settings scrolling
CHANGED frmMain: Load/Save project: Filters from ".xml" to ".fwbatch"
CHANGED ProjectFile: Refactored Version information for better
comparison
CHANGED SettingsProject: Removed scroll panel (now using
SettingsBasePage)
ADDED Main functions: Version check to make sure .EXE is in sync with
.DLL
ADDED ProjectFile: Setting boolean CommandLineVariables (allow/deny)
ADDED SettingsProject: Checkbox to allow CommandLineVariables
ADDED frmMain: Load/Save project: *.* selectable via drop down box
ADDED frmMain: Log window automatically scrolls down
ADDED TaskManager: Processing of args[] for variable input from
command line
ADDED frmPreferences: Preferences window (GUI)
ADDED frmPreferences: GUI button to register file extension ".fwbatch"
REMOVED FirmwareBatchConsole.cs: Comment-ToDo-List
Hier einmal das Feature "Variablen über die Kommandozeile eingeben" als
Screenshot. Zur Demo werden die Variablen an helloworld.bat übergeben.
Es gibt nun eine vorläufige Homepage unter
http://firmwarebatchtools.ugfx.org/
Und eine neue Version
FirmwareBatchTools_0.0.3.0_140511
FIX ProjectFile: Project Version.Build wasn't stored properly
ADDED KeysValues: After a "not found warning", the default value is
stored
ADDED TaskFileOutput: Filled GetTaskInfolines() for displaying in task
list
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
|