Forum: Mikrocontroller und Digitale Elektronik Projektvorstellung: FirmwareBatchTools (Seriennummerierung, Production Programming, hex bin convert)


von Phantomix X. (phantomix)



Lesenswert?

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?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

von Phantomix X. (phantomix)


Lesenswert?

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.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

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.

von Phantomix X. (phantomix)


Lesenswert?

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.

von Phantomix X. (phantomix)


Lesenswert?

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.

von Phantomix X. (phantomix)


Angehängte Dateien:

Lesenswert?

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

von Phantomix X. (phantomix)


Angehängte Dateien:

Lesenswert?

Hier einmal das Feature "Variablen über die Kommandozeile eingeben" als 
Screenshot. Zur Demo werden die Variablen an helloworld.bat übergeben.

von Phantomix X. (phantomix)


Angehängte Dateien:

Lesenswert?

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.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.