Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Integrado

Semáforos:serviços utilitários e estruturas de dados


Veja a série RTOS Revelado

Este artigo continua a examinar os semáforos.

Serviços utilitários de semáforo

O Nucleus RTOS tem quatro chamadas API que fornecem funções utilitárias associadas aos semáforos:redefinir o semáforo, retornar informações sobre um semáforo, retornar o número de semáforos no aplicativo e retornar ponteiros para todos os semáforos no aplicativo. Os três primeiros são implementados no Nucleus SE.

Redefinindo um Semáforo

Esta chamada de API restaura o semáforo ao seu estado inicial não utilizado. Esta função da API é incomum, comparada com aquela disponível para outros objetos do kernel, pois, embora seja uma reinicialização, ela simplesmente não inicializa seu contador com o valor de inicialização; uma nova contagem inicial é fornecida na chamada. Todas as tarefas que foram suspensas no semáforo são retomadas e recebem um código de retorno de NUSE_SEMAPHORE_WAS_RESET (em Nucleus SE, ou NU_SEMAPHORE_RESET com Nucleus RTOS).

Chamada da API Nucleus RTOS para redefinir um semáforo

Protótipo de chamada de serviço:


STATUS NU_Reset_Semaphore (NU_SEMAPHORE * semáforo,
UNSIGNED initial_count);

Parâmetros:

semáforo - ponteiro para bloco de controle de semáforo fornecido pelo usuário

initial_count - o valor para o qual o contador do semáforo deve ser definido

Retorna:

NU_SUCCESS - a chamada foi completada com sucesso

NU_INVALID_SEMAPHORE - o ponteiro do semáforo não é válido

Chamada de Nucleus SE API para redefinição de um semáforo

Esta chamada de API oferece suporte à funcionalidade principal da API Nucleus RTOS.

Protótipo de chamada de serviço:

STATUS NUSE_Semaphore_Reset (NUSE_SEMAPHORE semáforo,
U8 initial_count);

Parâmetros:

semáforo - o índice (ID) do semáforo a ser redefinido

initial_count - o valor para o qual o contador do semáforo deve ser definido

Retorna:

NUSE_SUCCESS - a chamada foi completada com sucesso

NUSE_INVALID_SEMAPHORE - o índice do semáforo não é válido

Implementação do Nucleus SE do Semaphore Reset

A principal tarefa de NUSE_Semaphore_Reset () A função API - após a verificação do parâmetro - é simplesmente definir a entrada apropriada em NUSE_Semaphore_Counter [] ao valor inicial fornecido.

