Nucleus Plus



Ein bereits deutlich umfangreicheres, aber auch größeres, Echtzeit-Betriebssystem ist NUCLEUS PLUS von Accelerated Technology Inc. Da es Royality-Free aber eben nicht FREE ist, kann hier nur eine kleine Funktionsübersicht (white-paper) wiedergegeben werden.

Eines der möglichen Erweiterungsmodule ist NUCLEUS FILE, durch das ein MS-DOS 4.0 kompatibles File-System auf unterschiedlichsten Speichermedien aufgebaut werden kann.


Kerneldienste des NUCLEUS PLUS (Kurzform)
Die hier aufgeführte Funktionsübersicht dient einzig als Kurzübersicht. Für detailierte Informationen ist einzig das "Reference Manual" zuständig.


Task-Control:

NU_Change_Preemption

Preemption des laufenden Tasks ändern

NU_Change_Priority

Priorität eines Tasks ändern

NU_Change_Time_Slice

Time-Slice eines Tasks ändern

NU_Check_Stack

Prüft den Stack des laufenden Tasks

NU_Create_Task

Anlegen eines Tasks

NU_Current_Task_Pointer

Gibt Zeiger auf TCB des laufenden Tasks

NU_Delete_Task

Löscht TCB eines Tasks aus der Liste

NU_Established_Tasks

Gibt Anzahl Tasks zurück

NU_Relinquish

Erlaubt anderen Tasks mit gleicher Priorität zu laufen bis time-slice

NU_Reset_Task

Neustart eines beendeten oder terminierten Tasks

NU_Resume_Task

Wiederaufwecken eines suspendierten Tasks

NU_Sleep

Legt laufenden Task für bestimmte Zeit schlafen

NU_Suspend_Task

Suspendiert einen Task

NU_Task_Information

Gibt Informationen über einen Tasks zurück

NU_Task_Pointers

Gibt Liste aktiver Tasks mit TCB's zurück

NU_Terminate_Task

Terminiert einen Task



Dynamic-Memory:

NU_Allocate_Memory

Allokieren von Speicher

NU_Create_Memory_Pool

Erzeugen des Speicherpools

NU_Deallocate_Memory

Freigeben von allokiertem Speicher

NU_Delete_Memory_Pool

Löschen eines erzeugten Speicherpools

NU_Established_Memory_Pools

Gibt Anzahl der erzeugten Speicherpools

NU_Memory_Pool_Information

Gibt Informationen über einen Speicherpool

NU_Memory_Pool_Pointers

Gibt Liste belegter Speicherblöcke



Partition-Memory:

NU_Allocate_Partition

Allokieren einer Speicherpartition

NU_Create_Parition_Pool

Erzeugen eines Partitionspools

NU_Deallocate_Partition

Freigeben einer allokiertem Speicherpartition

NU_Delete_Partition_Pool

Löschen eines erzeugten Patitionspools

NU_Established_Partition_Pools

Gibt Anzahl der erzeugten Patitionspools

NU_Partition_Pool_Information

Gibt Informationen über einen Patitionspool

NU_Partition_Pool_Pointers

Gibt Liste belegter Partitionsblöcke



Mailboxes:

NU_Broadcast_To_Mailbox

Sendet Daten an alle Empfänger dieser Mailbox

NU_Create_Mailbox

Erzeuge Mailbox

NU_Delete_Mailbox

Löscht eine erzeugte Mailbox

NU_Established_Mailboxes

Gibt Anzahl erzeugter Mailboxen

NU_Mailbox_Information

Gibt Informationen über eine Mailbox

NU_Mailbox_Pointers

Gibt Liste bekannter Mailboxen

NU_Receive_From_Mailbox

Wartet auf Daten aus einer Mailbox

NU_Reset_Mailbox

Setzt den MCB zurück

NU_Send_To_Mailbox

Sendet Daten an ersten/höchstpriorisierten Empfänger dieser Mailbox



Queues:

NU_Broadcast_To_Queue

Sendet Daten an alle Empfänger dieser Queue

NU_Create_Queue

Erzeugt Queue

NU_Delete_Queue

Löscht eine erzeugte Queue

NU_Established_Queues

Gibt Anzahl erzeugter Queues

NU_Queue_Information

Gibt Informationen über eine Queue

NU_Queue_Pointers

Gibt Liste bekannter Queues

NU_Receive_From_Queue

Wartet auf Daten aus einer Queue

NU_Reset_Queue

Setzt den QCB zurück

NU_Send_To_Front_Of_Queue

Sendet Daten an den Anfang einer Queue

NU_Send_To_Queue

Sendet Daten in eine Queue



Pipes:

NU_Broadcast_To_Pipe

Sendet Daten an alle Empfänger dieser Pipe

