Welche Regeln müssen Funktionen erfüllen, um in RTOS verwendet zu werden?

Ich verwende einen ATSAM4LC2A ARM- Mikrocontroller, der 3xUSART , GPIOs und DMA antreibt . Timer mit der Verwendung von Interrupts und der gesamten verbleibenden Logik meiner Anwendung. Das Projekt ist funktionsfähig, aber noch ohne RTOS. Dies ist mein erster Versuch und ich möchte meine Code-Logik mit Hilfe von FreeRTOS portieren, aber ich habe Angst davor, weil die Werbesicherheit für mich neu ist.

Gibt es einen Software-Checker, der meinen Code als Thread-sicher bewertet? Oder gibt es eine Reihe von schriftlichen Regeln, die ich als Checkliste für jede einzelne Funktion verwenden kann, die ich verwende?

Die einzigen Regeln die mir einfallen sind:

  • Keine Verwendung globaler Variablen innerhalb von Funktionen.
  • Verwenden Sie Mutex, wenn globale Variablen verwendet werden.

Ist es auch besser, für meine eingebettete Anwendung zu prüfen, ob sie werbesicher oder wiedereintrittsfähig ist?

Ich erinnere mich, dass unser benutzerdefiniertes RTOS renetranten Code verwendete, aber mit einem 8-kHz-IRQ für digitales DS1 {dual FXD 1,544 Mbit / s} verwendete unser RTOS-Konzentrator / Mux für Multi-IO-Streams priorisierte Nachrichten, die nach Schweregrad der Aufgabe geordnet waren, und pushte / poppte den Stack auf jedem IRQ. Dies war um '79 mit Motorola-CPU-Chip. Die einzige Anforderung war, dass kein einzelner Task das IRQ-Intervall überschreiten durfte, da sonst ein Echtzeitfehler durch kumulativen Stapelüberlauf auftreten könnte
Siehe Was ist mit "threadsicherem" Code gemeint? oder der Wikipedia-Artikel zur Thread-Sicherheit.
Wenn Ihr Code ohne RTOS funktioniert, warum wollen Sie dann ein RTOS integrieren?
Ich warte darauf, dass ein GSM- und ein GPS-Modul initialisiert werden. Ich möchte, dass Sachen parallel passieren, um wenig Energie zu haben. Es gibt einige gute Gründe. Auch für die Erfahrung für zukünftige Projekte.

Antworten (1)

Ihre beste Wette hier ist, dem Idom "bewege dich schnell und zerstöre Dinge" zu folgen. Wenn Ihr Projekt nicht ein Kernreaktorkern ist, schlage ich vor, dass Sie versuchen zu sehen, was funktioniert und was nicht. Wenn Sie Mentoren in der Nähe haben, bitten Sie sie um Hilfe, wenn Sie nicht weiterkommen und es nicht herausfinden können.

Im Allgemeinen bietet ein RTOS Möglichkeiten zum Teilen von Daten zwischen Tasks unter Verwendung von Postfächern und Sperren. Die Sache ist, dass in einem flachen Speichermodell ohne MMU bestimmte Bibliotheksfunktionen wiedereintrittsfähige Versionen haben, die verwendet werden sollten. Beispielsweise verwendet strtok Speicher, um die aktuelle Position in der Zeichenfolge zu speichern. Wenn zwei Threads strtok verwenden, kann es zwischen aufeinanderfolgenden Aufrufen zu Verwirrung kommen. In diesem Fall sollte strtok_r verwendet werden.

Dieses Dokument zur Sicherheitsanalyse von C/C++-Threads ist eine gute Lektüre.