smx RTOS Kernel

smx Multitasking Kernel, SMX RTOS

Features

Hohe Geschwindigkeit

  • 3 Ebenen für Hard Real-Time: ISRs, LSRs und Tasks
  • Sehr kurze IRQ Latency
  • Verzögerte IRQ Bearbeitung
  • Advanced Scheduler
  • Fast Task switching
  • Preemptive Scheduling
  • Scheduler Locking
  • Layered Ready-Queue
  • Precise Time Measurements
  • Precise profiling

Geringe ROM, RAM Größe

 

  • Effizienter Code
  • minimaler RAM verbrauch
  • System Stack reduziert Task Stack Verbrauch
  • One-Shot Tasks erlauben Mehrfachverwendung von Stacks
  • Dynamische Objekte

Zuverlässigkeit, Sicherheit

  • umfangreiche Fehlererkennung
  • Stack Überlauf-Erkennung
  • Timeouts für alle blockenden Aufrufe
  • Sicherer Nachrichtenaustausch mittels Exchanges
  • Mutexes
  • Geschützte Heaps
  • nicht blockierbare LSRs
  • Ereignis Logfunktion

Einfach

  • Prozessor spezifische BSPs
  • Tool spezifische Projekt Dateien
  • Quick-start Protosystem
  • Task-aware Debugging
  • Grafische Analyse Tools
  • C++ Support mit smx++

smx ist ein zuverlässiger, hard real time multitasking Kernel für Embedded Systeme. Er kann alleine oder mit anderen Komponenten des SMX RTOS betrieben werden. Zu den unterstützten Architekturen zählen ARM/Cortex, ColdFire und PowerPC. smx bietet viele Features die es Anwendern erleichtern ihre Projekte termingerecht und ohne Probleme fertigzustellen.

More RTOSsmx 4.2 hat viel mehr Features als ein einfaches Standard RTOS, die helfen schnell und kostengünstig sichere und zuverlässige Systeme zu entwickeln. Für mehr Details empfehlen wir Ihnen das smx Special Features Datasheet, welches Sie unten auf dieser Seite finden, in dem diese Features diskutiert werden. Des Weiteren finden Sie in dem Dokument einen allgemeinen Überblick über SMX und eine Einführung in das API.

smx bietet volle Unterstützung für viele Entwicklungsumgebungen. smxAware bietet dem Entwickler Kernel spezifische Debugg Möglichkeiten und bietet Möglichkeiten zur graphischen Analyse des Systemverhaltens. Des Weiteren steht mit smx++ ein C++ API für smx zur Verfügung.

smx ist seit über 25 Jahren kommerziell am Markt erhältlich und wird seitdem in vielen hundert verschiedenen Anwendungen eingesetzt. Während dieser Zeit hat sich der Kernel als äußerst zuverlässig, robust und vielfältig einsetzbar gezeigt.

Für den schnellen und unkomplizierten Einstieg wird vor der Auslieferung, zusammen mit der Middleware ein kundenspezifisches Paket erstellt, welches ein auf die Hardware und die Entwicklungsumgebung angepasstes, vorkonfiguriertes Prototyp System mit einigen Beispiel Anwendungen enthält. Dies stellt dann eine gute Grundlage dar, um schnell mit der Entwicklung der eigenen Anwendung beginnen zu können.

Informieren Sie sich für Ihren RTOS Auswahlprozess

Laden Sie hier ein Whitepaper, dass Ihnen die Auswahl eines RTOS erleichtern wird

Konzept

Das Konzept von smx ist es das API so einfach wie möglich zu halten, dem Entwickler aber trotzdem eine Vielzahl von Features und Möglichkeiten zur Verfügung zu stellen. Einige RTOS Kernel sind (zu) einfach konzipiert. Dies führt zwar zu einer steilen Lernkurve bei den Entwicklern, endet aber häufig in Anwendungen die deutlich komplizierter sind, als es nötig wäre, da dann vieles was der Kernel nicht bietet von den Anwendungen selbst erledigt werden muss. Wir glauben das Micro Digital in dieser Frage den richtigen Kompromiss gefunden hat. Nicht benutzte Funktionalitäten von smx werden nicht in den finalen Code mit ein gelinkt. Daher führt das Mehr an Möglichkeiten, die smx bietet nicht automatisch zu größerem Code, sondern der Entwickler hat es in der Hand smx genau seinen Bedürfnissen anzupassen.