NU_Create_Pipe

Erzeugt Pipe

NU_Delete_Pipe

Löscht eine erzeugte Pipe

NU_Established_Pipes

Gibt Anzahl erzeugter Pipes

NU_Pipe_Information

Gibt Informationen über eine Pipe

NU_Pipe_Pointers

Gibt Liste bekannter Pipes

NU_Receive_From_Pipe

Wartet auf Daten aus einer Pipe

NU_Reset_Pipe

Setzt den PCB zurück

NU_Send_To_Front_Of_Pipe

Sendet Daten an den Anfang einer Pipe

NU_Send_To_Pipe

Sendet Daten in eine Pipe



Semaphores:

NU_Create_Semaphore

Erzeugt Semaphore

NU_Delete_Semaphore

Löscht eine erzeugte Semaphore

NU_Established_Semaphores

Gibt Anzahl erzeugter Semaphoren

NU_Obtain_Semaphore

Belegt eine Semaphore

NU_Release_Semaphore

Freigabe einer belegten Semaphore

NU_Reset_Semaphore

Setzt den SCB zurück

NU_Semaphore_Information

Gibt Informationen über eine Semaphore

NU_Semaphore_Pointers

Gibt Liste bekannter Semaphoren



Event-Groups:

NU_Create_Event_Group

Erzeugt Eventgruppe

NU_Delete_Event_Group

Löscht eine erzeugte Evengruppe

NU_Established_Event_Groups

Gibt Anzahl erzeugter Eventgruppen

NU_Event_Group_Information

Gibt Informationen über eine Eventgruppe

NU_Event_Group_Pointers

Gibt Liste bekannter Eventgruppen

NU_Retrieve_Events

Wartet auf das Eintreffen eines oder mehrere Events einer Eventgruppe

NU_Set_Events

Setzt ein/mehrere Events einer Evengruppe



Signals:

NU_Control_Signals

Ausmaskieren von Signalen

NU_Receive_Signals

Abfrage der Signale und Löschen

NU_Register_Signal_Handler

Erzeugt Signal-Handler der, gestartet wird, sobald das entsprechende Signal gesendet wurde

NU_Send_Signals

Sendet Signal an einen Task



Timers:

NU_Control_Timer

Enable/disable eines Timers

NU_Create_Timer

Erzeugt einen Timer

NU_Delete_Timer

Löscht einen erzeugten Timer

NU_Established_Timers

Gibt Anzahl erzeugter Timer

NU_Reset_Timer

Setzt den Timer-CB zurück

NU_Retrieve_Clock

System-Timer abfragen

NU_Set_Clock

System-Timer setzten

NU_Timer_Information

Gibt Informationen über einen Timer

NU_Timer_Pointers

Gibt Liste bekannter Timer



Interrupts:

NU_Activiate_HISR

Startet erzeugte HISR (nach Ende LISR)

NU_Control_Interrupts

Enable/disable(/Level) Interrupts

NU_Create_HISR

Erzeuge eine HISR

NU_Current_HISR_Pointer

Gibt Zeiger auf TCB der laufenden HISR

NU_Delete_HISR

Löscht eine erzeugte HISR

NU_Established_HISRs

Gibt Anzahl erzeugter HISR's

NU_HISR_Information

Gibt Informationen über eine HISR

NU_HISR_Pointers

Gibt Liste bekannter HISR's

NU_Local_Control_Interrupts

Eanble/disable(/Level) Interrupts aber nur bis zum nächsten Context-Wechsel

NU_Register_LISR

Erzeugt eine LISR durch Eintrag in Vectortabelle

NU_Setup_Vector

Eintragung einer unmanaged-ISR (Assembler-ISR)



System-Diagnostics:

NU_Disable_History_Saving

Disable History-schreiben

NU_Enable_History_Saving

Enable History-schreiben

NU_Licence_Information

Gibt Lizenz-Information

NU_Make_History_Entry

Schreibt Eintrag in History

NU_Release_Information

Gibt Release-Information

NU_Retrieve_History_Entry

Gibt ersten Histor-Eintrag und löscht diesen in der Tabelle



I/O-Drivers:

NU_Create_Driver

Erzeugt einen I/O-Treiber

NU_Delete_Driver

Löscht einen erzeugten I/O-Treiber

NU_Driver_Pointers

Gibt Liste bekannter I/O-Treiber

NU_Established_Drivers

Gibt Anzahl erzeugter I/O-Treiber

NU_Protect

Schutz von Teilen über einen Protector

NU_Request_Driver

Sendet die request-struktur an einen I/O-Treiber

NU_Resume_Driver

Weckt einen Task wieder auf, der durch "Suspend_Driver" suspendiert ist

