Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Ingebed

Semaphores:nutsvoorzieningen en datastructuren


Bekijk de RTOS Revealed-serie

Dit artikel gaat verder met de blik op semaforen.

Semaphore Utility Services

Nucleus RTOS heeft vier API-aanroepen die hulpprogramma's bieden die zijn gekoppeld aan semaforen:reset semafoor, retourneer informatie over een semafoor, retourneer het aantal semaforen in de applicatie en retourneer verwijzingen naar alle semaforen in de applicatie. De eerste drie hiervan zijn geïmplementeerd in Nucleus SE.

Een semafoor resetten

Deze API-aanroep herstelt de semafoor naar de oorspronkelijke, ongebruikte staat. Deze API-functie is ongebruikelijk, vergeleken met de functie die beschikbaar is voor andere kernelobjecten, omdat het, hoewel het een reset is, niet simpelweg de teller initialiseert naar de opstartwaarde; in de oproep wordt een nieuwe initiële telling gegeven. Alle taken die op de semafoor waren onderbroken, worden hervat en ontvangen een retourcode van NUSE_SEMAPHORE_WAS_RESET (in Nucleus SE, of NU_SEMAPHORE_RESET met Nucleus RTOS).

Nucleus RTOS API-aanroep voor het resetten van een semafoor

Serviceoproep prototype:

STATUS NU_Reset_Semaphore(NU_SEMAPHORE  *semafoor,
UNSIGNED initial_count);

Parameters:

semafoor – verwijzing naar door de gebruiker aangeleverd semafoorbesturingsblok

initial_count – de waarde waarop de teller van de semafoor moet worden ingesteld

Retourneren:

NU_SUCCESS – het gesprek is succesvol afgerond

NU_INVALID_SEMAPHORE – de semafoorwijzer is niet geldig

Nucleus SE API-aanroep voor het resetten van een semafoor

Deze API-aanroep ondersteunt de belangrijkste functionaliteit van de Nucleus RTOS API.

Serviceoproep prototype:

STATUS NUSE_Semaphore_Reset(NUSE_SEMAPHORE semafoor,
U8 initial_count);

Parameters:

semafoor – de index (ID) van de te resetten semafoor

initial_count – de waarde waarop de teller van de semafoor moet worden ingesteld

Retourneren:

NUSE_SUCCESS – het gesprek is succesvol afgerond

NUSE_INVALID_SEMAPHORE – de semafoorindex is niet geldig

Nucleus SE Implementatie van Semaphore Reset

De belangrijkste taak van de NUSE_Semaphore_Reset() API-functie - na parametercontrole - is om eenvoudig de juiste invoer in te stellen in NUSE_Semaphore_Counter[] naar de opgegeven beginwaarde.

Wanneer blokkeren is ingeschakeld, is verdere code vereist om taken te deblokkeren:

