
In diesem Artikel werden wir weiterhin Warteschlangen berücksichtigen.
Sekundäre Warteschlangendienste
Nucleus RTOS verfügt über vier API-Aufrufe, die Zusatzfunktionen für Warteschlangen bereitstellen: Zurücksetzen einer Warteschlange, Empfangen von Warteschlangeninformationen, Abrufen der Anzahl der Warteschlangen in einer Anwendung und Abrufen von Zeigern auf alle Warteschlangen in einer Anwendung. Die ersten drei Funktionen sind in Nucleus SE implementiert.
Frühere Artikel in der Reihe:
Artikel 23. Warteschlangen: Einführung und GrundversorgungArtikel 22. Postfächer: Nebendienstleistungen und DatenstrukturenArtikel 21. Postfächer: Einführung und BasisdiensteArtikel Nr. 20. Semaphoren: Nebendienstleistungen und DatenstrukturenArtikel Nr. 19. Semaphoren: Einführung und GrundversorgungArtikel Nr. 18. Ereignisflag-Gruppen: Hilfsdienste und DatenstrukturenArtikel Nr. 17. Ereignisflag-Gruppen: Einführung und BasisdiensteArtikel 16. SignaleArtikel Nr. 15. Speicherpartitionen: Dienste und DatenstrukturenArtikel # 14. Speicherbereiche: Einführung und GrundversorgungArtikel Nr. 13. Aufgabendatenstrukturen und nicht unterstützte API-AufrufeArtikel 12. Dienstleistungen für die Arbeit mit AufgabenArtikel 11. Aufgaben: Konfiguration und Einführung in die APIArtikel 10. Scheduler: Erweiterte Funktionen und KontexterhaltungArtikel 9. Scheduler: ImplementierungArtikel 8. Nucleus SE: Internes Design und BereitstellungArtikel 7. Nucleus SE: EinführungArtikel 6. Andere RTOS-DiensteArtikel 5. Aufgabeninteraktion und SynchronisationArtikel 4. Aufgaben, Kontextwechsel und InterruptsArtikel 3. Aufgaben und PlanungArtikel 2. RTOS: Struktur und Echtzeitmodus
Artikel 1. RTOS: Einführung.Zurücksetzen der Warteschlange
Dieser API-Aufruf setzt die Warteschlange auf ihren ursprünglichen, nicht verwendeten Status zurück. Alle Nachrichten, die in der Warteschlange gespeichert sind, gehen verloren. Alle in der Warteschlange angehaltenen Aufgaben werden mit dem Rückkehrcode
NUSE_QUEUE_WAS_RESET fortgesetzt .
Warteschlangen-Reset-Aufruf in Nucleus RTOSPrototyp eines Serviceabrufs:
STATUS NU_Reset_Queue (NU_QUEUE * Warteschlange);Parameter:
Warteschlange - Ein Zeiger auf einen vom Benutzer bereitgestellten Warteschlangensteuerblock.
Rückgabewert:
NU_SUCCESS - Der Anruf wurde erfolgreich abgeschlossen.
NU_INVALID_QUEUE - ungültiger Warteschlangenzeiger.
Anruf zum Zurücksetzen der Warteschlange in Nucleus SEDieser Dienstprogrammaufruf unterstützt die Kernfunktionalität der Nucleus RTOS-API.
Prototyp eines Serviceabrufs:
STATUS NUSE_Queue_Reset (NUSE_QUEUE-Warteschlange);Parameter:
Warteschlange - Index (ID) der abgelegten Warteschlange.
Rückgabewert:
NUSE_SUCCESS - Der Anruf wurde erfolgreich abgeschlossen.
NUSE_INVALID_QUEUE - ungültiger Warteschlangenindex.
Implementieren des Zurücksetzens der Warteschlange in Nucleus SEDer Code der Funktion
NUSE_Queue_Reset (nach Überprüfung der Parameter) ist recht einfach. Indizes des Kopfes und Endes der Warteschlange sowie des Nachrichtenzählers in der Warteschlange wird ein Nullwert zugewiesen.
Wenn die Task-Sperre aktiviert ist, ist zusätzlicher Code für die Wiederherstellung angehaltener Tasks verantwortlich:
while (NUSE_Queue_Blocking_Count[queue] != 0) { U8 index; /* check whether any tasks are blocked */ /* on this queue */ for (index=0; index<NUSE_TASK_NUMBER; index++) { if ((LONIB(NUSE_Task_Status[index]) == NUSE_QUEUE_SUSPEND) && (HINIB(NUSE_Task_Status[index]) == queue)) { NUSE_Task_Blocking_Return[index] = NUSE_QUEUE_WAS_RESET; NUSE_Task_Status[index] = NUSE_READY; break; } } NUSE_Queue_Blocking_Count[queue]--; } #if NUSE_SCHEDULER_TYPE == NUSE_PRIORITY_SCHEDULER NUSE_Reschedule(NUSE_NO_TASK); #endif
Jeder angehaltenen Aufgabe in der Warteschlange wird der Status "Bereit" mit dem Rückkehrcode
NUSE_QUEUE_WAS_RESET zugewiesen . Nach Abschluss dieses Vorgangs wird bei Verwendung des Prioritätsplaners die Funktion
NUSE_Reschedule () aufgerufen , da möglicherweise eine oder mehrere Aufgaben mit hoher Priorität zur Ausführung bereit sind.
Abrufen von Warteschlangeninformationen
Dieser Serviceabruf enthält Informationen zur Warteschlange. Die Implementierung dieses Aufrufs in Nucleus SE unterscheidet sich von Nucleus RTOS darin, dass weniger Informationen zurückgegeben werden, da die Objektbenennung, die variable Nachrichtenlänge und die Reihenfolge der Aufgabenpausen nicht unterstützt werden und das Sperren von Aufgaben deaktiviert werden kann.
Aufruf für Warteschlangeninformationen in Nucleus RTOSPrototyp eines Serviceabrufs:
STATUS NU_Queue_Information (NU_QUEUE * Warteschlange, CHAR * Name, VOID ** Startadresse, UNSIGNED * Warteschlangengröße, UNSIGNED * verfügbar, UNSIGNED * Nachrichten, OPTION * Nachrichtentyp, UNSIGNED * Nachrichtengröße, OPTION * Suspend_Typ, UNSIGNt_t_Parameter:
Warteschlange - ein Zeiger auf einen vom Benutzer bereitgestellten Warteschlangensteuerblock;
name - Zeiger auf den 8-stelligen Bereich für den Namen der Nachricht in der Warteschlange;
start_address - ein Zeiger auf einen Zeiger, in den die Adresse des Anfangs des Warteschlangendatenbereichs geschrieben wird;
queue_size - ein Zeiger auf eine Variable zum Speichern der Gesamtzahl der
UNSIGNED- Elemente in der Warteschlange;
verfügbar - ein Zeiger auf eine Variable zum Speichern der Anzahl verfügbarer
UNSIGNED- Elemente in der Warteschlange;
Nachrichten - ein Zeiger auf eine Variable zum Speichern der aktuellen Anzahl von Nachrichten in der Warteschlange;
message_type - Ein Zeiger auf eine Variable zum Speichern des von der Warteschlange unterstützten Nachrichtentyps. Gültige Werte sind
NU_FIXED_SIZE und
NU_VARIABLE .
message_size - Ein Zeiger auf eine Variable zum Speichern der Anzahl der
UNSIGNED- Datenelemente in jeder Nachricht der Warteschlange. Wenn die Warteschlange Nachrichten mit variabler Länge unterstützt, gibt diese Nummer die maximale Nachrichtenlänge an.
suspend_type - Ein Zeiger auf eine Variable zum Speichern der Art der
Unterbrechung von Aufgaben. Gültige Werte sind
NU_FIFO und
NU_PRIORITY .
task_waiting - ein Zeiger auf eine Variable zum Speichern der Anzahl der in dieser Warteschlange angehaltenen Aufgaben;
first_task - Zeiger auf den Aufgabenzeiger, in dem der Zeiger der ersten angehaltenen Aufgabe platziert ist.
Rückgabewert:
NU_SUCCESS - Der Anruf wurde erfolgreich abgeschlossen.
NU_INVALID_QUEUE - ungültiger Warteschlangenzeiger.
Informationen zur Warteschlange in Nucleus SE anfordernDieser API-Aufruf unterstützt die Kernfunktionalität der Nucleus RTOS-API.
Prototyp eines Serviceabrufs:
STATUS NUSE_Queue_Information (NUSE_QUEUE-Warteschlange, ADDR * Startadresse, U8 * Warteschlangengröße, U8 * verfügbar, U8 * Nachrichten, U8 * Aufgaben warten, NUSE_TASK * first_task);Parameter:
Warteschlange - Index der Warteschlange, über die Informationen angefordert werden;
start_address - ein Zeiger auf eine Variable vom Typ
ADDR , in der die Adresse des Beginns des Datenbereichs der Warteschlange gespeichert wird;
queue_size - ein Zeiger auf eine Variable vom Typ
U8 , in der die Gesamtzahl der Nachrichten gespeichert wird, die in die Warteschlange passen können;
verfügbar - ein Zeiger auf eine Variable vom Typ
U8 , in der die Anzahl der freien Plätze in der Warteschlange gespeichert wird;
Nachrichten - ein Zeiger auf eine Variable vom Typ
U8 , die die aktuelle Anzahl von Nachrichten in der Warteschlange speichert;
task_waiting - ein Zeiger auf eine Variable, in der die Anzahl der in dieser Warteschlange angehaltenen Tasks gespeichert wird (bei deaktivierter Task-Sperre wird nichts zurückgegeben);
first_task - Ein Zeiger auf eine Variable vom Typ
NUSE_TASK, in der der Index der ersten angehaltenen Task gespeichert wird (bei deaktivierter Task-Sperre wird nichts zurückgegeben).
Rückgabewert:
NUSE_SUCCESS - Der Anruf wurde erfolgreich abgeschlossen.
NUSE_INVALID_QUEUE - ungültiger Warteschlangenindex;
NUSE_INVALID_POINTER - Ein oder mehrere
Zeigerparameter sind falsch.
Implementieren der Anzeige von Warteschlangeninformationen in Nucleus SEDie Implementierung dieses API-Aufrufs ist ziemlich einfach:
*start_address = NUSE_Queue_Data[queue]; *queue_size = NUSE_Queue_Size[queue]; *available = NUSE_Queue_Size[queue] - NUSE_Queue_Items[queue]; *messages = NUSE_Queue_Items[queue]; #if NUSE_BLOCKING_ENABLE *tasks_waiting = NUSE_Queue_Blocking_Count[queue]; if (NUSE_Queue_Blocking_Count[queue] != 0) { U8 index; for (index=0; index<NUSE_TASK_NUMBER; index++) { if ((LONIB(NUSE_Task_Status[index]) == NUSE_QUEUE_SUSPEND) && (HINIB(NUSE_Task_Status[index]) == queue)) { *first_task = index; break; } } } else { *first_task = 0; } #else *tasks_waiting = 0; *first_task = 0; #endif
Die Funktion gibt den Status der Warteschlange zurück. Wenn dann die Aufgabenverriegelung aktiviert ist, werden die Anzahl der ausstehenden Aufgaben und der Index der ersten zurückgegeben (andernfalls werden beide Parameter auf 0 gesetzt).
Abrufen der Anzahl der Warteschlangen
Dieser Dienstprogrammaufruf gibt die Anzahl der in der Anwendung konfigurierten Warteschlangen zurück. In Nucleus RTOS kann sich ihre Anzahl im Laufe der Zeit ändern, und der Rückgabewert gibt die aktuelle Anzahl von Warteschlangen an. In Nucleus SE wird der Rückgabewert während der Erstellungsphase festgelegt und kann nicht geändert werden.
Aufrufen des Warteschlangenzählers in Nucleus RTOSPrototyp eines Serviceabrufs:
UNSIGNED NU_Established_Queues (VOID);Parameter:
Sind abwesend.
Rückgabewert:
Die Anzahl der im System erstellten Warteschlangen.
Aufrufen des Warteschlangenzählers in Nucleus SEDieser API-Aufruf unterstützt die Kernfunktionalität der Nucleus RTOS-API.
Prototyp eines Serviceabrufs:
U8 NUSE_Queue_Count (void);Parameter:
Sind abwesend.
Rückgabewert:
Die Anzahl der in der Anwendung konfigurierten Warteschlangen.
Implementieren des Warteschlangenzählers in Nucleus SEDie Implementierung dieses API-Aufrufs ist sehr einfach: Der Wert des Symbols
#define NUSE_QUEUE_NUMBER wird
zurückgegeben .
Datenstrukturen
Warteschlangen verwenden fünf oder sechs Datenstrukturen (entweder im RAM oder im ROM), bei denen es sich um Tabellensätze handelt (wie bei anderen Nucleus SE-Objekten), deren Anzahl und Größe der Anzahl der Warteschlangen in der Anwendung und den ausgewählten Parametern entspricht.
Kerneldaten im RAM
Diese Daten haben folgende Struktur:
NUSE_Queue_Head [] ist ein Array von Zeigern vom Typ
U8 , hat einen Eintrag für jede konfigurierte Warteschlange und zeigt auf den Kopf der Nachrichtenwarteschlange. Wird als Adressindex in
NUSE_Queue_Data [] verwendet (siehe unten);
NUSE_Queue_Tail [] ist ein Array vom Typ
U8 , hat einen Eintrag für jede in der Anwendung konfigurierte Warteschlange und zeigt auf das Ende der Nachrichtenwarteschlange. Wird als Adressindex in
NUSE_Queue_Data [] verwendet (siehe unten);
NUSE_Queue_Items [] ist ein Array vom Typ
U8 , hat einen Eintrag für jede konfigurierte Warteschlange und ist ein Zähler für Nachrichten in der Warteschlange. Diese Daten können als redundant betrachtet werden, da diese Werte über die Indizes am Anfang und Ende der Warteschlange abgerufen werden können. Das Speichern des Zählers vereinfacht jedoch den Code.
NUSE_Queue_Blocking_Count [] - Dieses Array vom Typ
U8 enthält Zähler für die Anzahl der Aufgaben, die in jeder Warteschlange angehalten wurden. Dieses Array wird nur erstellt, wenn die Unterstützung für Task-Sperren aktiviert ist.
Diese Datenstrukturen werden beim
Start von Nucleus SE von der Funktion
NUSE_Init_Queue () auf Null initialisiert. Dies ist logisch, da alle Warteschlangen leer erstellt (nicht verwendet) werden.
Im Folgenden sind die Definitionen dieser Strukturen in der Datei
nuse_init.c aufgeführt :
RAM U8 NUSE_Queue_Head[NUSE_QUEUE_NUMBER]; RAM U8 NUSE_Queue_Tail[NUSE_QUEUE_NUMBER]; RAM U8 NUSE_Queue_Items[NUSE_QUEUE_NUMBER]; #if NUSE_BLOCKING_ENABLE RAM U8 NUSE_Queue_Blocking_Count[NUSE_QUEUE_NUMBER]; #endif
RAM-Benutzerdaten
Der Benutzer ist dafür verantwortlich, einen RAM-Bereich zum Speichern jeder Warteschlange bereitzustellen. Die Größe dieses Bereichs sollte ein Array vom Typ
ADDR enthalten , in dem jeder Datensatz einer Nachricht in der Warteschlange entspricht
ROM-Daten
Diese Daten haben folgende Struktur:
NUSE_Queue_Data [] - Ein Array vom Typ
ADDR hat einen Eintrag für jede konfigurierte Warteschlange und zeigt auf den Datenbereich der Warteschlange (siehe Benutzer-RAM-Daten).
NUSE_Queue_Size [] - Ein Array vom Typ
U8 hat einen Eintrag für jede konfigurierte Warteschlange und zeigt die maximale Anzahl von Nachrichten an, die jede Warteschlange empfangen kann.
Diese Datenstrukturen werden in der Datei
nuse_config.c deklariert und (statisch) initialisiert:
ROM ADDR *NUSE_Queue_Data[NUSE_QUEUE_NUMBER] = { /* addresses of queue data areas ------ */ }; ROM U8 NUSE_Queue_Size[NUSE_QUEUE_NUMBER] = { /* queue sizes ------ */ };
Die Speichermenge für Warteschlangen
Wie bei allen Nucleus SE-Kernelobjekten ist die für Warteschlangen benötigte Speichermenge leicht vorhersehbar.
Die Datenmenge im ROM (in Byte) für alle Warteschlangen in der Anwendung kann wie folgt berechnet werden:
NUSE_QUEUE_NUMBER * (Größe von (ADDR) + 1)Die Menge der Kerneldaten im RAM (in Byte) für alle Warteschlangen in der Anwendung mit aktivierter Task-Sperre wird wie folgt berechnet:
NUSE_QUEUE_NUMBER * 3Wenn die Sperre deaktiviert ist:
NUSE_QUEUE_NUMBER * 4Die Menge der Benutzerdaten im RAM (in Byte) für die Warteschlange mit dem
Warteschlangenindex :
NUSE_Queue_Size [Warteschlange] * sizeof (ADDR)Nicht realisierte API-Aufrufe
Vier API-Aufrufe, die in Nucleus RTOS enthalten sind, sind in Nucleus SE nicht implementiert:
Warteschlangenerstellung
Dieser API-Aufruf erstellt eine Warteschlange. In Nucleus SE ist dies nicht erforderlich, da Warteschlangen statisch erstellt werden.
Prototyp eines Serviceabrufs:
STATUS NU_Create_Queue (NU_QUEUE * Warteschlange, Zeichen * Name, VOID * Startadresse, UNSIGNED Warteschlangengröße, OPTION Nachrichtentyp, UNSIGNIERT Nachrichtengröße, OPTION Suspend_Typ);Parameter:
Warteschlange - Ein Zeiger auf eine vom Benutzer bereitgestellte Steuereinheit, mit der Warteschlangen in anderen API-Aufrufen verwaltet werden.
name - ein Zeiger auf einen 7-stelligen Warteschlangennamen mit einem Null-Abschlussbyte;
start_address - Adresse des Beginns der Warteschlange;
Nachrichtentyp - Nachrichtentyp, der von der Warteschlange unterstützt wird. Es kann die Werte
NU_FIXED_SIZE oder
NU_VARIABLE_SIZE annehmen .
message_size - Wenn die Warteschlange Nachrichten mit fester Länge unterstützt, legt dieser Parameter die genaue Länge jeder Nachricht fest. Wenn die Warteschlange Nachrichten mit variabler Länge unterstützt, ist dieser Wert die maximale Nachrichtenlänge.
suspend_type - Bestimmt den Typ der Suspend-Aufgaben in der Warteschlange. Es kann die Werte
NU_FIFO und
NU_PRIORITY annehmen , die das FIFO-Prinzip (First-In-First-Out) bzw. das Prinzip der Priorität der Aussetzung von Aufgaben bedeuten.
Rückgabewert:
NU_SUCCESS - Der Anruf wurde erfolgreich abgeschlossen.
NU_INVALID_QUEUE - Nullzeiger auf den Warteschlangensteuerblock (
NULL ) oder der Zeiger wird bereits verwendet;
NU_INVALID_MEMORY - ungültiger Speicherbereich in
start_address angegeben ;
NU_INVALID_MESSAGE - ungültiger Parameter
message_type ;
NU_INVALID_SIZE - Die Warteschlange unterstützt keine Nachrichten dieser Länge, oder die Warteschlangengröße und / oder Nachrichtenlänge beträgt 0.
NU_INVALID_SUSPEND - ungültiger
suspend_type- Parameter.
Warteschlange löschen
Dieser API-Aufruf löscht die zuvor erstellte Warteschlange. Nucleus SE benötigt dies nicht, da Warteschlangen statisch erstellt werden und nicht gelöscht werden können.
Prototyp eines Serviceabrufs:
STATUS NU_Delete_Queue (NU_QUEUE * Warteschlange);Parameter:
Warteschlange - Ein Zeiger auf einen Warteschlangensteuerblock.
Rückgabewert:
NU_SUCCESS - Der Anruf wurde erfolgreich abgeschlossen.
NU_INVALID_QUEUE - ungültiger Warteschlangenzeiger.
Warteschlangenzeiger
Dieser API-Aufruf erstellt eine sequentielle Liste von Zeigern auf alle Warteschlangen im System. Nucleus SE benötigt dies nicht, da Warteschlangen anhand eines einfachen Index und nicht anhand eines Zeigers identifiziert werden.
Prototyp eines Serviceabrufs:
UNSIGNED NU_Queue_Pointers (NU_QUEUE ** Zeigerliste, UNSIGNED Maximum_Pointers);Parameter:
pointer_list - Zeiger auf ein Array von Zeigern
NU_QUEUE . Dieses Array wird mit Zeigern auf im System erstellte Warteschlangen gefüllt.
Maximum_Pointers - Die maximale Anzahl von Zeigern im Array.
Rückgabewert:
Die Anzahl der
NU_QUEUE- Zeiger im Array.
Warteschlangen (Broadcast to Queue)
Dieser API-Aufruf leitet die Nachricht an alle in der Warteschlange angehaltenen Aufgaben weiter, die auf Nachrichten aus der angegebenen Warteschlange warten. Diese Funktion ist in Nucleus SE nicht implementiert, da dadurch Redundanz hinzugefügt wird.
Prototyp eines Serviceabrufs:
STATUS NU_Broadcast_To_Queue (NU_QUEUE * Warteschlange, VOID * Nachricht, UNSIGNED Größe, UNSIGNED Suspend);Parameter:
Warteschlange - ein Zeiger auf einen Warteschlangensteuerblock;
Nachricht - Zeiger auf die übertragene Nachricht;
Größe - Die Anzahl der nicht
signierten Elemente in der Nachricht. Wenn die Warteschlange Nachrichten mit variabler Länge unterstützt, muss dieser Parameter gleich oder kleiner als die von der Warteschlange unterstützte Nachrichtenlänge sein. Wenn die Warteschlange Nachrichten fester Länge unterstützt, muss dieser Parameter der Länge der von der Warteschlange unterstützten Nachricht entsprechen.
suspen -
Gibt an, ob die aufrufende Aufgabe
angehalten werden soll , wenn die Warteschlange bereits voll ist.
Dies kann
NU_NO_SUSPEND ,
NU_SUSPEND oder ein Timeout-Wert sein.
Rückgabewert:
NU_SUCCESS - Der Anruf wurde erfolgreich abgeschlossen.
NU_INVALID_QUEUE - ungültiger Warteschlangenzeiger;
NU_INVALID_POINTER - Nullzeiger auf eine Nachricht (
NULL );
NU_INVALID_SIZE - Die angegebene Nachrichtenlänge ist nicht mit der beim Erstellen der Warteschlange angegebenen Länge kompatibel.
NU_INVALID_SUSPEND - Versuch, eine Aufgabe von einem Thread
anzuhalten, der der Aufgabe nicht zugeordnet ist;
NU_QUEUE_FULL - In der Warteschlange ist nicht genügend Platz für die Nachricht vorhanden.
NU_TIMEOUT - Die Warteschlange ist nach Ablauf des Zeitlimits noch voll.
NU_QUEUE_DELETED - Die Warteschlange wurde gelöscht, während die Aufgabe angehalten wurde.
NU_QUEUE_RESET - Die Warteschlange wurde zurückgesetzt, während die Aufgabe angehalten wurde.
Nucleus RTOS-kompatibel
Wie bei allen anderen Nucleus SE-Objekten war es mein Ziel, die Kompatibilität des Anwendungscodes mit Nucleus RTOS zu maximieren. Warteschlangen sind keine Ausnahme und werden aus Anwendersicht auf die gleiche Weise wie in Nucleus RTOS implementiert. Es gibt auch eine gewisse Inkompatibilität, die ich für akzeptabel hielt, da der Code dadurch verständlicher und effizienter in Bezug auf den erforderlichen Speicher wird. Andernfalls können Nucleus RTOS-API-Aufrufe fast direkt auf Nucleus SE portiert werden.
Objektkennungen
In Nucleus RTOS werden alle Objekte durch eine Datenstruktur (Steuereinheiten) beschrieben, die einen bestimmten Datentyp hat. Ein Zeiger auf diese Steuereinheit dient als Kennung für die Warteschlange. Ich entschied, dass in Nucleus SE ein anderer Ansatz für die effiziente Nutzung des Speichers erforderlich ist: Alle Kernelobjekte werden durch eine Reihe von Tabellen im RAM und / oder ROM beschrieben. Die Größe dieser Tabellen wird durch die Anzahl der konfigurierten Objekte jedes Typs bestimmt. Die Kennung eines bestimmten Objekts ist der Index in dieser Tabelle. Also habe ich
NUSE_QUEUE als das Äquivalent von
U8 definiert . Eine Variable (kein Zeiger) dieses Typs dient als Warteschlangenkennung. Diese leichte Inkompatibilität ist leicht zu handhaben, wenn der Code von Nucleus SE nach Nucleus RTOS und umgekehrt portiert wird. In der Regel werden keine anderen Operationen an Objektkennungen als Verschieben und Speichern ausgeführt.
Nucleus RTOS unterstützt auch die Benennung von Warteschlangen. Diese Namen werden nur zum Debuggen verwendet. Ich habe sie von Nucleus SE ausgeschlossen, um Speicherplatz zu sparen.
Nachrichtengröße und -typ
In Nucleus RTOS kann eine Warteschlange so konfiguriert werden, dass Nachrichten verarbeitet werden, die aus einer beliebigen Anzahl von
nicht signierten Elementen bestehen. In Nucleus SE werden Warteschlangen vereinfacht und unterstützen nur einzelne
Nachrichten vom Typ
ADDR . Die Datenkanäle von Nucleus SE sind etwas flexibler und können in einigen Fällen eine nützliche Alternative zu Warteschlangen sein. Kanäle werden in den nächsten beiden Artikeln dieser Reihe behandelt.
Nucleus SE unterstützt auch Nachrichtenwarteschlangen mit variabler Länge, die nur die maximale Nachrichtenlänge während der Erstellung angeben. Variable Nachrichtenlängen werden von Nucleus SE nicht unterstützt
Warteschlangengröße
In Nucleus SE beträgt die maximale Anzahl von Nachrichten in einer Warteschlange 256, da alle Variablen und Konstanten vom Typ
U8 sind . Nucleus RTOS unterliegt keinen solchen Einschränkungen.
Nicht realisierte API-Aufrufe
Nucleus RTOS unterstützt zehn Warteschlangenverwaltungsaufrufe. Von diesen sind vier nicht in Nucleus SE implementiert. Details zu diesen Aufrufen sowie die Gründe für eine solche Entscheidung finden Sie in diesem Artikel oben im Abschnitt "Nicht realisierte API-Aufrufe".
Im nächsten Artikel werden Datenübertragungskanäle erläutert.
Über den Autor: Colin Walls ist seit über dreißig Jahren in der Elektronikindustrie tätig und widmet sich die meiste Zeit der Firmware. Heute ist er Firmware-Ingenieur bei Mentor Embedded (einer Abteilung von Mentor Graphics). Colin Walls spricht häufig auf Konferenzen und Seminaren, Autor zahlreicher technischer Artikel und zweier Bücher über Firmware. Lebt in Großbritannien.
Colins professioneller
Blog , E-Mail: colin_walls@mentor.com.