NU_Suspend_Driver

Suspendiert den Task, der den I/O-Treiber verwendet

NU_Unprotect

Schutz über einen Protector aufheben



Error-Codes:

Name

Decimal_Value

Hex_Value

NU_END_OF_LOG

-1

FFFFFFFF

NU_GROUP_DELETED

-2

FFFFFFFE

NU_INVALID_DELETE

-3

FFFFFFFD

NU_INVALID_DRIVER

-4

FFFFFFFC

NU_INVALID_ENABLE

-5

FFFFFFFB

NU_INVALID_ENTRY

-6

FFFFFFFA

NU_INVALID_FUNCTION

-7

FFFFFFF9

NU_INVALID_GROUP

-8

FFFFFFF8

NU_INVALID_HISR

-9

FFFFFFF7

NU_INVALID_MAILBOX

-10

FFFFFFF6

NU_INVALID_MEMORY

-11

FFFFFFF5

NU_INVALID_MESSAGE

-12

FFFFFFF4

NU_INVALID_OPERATION

-13

FFFFFFF3

NU_INVALID_PIPE

-14

FFFFFFF2

NU_INVALID_POINTER

-15

FFFFFFF1

NU_INVALID_POOL

-16

FFFFFFF0

NU_INVALID_PREEMPT

-17

FFFFFFEF

NU_INVALID_PRIORITY

-18

FFFFFFEE

NU_INVALID_QUEUE

-19

FFFFFFED

NU_INVALID_RESUME

-20

FFFFFFEC

NU_INVALID_SEMAPHORE

-21

FFFFFFEB

NU_INVALID_SIZE

-22

FFFFFFEA

NU_INVALID_START

-23

FFFFFFE9

NU_INVALID_SUSPEND

-24

FFFFFFE8

NU_INVALID_TASK

-25

FFFFFFE7

NU_INVALID_TIMER

-26

FFFFFFE6

NU_INVALID_VECTOR

-27

FFFFFFE5

NU_MAILBOX_DELETED

-28

FFFFFFE4

NU_MAILBOX_EMPTY

-29

FFFFFFE3

NU_MAILBOX_FULL

-30

FFFFFFE2

NU_MAILBOX_RESET

-31

FFFFFFE1

NU_NO_MEMORY

-32

FFFFFFE0

NU_NO_MORE_LISRS

-33

FFFFFFDF

NU_NO_PARTITION

-34

FFFFFFDE

NU_NOT_DISABLED

-35

FFFFFFDD

NU_NOT_PRESENT

-36

FFFFFFDC

NU_NOT_REGISTERED

-37

FFFFFFDB

NU_NOT_TERMINATED

-38

FFFFFFDA

NU_PIPE_DELETED

-39

FFFFFFD9

NU_PIPE_EMPTY

-40

FFFFFFD8

NU_PIPE_FULL

-41

FFFFFFD7

NU_PIPE_RESET

-42

FFFFFFD6

NU_POOL_DELETED

-43

FFFFFFD5

NU_QUEUE_DELETED

-44

FFFFFFD4

NU_QUEUE_EMPTY

-45

FFFFFFD3

NU_QUEUE_FULL

-46

FFFFFFD2

NU_QUEUE_RESET

-47

FFFFFFD1

NU_SEMAPHORE_DELETED

-48

FFFFFFD0

NU_SEMAPHORE_RESET

-49

FFFFFFCF

NU_TIMEOUT

-50

FFFFFFCE

NU_UNAVAILABLE

-51

FFFFFFCD



Tip zu ASM-ISR's:

* Um Assembler-ISR's im Nucleus manuell zu integrieren (sogenannte "unmanaged-ISRs"), muß bei Einsprung in die ISR folgender Startcode implementiert werden: (Beispiel x86)

EXTRN _TCT_Interrupt_Context_Save : far EXTRN _TCT_Interrupt_Context_Restore : far ... ISR: push ax ; save the index mov ax,0Ch ; load the table-vector call far PTR _TCT_Interrupt_Context_Save push ds mov ax,_DATA ; set ASM-datasegment mov ds,ax ...

und am Ende der ISR:

... pop ds jmp far PTR _TCT_Interrupt_Context_Restore iret ; return (never used)





* Um aus Assembler-ISR's eine HISR (High-Interrupt-Service-Routine) zu rufen (installieren), muß in die ISR folgender Aufruf implementiert werden: (Beispiel x86)

EXTRN _TCT_Activate_HISR : far ... ... mov ax, SEG Demo_HISR ; get pointer to HISR-function lea bx, offset Demo_HISR push ax ; save on stack push bx call far PTR _TCT_Activate_HISR ; install this HISR as System-Task pop bx ; restore stack pop bx ...



Stand: 03/2001