terwijl (NUSE_Semaphore_Blocking_Count[semafoor] !=0){ U8 index; /* controleer of er taken zijn geblokkeerd */ /* op deze semafoor */ for (index=0; index 

Elke taak die op de semafoor wordt onderbroken, wordt gemarkeerd als "gereed" met een onderbrekingsretourcode van NUSE_SEMAPHORE_WAS_RESET . Nadat dit proces is voltooid en de Priority-planner in gebruik is, wordt er een aanroep gedaan naar NUSE_Reschedule() , aangezien een of meer taken met een hogere prioriteit mogelijk gereed zijn en moeten worden uitgevoerd.

Semaphore-informatie

Deze service call verkrijgt een selectie van informatie over een semafoor. De Nucleus SE-implementatie verschilt van Nucleus RTOS doordat deze minder informatie retourneert, omdat objectnaamgeving en volgorde opschorten niet worden ondersteund en taakonderbreking mogelijk niet is ingeschakeld.

Nucleus RTOS API-oproep voor semafoorinformatie

Serviceoproep prototype:

STATUS NU_Semaphore_Information(NU_SEMAPHORE *semafoor,
CHAR *name, UNSIGNED *current_count, OPTION *suspend_type,
UNSIGNED *tasks_waiting, NU_TASK **first_task);

Parameters:

semafoor – pointer boven het controleblok van de semafoor waarover informatie wordt gevraagd

naam – verwijzing naar een bestemmingsgebied van 8 tekens voor de naam van de semafoor; dit is inclusief ruimte voor de nulterminator

current_count – een pointer naar een variabele, die de huidige waarde van de semafoorteller zal ontvangen

suspend_type – pointer naar een variabele die het opschortingstype van de taak bevat; geldige typen taakonderbreking zijn NU_FIFO en NU_PRIORITY

tasks_waiting – een verwijzing naar een variabele die het aantal taken zal ontvangen die op deze semafoor zijn geschorst

first_task – een verwijzing naar een variabele van het type NU_TASK die een verwijzing naar het controleblok van de eerste onderbroken taak zal ontvangen

Retourneren:

NU_SUCCESS – het gesprek is succesvol afgerond

NU_INVALID_SEMAPHORE – de semafoorwijzer is niet geldig

Nucleus SE API-oproep voor semafoorinformatie

Deze API-aanroep ondersteunt de belangrijkste functionaliteit van de Nucleus RTOS API.

Serviceoproep prototype:

STATUS NUSE_Semaphore_Information(NUSE_SEMAPHORE semafoor,
U8 *current_count, U8 *tasks_waiting, NUSE_TASK *first_task);

Parameters:

semafoor – de index van de semafoor waarover informatie wordt gevraagd

current_count – een pointer naar een variabele, die de huidige waarde van de semafoorteller zal ontvangen

tasks_waiting – een verwijzing naar een variabele die het aantal taken zal ontvangen die op deze semafoor zijn onderbroken (niets geretourneerd als taakonderbreking is uitgeschakeld)

first_task – een verwijzing naar een variabele van het type NUSE_TASK die de index van de eerste onderbroken taak zal ontvangen (niets geretourneerd als taakonderbreking is uitgeschakeld)

Retourneren:

NUSE_SUCCESS – het gesprek is succesvol afgerond

NUSE_INVALID_SEMAPHORE – de semafoorindex is niet geldig

NUSE_INVALID_POINTER – een of meer van de aanwijzerparameters is ongeldig

Nucleus SE-implementatie van semafoorinformatie

De implementatie van deze API-aanroep is vrij eenvoudig:

NUSE_CS_Enter(); *current_count =NUSE_Semaphore_Counter[semafoor];#if NUSE_BLOCKING_ENABLE *tasks_waiting =NUSE_Semaphore_Blocking_Count[semafoor]; if (NUSE_Semaphore_Blocking_Count [semafoor] !=0) { U8 index; for (index=0; index 

De functie retourneert de semafoorstatus. Als het blokkeren van API-aanroepen is ingeschakeld, wordt het aantal wachtende taken en de index van de eerste geretourneerd (anders worden deze twee parameters op 0 gezet).

Het aantal semaforen verkrijgen

Deze serviceaanroep retourneert het aantal semaforen dat in de toepassing is geconfigureerd. Terwijl dit in Nucleus RTOS in de loop van de tijd zal variëren en de geretourneerde waarde het huidige aantal semaforen vertegenwoordigt, wordt in Nucleus SE de geretourneerde waarde ingesteld tijdens het bouwen en kan deze niet veranderen.

Nucleus RTOS API-oproep voor semafoortelling

Serviceoproep prototype:

UNSIGNED NU_Established_Semaphores(VOID);

Parameters:

Geen

Retourneren:

Het aantal aangemaakte semaforen in de applicatie

Nucleus SE API-aanroep voor semafoortelling

Deze API-aanroep ondersteunt de belangrijkste functionaliteit van de Nucleus RTOS API.

Serviceoproep prototype:

U8 NUSE_Semaphore_Count(void);

Parameters:

Geen

Retourneren:

Het aantal geconfigureerde semaforen in de applicatie

Nucleus SE-implementatie van semafoortelling

De implementatie van deze API-aanroep is bijna triviaal eenvoudig:de waarde van de #define symbool NUSE_SEMAPHORE_NUMBER wordt geretourneerd.

Ga verder naar pagina twee:“Datastructuren”>>


Ingebed

  1. De voor- en nadelen van cloud versus interne services
  2. Microsoft Azure' Blockchain Token en Data Management Services
  3. termen en concepten voor digitaal geheugen
  4. C#-variabelen en (primitieve) gegevenstypen
  5. Structuren en klassen in C++
  6. Mailboxen:introductie en basisservices
  7. Semaphores:introductie en basisdiensten
  8. Event flag-groepen:nutsvoorzieningen en datastructuren
  9. Event flag-groepen:introductie en basisservices
  10. Wachtrijen:introductie en basisservices
  11. Swissbit:op hardware gebaseerde beveiligingsoplossingen om gegevens en apparaten te beschermen