Quando o bloqueio está habilitado, mais código é necessário para desbloquear as tarefas:
 while (NUSE_Semaphore_Blocking_Count [semáforo]! =0) {índice U8; / * verificar se alguma tarefa está bloqueada * / / * neste semáforo * / for (index =0; index  
Cada tarefa suspensa no semáforo é marcada como “pronta” com um código de retorno de suspensão de NUSE_SEMAPHORE_WAS_RESET . Após a conclusão desse processo, se o agendador de prioridade estiver em uso, uma chamada é feita para NUSE_Reschedule () , já que uma ou mais tarefas de prioridade mais alta podem ter sido preparadas e precisam ser executadas.

Informações do semáforo

Esta chamada de serviço obtém uma seleção de informações sobre um semáforo. A implementação do Nucleus SE difere do Nucleus RTOS porque retorna menos informações, pois a nomenclatura de objetos e a ordem de suspensão não são suportadas e a suspensão de tarefas pode não estar ativada.

Chamada de Nucleus RTOS API para informações de semáforo

Protótipo de chamada de serviço:

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


Parâmetros:

semáforo - ponteiro para cima do bloco de controle do semáforo sobre a qual a informação está sendo solicitada

nome - ponteiro para uma área de destino de 8 caracteres para o nome do semáforo; isso inclui espaço para o terminador nulo

current_count - um ponteiro para uma variável, que receberá o valor atual do contador do semáforo

suspend_type - ponteiro para uma variável que contém o tipo de suspensão da tarefa; os tipos de suspensão de tarefa válidos são NU_FIFO e NU_PRIORITY

tasks_waiting - um ponteiro para uma variável que receberá o número de tarefas suspensas neste semáforo

first_task - um ponteiro para uma variável do tipo NU_TASK que receberá um ponteiro para o bloco de controle da primeira tarefa suspensa

Retorna:

NU_SUCCESS - a chamada foi completada com sucesso

NU_INVALID_SEMAPHORE - o ponteiro do semáforo não é válido

Chamada de API Nucleus SE para informações de semáforo

Esta chamada de API oferece suporte à funcionalidade principal da API Nucleus RTOS.

Protótipo de chamada de serviço:

STATUS NUSE_Semaphore_Information (semáforo NUSE_SEMAPHORE,
U8 * current_count, U8 * tasks_waiting, NUSE_TASK * first_task);

Parâmetros:

semáforo - o índice do semáforo sobre o qual as informações estão sendo solicitadas

current_count - um ponteiro para uma variável, que receberá o valor atual do contador do semáforo

tasks_waiting - um ponteiro para uma variável que receberá o número de tarefas suspensas neste semáforo (nada retornado se a suspensão da tarefa for desativada)

first_task - um ponteiro para uma variável do tipo NUSE_TASK que receberá o índice da primeira tarefa suspensa (nada retornado se a suspensão da tarefa for desativada)

Retorna:

NUSE_SUCCESS - a chamada foi completada com sucesso

NUSE_INVALID_SEMAPHORE - o índice do semáforo não é válido

NUSE_INVALID_POINTER - um ou mais dos parâmetros do ponteiro são inválidos

Implementação Nucleus SE de Informações de Semáforo

A implementação desta chamada de API é bastante direta:
 NUSE_CS_Enter (); * current_count =NUSE_Semaphore_Counter [semáforo]; # if NUSE_BLOCKING_ENABLE * tasks_waiting =NUSE_Semaphore_Blocking_Count [semáforo]; if (NUSE_Semaphore_Blocking_Count [semáforo]! =0) {índice U8; para (índice =0; índice  
A função retorna o status do semáforo. Então, se o bloqueio de chamadas de API estiver habilitado, o número de tarefas em espera e o índice da primeira são retornados (caso contrário, esses dois parâmetros são definidos como 0).

Obtenção do número de semáforos

Esta chamada de serviço retorna o número de semáforos configurados no aplicativo. Enquanto no Nucleus RTOS isso irá variar ao longo do tempo e o valor retornado representará o número atual de semáforos, no Nucleus SE o valor retornado é definido no momento da construção e não pode ser alterado.

Chamada de Nucleus RTOS API para contagem de semáforo

Protótipo de chamada de serviço:

UNSIGNED NU_Established_Semaphores (VOID);

Parâmetros:

Nenhum

Retorna:

O número de semáforos criados no aplicativo

Chamada de API Nucleus SE para contagem de semáforo

Esta chamada de API oferece suporte à funcionalidade principal da API Nucleus RTOS.

Protótipo de chamada de serviço:

U8 NUSE_Semaphore_Count (vazio);

Parâmetros:

Nenhum

Retorna:

O número de semáforos configurados no aplicativo

Implementação de Núcleo SE de Contagem de Semáforo

A implementação desta chamada de API é quase trivialmente simples:o valor de #define símbolo NUSE_SEMAPHORE_NUMBER é devolvido.

Continue para a página dois:“Estruturas de dados”>>

Integrado

  1. Os prós e contras da nuvem versus serviços internos
  2. Token Blockchain e Serviços de Gerenciamento de Dados do Microsoft Azure
  3. Termos e conceitos de memória digital
  4. Variáveis ​​C# e tipos de dados (primitivos)
  5. Estruturas e classes em C ++
  6. Caixas de correio:introdução e serviços básicos
  7. Semáforos:introdução e serviços básicos
  8. Grupos de sinalizadores de evento:serviços de utilidade e estruturas de dados
  9. Grupos de sinalizadores de evento:introdução e serviços básicos
  10. Filas:introdução e serviços básicos