Forum: Mikrocontroller und Digitale Elektronik Wie teste ich (schnell) Funktionen aus STM32CubeIDE - ohne Hardware und Debugger?


von Gunnar F. (gufi36)


Lesenswert?

Hi, ich schreibe gerade auf dem STM32F446VET eine Applikation, die 
Kommandos über UART vom HOST-PC erhält, diese abarbeitet und Antworten 
zurück sendet. Bin dabei, die Kommandostrukturen, den Parser und die 
Ausführungsschichten zu schreiben. Da steckt viel ANSI C (strtok_r, 
atoi, etc.) drin, wo ich alles andere als sattelfest bin.
Das im Debug zu testen, ist aufwendig, zumal auch die Host-App in C# 
noch in der Mache ist. Also müsste ich da vom Terminal aus senden.
Wie kann ich Teile dieser App (.c/.h) Module woandershin auslagern und 
dort auf die Schnelle austesten? Habe das schonmal in Code::Blocks 
probiert, war aber auch alles andere als straightforward.
Kennt jemand hier solche Tricks? Kann ich in der CubeIDE auch ein 
C-Projekt mit MinGW aufsetzen und das gschwind in der Konsole ausgeben 
lassen?
Danke an die Experten der Tafelrunde!
von Vanye R. (vanye_rijan)


Lesenswert?

> Bin dabei, die Kommandostrukturen, den Parser und die
> Ausführungsschichten zu schreiben.

Als ich sowas das letztemal brauchte habe ich mir das von flex schreiben 
lassen. .-)

Vanye
von Frank K. (fchk)


Lesenswert?

Du kannst das auf Deinem PC testen. Die hardwareabhängigen Funktionen 
(UART,...) kapselst Du in Funktionen, und Dein Parser wird auf dem PC 
genauso funktionieren wie auf dem STM32. Auf dem PC kannst Du in der 
Regel besser und einfacher testen, ohne den Code jedesmal hochzuladen.

Da Du auch C# Code hast: Das Visual Studio sollte eigentlich auch C Code 
veraerbeiten können. Eventuell musst Du die passenden Teile 
nachinstallieren.

fchk
von Andreas M. (amesser)


Lesenswert?

Wenn dein Code anständig gekapselt ist und keine Abhängigen zu den STM 
Libraries hat, dann kanns Du den einfach zusammen mit Testcode in eine 
Ausführbare Detei für deinen PC kompilieren und dort starten.

Nennt man UnitTest.
von N. M. (mani)


Lesenswert?

Frank K. schrieb:
> Du kannst das auf Deinem PC testen.

Genau so würde ich das auch machen.

Kapseln über eine HAL und dann Unittest schreiben die du auf dem PC 
laufen lassen kannst.

Musst du dir halt die ganzen Szenarien überlegen die dir einfallen. Zu 
kurz, zu lang, Wertebereiche, Terminierungen usw.
: Bearbeitet durch User
von Gunnar F. (gufi36)


Lesenswert?

Danke, bin gerade dabei das zu versuchen, mit MSYS2 und VSCode. Mal 
sehen, ob die Module sauber gekapselt sind, aber ich glaube schon. Die 
Befehlshandler enthalten HAL-Befehle.
von Ulrich (Firma: DC3AX) (uprinz)


Lesenswert?

Warum schreibt man eine M2M Kommunikation in einer Art und Weise, dass 
sie String-Vergleiche benötigt? Habt Ihr da Vorgaben, dass es 
Menschenlesbar sein muss oder wollt Ihr die Befehle per Terminal 
emulieren können?

Ich frage nur, weil es wirklich viel viel effizienter geht, wenn man 
sich in Pointer Tabellen und Function-Pointer einarbeitet. Danach geht 
alles sehr viel schneller und vor allem sehr sicher.
von Gunnar F. (gufi36)


Lesenswert?

Ulrich schrieb:
> Ich frage nur,

