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

Signalen

In deze RTOS Revealed ga ik kijken naar signalen, de eenvoudigste methode voor communicatie tussen taken die wordt ondersteund door Nucleus SE. Ze bieden een zeer goedkope manier om eenvoudige berichten tussen taken door te geven.

Signalen gebruiken

Signalen verschillen van alle andere typen kernelobjecten doordat ze niet autonoom zijn - signalen worden geassocieerd met taken en hebben geen onafhankelijk bestaan. Als signalen zijn geconfigureerd voor een toepassing, heeft elke taak een set van acht signaalvlaggen.

Elke taak kan de signalen van een andere taak instellen. Alleen de eigenaartaak kan de signalen lezen. Het lezen is destructief - d.w.z. de signalen worden gewist door het leesproces. Geen enkele andere taak kan de signalen van een taak lezen of wissen.

Er is een faciliteit in Nucleus RTOS waarmee een taak een functie kan nomineren die wordt uitgevoerd wanneer een andere taak een of meer van zijn signaalvlaggen instelt. Dit is enigszins analoog aan een interruptserviceroutine. Deze mogelijkheid wordt niet ondersteund in Nucleus SE; taken moeten hun signaalvlaggen expliciet ondervragen.

Signalen configureren

Zoals met de meeste aspecten van Nucleus SE, wordt de configuratie van signalen voornamelijk bepaald door #define uitspraken in nuse_config.h . De belangrijkste instelling is NUSE_SIGNAL_SUPPORT , die de faciliteit mogelijk maakt (voor alle taken in de applicatie). Er is geen sprake van het specificeren van het aantal signalen - er is gewoon een set van acht vlaggen voor elke taak in de applicatie.

Het instellen van deze vrijgaveparameter is de "mastervrijgave" voor signalen. Dit zorgt ervoor dat een datastructuur wordt gedefinieerd en dienovereenkomstig wordt gedimensioneerd, waarover later in dit artikel meer. Het activeert ook de instellingen voor het inschakelen van de API.

API ingeschakeld

Elke API-functie (serviceaanroep) in Nucleus SE heeft een activerende #define symbool in nuse_config.h . Voor signalen zijn dit:

NUSE_SIGNALS_SENDNUSE_SIGNALS_RECEIVE 

Beide zijn standaard ingesteld op FALSE , waardoor elke serviceoproep wordt uitgeschakeld en het opnemen van implementatiecodes wordt voorkomen. Om signalen voor een toepassing te configureren, moet u de API-aanroepen selecteren die u wilt gebruiken en hun activeringssymbolen instellen op TRUE .

Hier is een uittreksel van de standaard nuse_config.h bestand:

#define NUSE_SIGNAL_SUPPORT FALSE /* Schakelt ondersteuning voor signalen in */#define NUSE_SIGNALS_SEND FALSE /* Serviceoproep inschakelen */#define NUSE_SIGNALS_RECEIVE FALSE /* Serviceoproep inschakelen */ 

Er zal een compileerfout optreden als een signaal-API-functie is ingeschakeld en de signaalfunctie niet is ingeschakeld. Als uw code een API-aanroep gebruikt, die niet is ingeschakeld, zal er een linktime-fout optreden, omdat er geen implementatiecode in de applicatie is opgenomen. Natuurlijk is het inschakelen van de twee API-functies enigszins overbodig, omdat het geen zin zou hebben om signaalondersteuning in te schakelen en deze API's niet beschikbaar te hebben. De enablers zijn inbegrepen voor compatibiliteit met andere Nucleus SE-functies.

Signaleert serviceoproepen

Nucleus RTOS ondersteunt vier service calls die horen bij signalen, die de volgende functionaliteit bieden:

  • Stuur signalen naar een gespecificeerde taak. Geïmplementeerd door NUSE_Signals_Send() in Nucleus SE.

  • Ontvang signalen. Geïmplementeerd door NUSE_Signals_Receive() in Nucleus SE.

  • Registreer een signaalhandler. Niet geïmplementeerd in Nucleus SE.

  • Schakel (controle)signalen in/uit. Niet geïmplementeerd in Nucleus SE.

De implementatie van elk van deze service calls wordt in detail onderzocht.

Signalen verzenden en ontvangen van diensten

De fundamentele bewerkingen die kunnen worden uitgevoerd op de reeks signalen van een taak, zijn het verzenden van gegevens (wat door elke taak kan worden gedaan) en het lezen van gegevens ervan (en dus het wissen van de gegevens, wat alleen door de eigenaar mag worden gedaan) . Nucleus RTOS en Nucleus SE bieden elk twee basis-API-aanroepen voor deze bewerkingen, die hier worden besproken.