Zwei wichtige Entwurfsziele bei der Entwicklung des APIs von smx waren Symmetrie und Orthogonalität. Symmetrie meint hier, dass alles was getan werden kann, auch wieder rückgängig gemacht werden kann. Z.B. bietet smx für fast jede "create" Funktion eine entsprechende "delete" Funktion; für fast jede "start" Funktion, gibt es die entsprechende "stop" Funktion etc. Orthogonalität in diesem Zusammenhang meint, dass sich alle Kernel Funktionen, die auf Tasks operieren, unabhängig vom Task und seinem aktuellen Zustand, immer gleich verhalten. Z.B. führt das Löschen eines Tasks immer zum selben Ergebnis, unabhängig davon in welchem Zustand sich der Task gerade befand.  Dies hört sich einfach an, wird aber komplexer wenn man z.B. darüber nachdenkt was passiert, wenn sich ein Task, der sich gerade im Run-State befindet, selber löscht. (Dies kann im übrigem sehr praktisch sein und zeigt wie wichtig die Orthogonalität ist)

Des Weiteren wurde darauf geachtet das die API Funktionen eine möglichst kleine Anzahl an Funktionsargumenten benötigen. Fast alle smx Funktionen kommen mit drei oder weniger Argumenten aus und haben nie mehr als fünf. Andere APIs haben teilweise Funktionen mit zehn oder mehr Argumenten, was es sehr schwer macht die Funktionen richtig zu verstehen und korrekt einzusetzen.

Task Management

smx erlaubt das Erstellen und das Löschen von Tasks. Tasks können mit oder ohne eigenem Stack angelegt werden. Erstere werden als normale Tasks bezeichnet, während Tasks ohne eigenen Stack als one-shot Tasks bezeichnet werden. One-shot Tasks können sich einen Stack teilen, wodurch sie RAM sparen. Sobald ein Task angelegt ist, kann er gestartet oder gestoppt, angehalten oder fortgesetzt werden. Tasks können verhindern, dass sie unterbrochen werden und diese Sperre später dann wieder deaktivieren. Wenn ein Task zum ersten Mal gestartet wird, befindet er sich im geschützten Zustand um sicherzustellen, dass sie ihre Initialisierung ohne Unterbrechung beenden können.

smx erlaubt es für jeden Task exit und entry Routinen zu definieren, die vom Kernel aufgerufen werden, wenn ein Task fortgesetzt bzw. unterbrochen wird. Dies erlaubt es wichtige Ressourcen vor der Unterbrechung zu sichern bzw. vor dem Fortsetzen wieder herzustellen. Dazu gehören z.B. Coprozessor Register, Memory Bank Register oder globale Variablen.

I/O

Das Erstellen von Gerätetreibern ist unter vielen Betriebssystemen relativ kompliziert. Dies hängt damit zusammen, dass es eine relativ hohe Abstraktion gibt, weil u.A. die Treiber zwar gegen den Kernel gelinkt werden, aber nicht gegen die Anwendung. Des Weiteren muss in UNIX artigen Betriebssystemen häufig noch ein dateibasiertes I/O Interface implementiert werden.

Dies ist unter SMX nicht notwendig, da Gerätetreiber Teil der Gesamtanwendung sind und sie so ihren Aufgaben entsprechende Interfaces implementieren können. Die einzige Bedingung, die bei der Entwicklung von Gerätetreibern unter smx beachtet werden muss, hängt mit den ISRs zusammen:

smx Aufrufe dürfen nicht aus ISRs heraus gemacht werden, sondern sie müssen LSRs aufrufen, die dann später die smx Aufrufe durchführen können.
ISRs die LSRs aufrufen müssen mit den Makros enter_isr und exit_isr umgeben sein.

Um das Interface zwischen Anwendung und Gerätetreiber zu vereinfachen, stellt smx Objekte vom Type Pipe und Bucket zur Verfügung.

 

Pipes

Es ist gängige Praxis Ring Buffer zu benutzen, um ein- und ausgehende Streams zu implementieren. Pipes stellen eine standard Interface für Ring Buffer zur Verfügung über das Tasks auf die Buffer zugreifen können. Allerdings kann es bei dem Zugriff von Tasks und ISRs auf Ring Buffer zu Zugriffsproblemen kommen.