Ich verstehe deine Frage nicht so recht. Ich habe eine Struct für 
Commands:
1
const Command_t myCommands[] =
2
{
3
    {  .code = 'K',
4
      .name = "Relais",
5
      .handler = switch_relay,
6
    },
7
    {  .code = 'V',    // immer mit Strom
8
      .name = "Voltage",
9
      .handler = get_volt,
10
    }, etc...
jedes Command hat seinen Funktionszeiger auf das was ich Handler nannte. 
Aber zunächst bearbeitet der Parser den empfangenen String vom Port und 
separiert die Parameter, übergibt dann an den Handler.
von Gunnar F. (gufi36)


Lesenswert?

Ulrich schrieb:
> Habt Ihr da Vorgaben, dass es
> Menschenlesbar sein muss oder wollt Ihr die Befehle per Terminal
> emulieren können?

P.S.: Ja, letzteres. Ich finde es gut, wenn ich an der Anlage, eben an 
der Steuersoftware vorbei, Kommandos auslösen kann.
von Nemopuk (nemopuk)


Lesenswert?

Gunnar F. schrieb:
> Kann ich in der CubeIDE auch ein
> C-Projekt mit MinGW aufsetzen und das gschwind in der Konsole ausgeben
> lassen?

Theoretisch müsste das gehen, denn die IDE besteht im Kern aus Eclipse 
mit dem CDT Plugin. Schaue dir dessen Doku an. 
https://projects.eclipse.org/projects/tools.cdt
: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Gunnar F. schrieb:
> Kann ich in der CubeIDE auch ein
> C-Projekt mit MinGW aufsetzen und das gschwind in der Konsole ausgeben
> lassen?

Ja das hab ich schon oft genau so gemacht.

Falls du von der klassischen STM32CubeIDE auf VS Code umsteigst, hier 
ein Tutorial für ein modernes Setup mit VS Code:

https://github.com/Erlkoenig90/VSCodeCMakeDemo

Das geht auch parallel in der selben VS Code Instanz die für STM32 
genutzt wird.
von Nick (b620ys)


Lesenswert?

Gunnar F. schrieb:
> Wie kann ich Teile dieser App (.c/.h) Module woandershin auslagern und
> dort auf die Schnelle austesten?

Lobenswerte Herangehensweise!
Das Ding hat auch einen Namen "Test driven developpment".
Dafür gibts auch ein passendes Buch, das du dir evtl. anschauen 
solltest:
...
Scheißlangen Amazon-Link gelöscht
...

"Test Driven Development for Embedded C". Von J.W. Grenning. Das 
verwendet aber das Ziel als Plattform. Nicht tragisch, die Techniken 
sind gleich.

Wenn du eine andere Plattform verwendest, achte penibel darauf, dass die 
Typen gleich sind. Also keine int. -> <stdint.h>
von Jonas W. (bitschubser101)


Lesenswert?

Mit minicom (https://linux.die.net/man/1/minicom) kann man einfache 
Kommunikation automatisieren (https://linux.die.net/man/1/runscript). 
Damit habe ich besonders mit dem expect Schlüsselwort im Kontext 
AT-Kommandos gute Erfahrungen gemacht.

Nick schrieb:
> "Test Driven Development for Embedded C". Von J.W. Grenning. Das
> verwendet aber das Ziel als Plattform. Nicht tragisch, die Techniken
> sind gleich.

Das Buch kann ich für komplexere Fälle nur empfehlen.
: Bearbeitet durch User
von Nick (b620ys)


Lesenswert?

NICHT ernst gemeint:
DA10 von W&G
https://www.amikon-shop.de/messtechnik/da10-datenanalysator-wandel-goltermann/a-2921

Wenn das Timing wichtig ist und Antworten innerhalb einer gegebenen 
Zeit.
Hatte ich tatsächlich vor nicht mal 10 Jahren verwendet für ein 
komplexeres Protokoll. Aber nur zu Anfang. :-))
Ihr dürft gerne auch lachen!
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.