Omdat signaalvlaggen bits zijn, kunnen ze het best worden gevisualiseerd als binaire getallen. Aangezien standaard C historisch gezien geen weergave van binaire constanten ondersteunt (alleen octaal en hexadecimaal), bevat de Nucleus SE-distributie een nuttig headerbestand - nuse_binary.h – die #define . bevat symbolen van de vorm b01010101 voor alle 256 8-bits waarden. Hier is een uittreksel uit de nuse_binary.h bestand:

#define b00000000 ((U8) 0x00)#define b00000001 ((U8) 0x01)#define b00000010 ((U8) 0x02)#define b00000011 ((U8) 0x03)#define b00000100 ((U8) 0x04)#define b00000101 ((U8) 0x05)

Signalen verzenden

Elke taak kan signalen naar elke andere taak in de applicatie sturen. Het verzenden van signalen omvat het instellen van een of meer van de signaalvlaggen. Dit is een OF-bewerking die geen effect heeft op eerder ingestelde vlaggen.

Nucleus RTOS API-oproep voor het verzenden van signalen

Serviceoproep prototype:

STATUS NU_Send_Signals(NU_TASK *taak, NIET-ONDERTEKENDE signalen);

Parameters:

taak – pointer naar controleblok van de taak die eigenaar is van de signaalvlaggen die moeten worden ingesteld

signalen – de waarde van de in te stellen signaalvlaggen

Retourneren:

NU_SUCCESS – het gesprek is succesvol afgerond

NU_INVALID_TASK – de taakaanwijzer is ongeldig

Nucleus SE API-oproep voor het verzenden van signalen

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

Serviceoproep prototype:

STATUS NUSE_Signals_Send(NUSE_TASK taak, U8 signalen);

Parameters:

taak – de index (ID) van de taak die eigenaar is van de in te stellen signaalvlaggen

signalen – de waarde van de in te stellen signaalvlaggen

Retourneren:

NUSE_SUCCESS – het gesprek is succesvol afgerond

NUSE_INVALID_TASK – de taakindex is ongeldig

Nucleus SE-implementatie van het verzenden van signalen

Hier is de volledige code voor de NUSE_Signals_Send() functie:

STATUS NUSE_Signals_Send(NUSE_TASK taak, U8 signalen){ #if NUSE_API_PARAMETER_CHECKING if (taak>=NUSE_TASK_NUMBER) { retourneer NUSE_INVALID_TASK; } #endif NUSE_CS_Enter(); NUSE_Task_Signal_Flags[task] |=signalen; NUSE_CS_Exit(); retourneer NUSE_SUCCESS;} 

De code is heel eenvoudig. Na elke parametercontrole worden de signaalwaarden in de signaalvlaggen van de gespecificeerde taak geplaatst. Taakblokkering is niet relevant voor signalen.

Signalen ontvangen

Een taak mag alleen zijn eigen set signaalvlaggen lezen. Het proces om ze te lezen is destructief; d.w.z. het resulteert er ook in dat de vlaggen worden gewist.

Nucleus RTOS API-oproep voor het ontvangen van signalen

Serviceoproep prototype:

UNSIGNED NU_Receive_Signals(VOID);

Parameters:geen

Retourneert:de waarde van de signalenmarkeringen

Nucleus SE API-oproep voor het ontvangen van signalen

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

Serviceoproep prototype:

U8 NUSE_Signals_Receive(void);

Parameters:geen

Retourneert:de waarde van de signaalvlaggen

Nucleus SE-implementatie van ontvangstsignalen

Hier is de volledige code voor de NUSE_Signals_Receive() functie:

U8 NUSE_Signals_Receive(void){ U8 signalen; NUSE_CS_Enter(); signalen =NUSE_Task_Signal_Flags [NUSE_Task_Active]; NUSE_Task_Signal_Flags [NUSE_Task_Active] =0; NUSE_CS_Exit(); retoursignalen;} 

De code is heel eenvoudig. De vlagwaarde wordt gekopieerd, de oorspronkelijke waarde wordt gewist en de kopie wordt geretourneerd door de API-functie. Taakblokkering is niet relevant voor signalen.


Ingebed

  1. Signalen
  2. Rutronik:ultra-low-power draadloze MCU's van Redpine Signals
  3. Rutronik:multiprotocol draadloze SoC's en modules van Redpine Signals
  4. Het magnetisme van de kern van een enkel atoom detecteren
  5. Kunstmatig neuraal netwerk kan draadloze communicatie verbeteren
  6. Nieuw flexibel apparaat kan wifi-signalen omzetten in elektriciteit
  7. Nieuw circuit detecteert zwakste radiosignalen toegestaan ​​door kwantummechanica
  8. Lasers kunnen nu microgolven uitzenden en externe radiofrequentiesignalen ontvangen
  9. Nieuw algoritme combineert naadloos twee audiosignalen
  10. Richtlijnen voor RF- en magnetronontwerp
  11. Radiosignalen Afbeelding verborgen en versnellende objecten