Eine Pipe besteht aus einem Ring Buffer variabler Länge. Es existieren schnelle, als Makros implementiert, Funktionen für ISRs, LSRs und Tasks um Zeichen in die Pipe zu geben, bzw. von ihr zu lesen. Des weiteren existieren smx Funktionen um dasselbe zu machen, die es den Tasks aber erlauben auf volle ausgehende bzw. leere eingehende Pipes zu warten. Die Pipe Makros und Funktionen sind interruptsicher und können daher sehr gut zur Kommunikation zwischen Tasks und Gerätetreibern genutzt werden.

 

Buckets

Ring Buffer oder Pipes sind keine besonders gute Lösung für Block oder Paket orientierte Kommunikation, da für jedes Zeichen ein extra Kopiervorgang ausgeführt werden muss. smx stellt ein Objekt vom Type Bucket zur Verfügung, welches dieses Problem löst. Hereinkommende Zeichen werden wie beim Ring Buffer, in das Bucket geladen. Wenn ein vollständiges Paket von Zeichen empfangen wurde (dies muss die empfangende ISR feststellen), wird eine LSR aufgerufen, die das Paket mittels Referenz (und nicht als Kopie), an den Empfänger übergibt (als smx Message). In die andere Richtung wird das von einem Task oder einer LSR in das Bucket verschoben. Das Bucket wird dann von der versendenen ISR mittels eines smx Makros geleert.

smx++ das C++ API für SMX

Mit smx++ können Anwendungen vollständig in C++ implementiert werden, ohne das auf das C API von smx direkt zugegriffen werden muss.

smx++ ist eine C++ Klassen Bibliothek die auf smx aufbaut. Sie besteht aus 21 Klassen. Die meisten Klassen entsprechen direkt den entsprechenden smx Objekten und die Methoden korrespondieren zu den entsprechenden smx Funktionen.

Neue Klassen und Methoden wurden hinzugefügt um das API zu erweitern und komfortabler zu gestalten. Des Weiteren wurden unnötige Objekte und Funktionen entfernt. Das Resultat ist ein API, die noch einfacher und intuitiver ist als das klassische smx API.

Dieses neue Interface eröffnet dem Entwickler von Embedded Systemen die Welt der Kontextsensitivität, überladenen Funktionen, virtuellen Funktionen, Modularität und Ableitung. smx++ ist mehr als ein einfacher C++ Wrapper um die smx API, es ist eine neue Programmierumgebung.

Der Entwickler kann z.B. ein eigenes Objekt von der smx++ Task Klasse ableiten. Es enthält dann alle smx++ Objekte, die mit dem Task assoziiert sind. Der abgeleitete Task ist damit vollständig modular und enthält alle Daten und Methoden die von dem Task benötigt werden. Ein Task für die serielle Kommunikation könnte beispielsweise die Interrupt Service Routine, ein smxLsr Objekt, ein smxBucket Object und ein smxExchange Objekt enthalten.

Für bestehende, in C geschriebene smx Anwendungen erlaubt smx++ einen sanften Übergang in die C++ Welt. Da smx die Basis von smx++ darstellt, sind direkte smx Aufrufe auch weiterhin möglich, was es erlaubt C und C++ zu mischen. Dies ermöglicht eine sanfte Migration hin zu C++.

Compiler & Debugger

Micro Digital unterstützt führende Compiler & Debugger.

Das smx RTOS ist für folgende Compiler verfügbar:

  • IAR Embedded Workbench ARM   Link
  • Freescale Codewarrior ColdFire & PowerPC  Link
  • Wind River (DIAB) Compiler ColdFire & PowerPC   Link
  • Rowley CrossWorks mit GNU GCC Compiler   Link

 

Die portable Systemsoftware ist unabhängig von speziellen Compilern und universell einsetzbar!

 

>>> Preise anfragen

Embedded Tools GmbH
Fon: +49 251 98729-0 / Fax: -20
E-Mail info(at)embedded-tools.de


Firma:
Titel:
Vorname:
Nachname: *
Straße:
PLZ:
Ort:
Land:
E-Mail: *
Telefon:
Nachricht:
Target-Prozessor(en):
Wie haben Sie von uns erfahren: