ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
QUEUES E HOOK
FUNCTIONS
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Conceito de FIFO ( First In...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Queues são a principal form...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Elas podem ser usadas para ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Novos dados podem ser envia...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
Uma fila não pertence a nen...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Introdução
• Cada queue armazena um co...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Pequenas mensagens podem ser enviada...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Uma única queue pode ser usada para ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
As funções da API de queues permite um...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Lendo da Queue:
• Queues podem ter m...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Lendo do Queue:
Bloqueio de Queues
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Escrevendo na queue:
• A tarefa tent...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Escrevendo no queue:
Bloqueio de Que...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Normalmente os eventos são tratados ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueCreate
queue.h
Que...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
vQueueDelete
queue.h
voi...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
uxQueueSpacesAvailable
q...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
vQueueAddToRegistry
queu...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueOverwrite
queue.h
...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueuePeek
queue.h
BaseT...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
uxQueueMessagesWaitingFr...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueSendFromISR
queue....
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
Parâmetros:
• xQueue: O ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueSendToFrontFromISR...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
Parâmetros:
• xQueue: O ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueReceiveFromISR
que...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
Parâmetros:
• xQueue: O ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueIsQueueEmptyFromIS...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueIsQueueFullFromISR...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
xQueueOverwriteFromISR
q...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
API Functions
Parâmetros:
• xQueue: O ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Hook Functions
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Tick Interrupt
• Em um kernel preempti...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Tick interrupt (system tick ou clock...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Tick Interrupt
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
• Uma função de callback pode ser cham...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Tarefa Idle
• Ao se trabalhar com even...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Tarefas em Execução
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Idle Hook Function
• Função de callbac...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Implementação
• A função de Idle Hook ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Gerenciamento de Memória
• O FreeRTOS ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Alocação
• O FreeRTOS fornece 4 difere...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Malloc Failed Hook Function
• Os esque...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Malloc Failed Hook Function
• A Malloc...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Stack
• Região de memória onde são sal...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Stack Overflow Hook
• Dois mecanismos ...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Stack Overflow Hook
• Para ambos os mé...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
MÉTODO 1
• É selecionado quando config...
ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO
SISTEMAS OPERACIONAIS
Stack Overflow Hook
MÉTODO 2
• É selec...
Próximos SlideShares
Carregando em…5
×

Queues and Hook Functions

530 visualizações

Publicada em

Publicada em: Educação
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
530
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
25
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Queues and Hook Functions

  1. 1. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS QUEUES E HOOK FUNCTIONS
  2. 2. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Conceito de FIFO ( First In First Out ) onde os dados são escritos no fim e lidos no início.
  3. 3. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Queues são a principal forma de comunicação entre tarefas.
  4. 4. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Elas podem ser usadas para enviar mensagens entre tarefas e entre interrupções e tarefas.
  5. 5. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Novos dados podem ser enviados para o fim da fila ou ainda podem ser enviados para a frente.
  6. 6. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução Uma fila não pertence a nenhuma tarefa em específico.
  7. 7. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Introdução • Cada queue armazena um conjunto finito de itens (uxLenght); • Cada item do queue pode ter um tamanho fixo de bytes (uxItemSize); • Ambos “uxLenght” e “uxItemSize” são definidos no momento da criação do queue; • Escrever em uma queue significa copiar os dados byte a byte. Ler de uma queue significa cópia e remoção dos dados da queue. Se o elemento da queue for muito grande, o ideal é trabalhar com ponteiros.
  8. 8. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Pequenas mensagens podem ser enviadas diretamente para a queue ou lidas diretamente da queue através de variáveis. • O envio para uma queue deste modo permite substituir a variável que foi enviado para a queue. • Usar queues que passam dados por cópia não impede que elas também possam ser utilizadas para transmitir dados por referência. • Quando o tamanho de uma mensagem chegar a um ponto em que não é prático copiar toda a mensagem para a queue byte a byte, então são utilizados ponteiros. O ponteiro é copiado para o lugar da mensagem na queue. Introdução
  9. 9. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Uma única queue pode ser usada para receber diferentes tipos de mensagens e mensagens de vários locais. • Uma queue pode armazenar uma estrutura que tem um elemento que contém o tipo de mensagem, e um outro elemento que contém os dados da mensagem ou ainda um ponteiro para os dados da mensagem. • Os dados são interpretados depende do tipo de mensagem. • Por exemplo, isto é exatamente o que a tarefa que gerencia a pilha FreeRTOS + UDP IP é capaz de fazer. • Usa única fila para receber notificações de eventos do timer ARP, pacotes sendo recebidos do hardware Ethernet, os pacotes recebidos do aplicativo, a rede para baixo eventos, etc Introdução
  10. 10. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS As funções da API de queues permite um tempo de bloqueio que pode ser especificado caso uma das duas situações ocorram: • Lendo da Queue: • A tarefa esta aguardando um item da queue. A tarefa será colocada no estado Blocked até que os dados estejam disponíveis na fila ou até o tempo de bloqueio expirar (timeout de leitura). • Não consome tempo de CPU e outras tarefas podem ser executadas. • Uma tarefa esperando um item na queue é automaticamente colocada no estado Ready quando: • Um item é escrito na queue; • O timeout de leitura expira ; Bloqueio de Queues
  11. 11. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Lendo da Queue: • Queues podem ter mais de uma tarefa esperando a leitura de um item; • A tarefa de maior prioridade é passada para o estado Ready; • Se existir mais uma tarefa com a mesma prioridade, então a tarefa que esta esperando a mais tempo será passada para o estado Ready. Bloqueio de Queues
  12. 12. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Lendo do Queue: Bloqueio de Queues
  13. 13. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Escrevendo na queue: • A tarefa tenta escrever em uma queue cheia. A tarefa será colocada no estado Blocked até que haja espaço disponível na fila ou até o tempo de bloqueio expirar (timeout de escrita). • Não consome tempo de CPU e outras tarefas podem ser executadas. • Uma tarefa escrevendo um item na queue é colocada automaticamente no estado Ready quando: • O elemento é escrito na queue com sucesso; • O timeout de escrita expira; • Se a queue estiver cheia assim que surgir um espaço livre a tarefa de maior prioridade é colocada no estado Ready; • Se houver mais de uma tarefa bloqueada com a mesma prioridade aguardando, a tarefa que estiver a mais tempo será passada para o estado Ready.. Bloqueio de Queues
  14. 14. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Escrevendo no queue: Bloqueio de Queues
  15. 15. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Normalmente os eventos são tratados com interrupções dentro de uma rotina de tratamento de interrupção (ISR); • Queues são usados para comunicar eventos e transferir dados; • Portanto, o queue pode ser usado para transferir dados e deferir trabalho de uma interrupção para uma tarefa do RTOS; • Em interrupções use sempre as funções que terminam com FromISR(); Interrupções
  16. 16. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions
  17. 17. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueCreate queue.h QueueHandle_t xQueueCreate ( BaseType_t uxQueueLength, BaseType_t uxItemSize ); Retorno: Se a fila é criada com êxito, um identificador para a fila recém-criada é retornado. Se a fila não pode ser criada, é retornado 0. Parâmetros: • uxQueueLength: O número máximo de itens que a fila pode conter. • uxItemSize: O número de bytes de cada item na fila vai exigir.
  18. 18. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions vQueueDelete queue.h void vQueueDelete { QueueHandle_t xQueue }; Parâmetros: • xQueue - Um identificador para a fila para ser excluído. xQueueReset queue.h BaseType_t xQueueReset ( QueueHandle_t xQueue ); Parâmetros: • xQueue : o identificador da fila é passado, Retorna: Desde FreeRTOS V7.2.0 xQueueReset() sempre retorna pdPASS.
  19. 19. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions uxQueueSpacesAvailable queue.h BaseType_t uxQueueSpacesAvailable ( QueueHandle_t xQueue ); Parâmetros: • xQueue : O identificador da fila para ser consultado. Retorna: O número de espaços livres em uma fila. uxQueueMessagesWaiting queue.h BaseType_t uxQueueMessagesWaiting ( QueueHandle_t xQueue ); Parâmetros: • xQueue : O identificador da fila para ser consultado. Retorna : O número de mensagens disponíveis na fila.
  20. 20. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions vQueueAddToRegistry queue.h void vQueueAddToRegistry ( QueueHandle_t xQueue, char * pcQueueName ); Parâmetros: • xQueue: O identificador da fila em que o item será escrito. • pcQueueName: O nome a ser atribuído à fila. Esta é apenas uma sequência de texto usado para facilitar a depuração. vQueueUnregisterQueue queue.h vazio vQueueUnregisterQueue ( QueueHandle_t xQueue ); Parâmetros: • xQueue: O identificador da fila que será removida do registro.
  21. 21. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueOverwrite queue.h BaseType_t xQueueOverwrite ( QueueHandle_t xQueue, const void * pvItemToQueue ); Retorna: xQueueOverwrite() é uma macro que chama xQueueGenericSend(), e, portanto, tem os mesmos valores de retorno como xQueueSendToFront(). No entanto, pdPASS é o único valor que pode ser retornado porque xQueueOverwrite() escreve na fila, mesmo quando a fila já esta cheia. Parâmetros: • xQueue: O identificador da fila em que o item será escrito. • pvItemToQueue: Um ponteiro para o item que será colocado na fila.
  22. 22. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueuePeek queue.h BaseType_t xQueuePeek ( QueueHandle_t xQueue, void * pvBuffer, TickType_ t xTicksToWait ); Retorna: pdTRUE se o item foi recebido com êxito na fila, caso contrário pdFALSE. Parâmetros: • xQueue: O identificador da fila em que o item será escrito. • pvBuffer: Ponteiro para o buffer no qual o item recebido será copiado. • xTicksToWait: A quantidade máxima de tempo que a tarefa deve bloquear à espera de um item caso a fila esteja vazia no momento da chamada.
  23. 23. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions uxQueueMessagesWaitingFromISR queue.h BaseType_t uxQueueMessagesWaiting ( QueueHandle_t xQueue ); Parâmetros: • xQueue: Um identificador da fila que será consultada. Retorna: O número de mensagens armazenadas em uma fila.
  24. 24. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueSendFromISR queue.h BaseType_t xQueueSendFromISR ( QueueHandle_t xQueue, const void * pvItemToQueue, BaseType_t * pxHigherPriorityTaskWoken ); Retorna: pdTRUE se os dados foram enviados com sucesso para a fila, caso contrário errQUEUE_FULL.
  25. 25. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions Parâmetros: • xQueue: O identificador da fila em que o item está a ser escrito. • pvItemToQueue: Um ponteiro para o item que será colocado na fila. O tamanho dos itens da fila já foram definidos quando a fila foi criada. • pxHigherPriorityTaskWoken: xQueueSendFromISR() irá definir *pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa desbloqueada e esta tarefa desbloqueada tiver uma prioridade maior do que a tarefa em execução. Se xQueueSendFromISR() definir este valor para pdTRUE então uma mudança de contexto deve ser solicitada antes da interrupção ser encerrada. No FreeRTOS V7.3.0 pxHigherPriorityTaskWoken é um parâmetro opcional e pode ser definido como NULL.
  26. 26. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueSendToFrontFromISR queue.h BaseType_t xQueueSendToFrontFromISR ( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t *pxHigherPriorityTaskWoken ); Retorno: pdPass se os dados foram enviados com sucesso para a fila, senão errQUEUE_FULL.
  27. 27. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions Parâmetros: • xQueue: O identificador da fila na qual o item deve ser publicado. • pvItemToQueue: Um ponteiro para o item que será colocado na fila. • pxHigherPriorityTaskWoken: xQueueSendToFrontFromISR() irá definir *pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa desbloqueada e esta tarefa desbloqueada tiver uma prioridade maior do que a tarefa em execução. Se xQueueSendFromISR() definir este valor para pdTRUE então uma mudança de contexto deve ser solicitada antes da interrupção ser encerrada. No FreeRTOS V7.3.0 pxHigherPriorityTaskWoken é um parâmetro opcional e pode ser definido como NULL.
  28. 28. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueReceiveFromISR queue.h BaseType_t xQueueReceiveFromISR ( QueueHandle_t xQueue, void *pvBuffer, BaseType_t *pxHigherPriorityTaskWoken ); Retorno: pdTRUE se o item foi recebido com êxito na fila, senão pdFALSE.
  29. 29. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions Parâmetros: • xQueue: O identificador da fila para onde o item será enviado. • pvBuffer: Ponteiro para o buffer no qual o item recebido será copiado • pxHigherPriorityTaskWoken: Uma tarefa pode estar bloqueada esperando pelo espaço disponível no âmbito da fila. Se xQueueReceiveFromISR provoca tal tarefa para desbloquear *pxHigherPriorityTaskWoken irá ser definido para pdTRUE, caso contrário *pxHigherPriorityTaskWoken permanecerá inalterado. De FreeRTOS V7.3.0 pxHigherPriorityTaskWoken é um parâmetro opcional e pode ser definido como NULL.
  30. 30. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueIsQueueEmptyFromISR queue.h BaseType_t xQueueIsQueueEmptyFromISR ( const QueueHandle_t xQueue ); Parâmetros: • xQueue: O indicador da fila que está sendo consultada Retorno: pdFALSE se a fila não estiver vazia, ou qualquer outro valor se a fila estiver vazia.
  31. 31. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueIsQueueFullFromISR queue.h BaseType_t xQueueIsQueueFullFromISR ( const QueueHandle_t xQueue ); Parâmetros: • xQueue: O identificador da fila que será consultada Retorno: pdFALSE se a fila não estiver cheia, ou qualquer outro valor se a fila estiver cheia.
  32. 32. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions xQueueOverwriteFromISR queue.h BaseType_t xQueueOverwrite ( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t *pxHigherPriorityTaskWoken ); Retorno: xQueueOverwriteFromISR() é uma macro que chama xQueueGenericSendFromISR(), e, portanto, tem os mesmos valores de retorno como xQueueSendToFrontFromISR(). No entanto, pdPass é o único valor que pode ser retornado porque xQueueOverwriteFromISR() vai escrever na fila, mesmo quando a fila já estiver cheia.
  33. 33. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS API Functions Parâmetros: • xQueue: O identificador da fila para a qual os dados devem ser enviados. • pvItemToQueue: Um ponteiro para o item que será colocado na fila. • pxHigherPriorityTaskWoken: xQueueOverwriteFromISR() irá definir *pxHigherPriorityTaskWoken para pdTRUE se enviar para a fila uma tarefa desbloqueada e esta tarefa desbloqueada tiver uma prioridade maior do que a tarefa em execução. Se xQueueOverwriteFromISR() definir este valor para pdTRUE então uma mudança de contexto deve ser pedido antes da interrupção ser encerrada.
  34. 34. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Hook Functions
  35. 35. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Tick Interrupt • Em um kernel preemptivo: – Tarefas possuem um tempo para execução – Time slice ou quantum • No fim desta período de tempo: – Escalonador selecionará a próxima tarefa para execução. • O kernel usa uma interrupção do sistema: – tick interrupt (system tick ou clock tick).
  36. 36. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Tick interrupt (system tick ou clock tick) – Interrupção periódica – configTICK_RATE_HZ no arquivo FreeRTOSConfig.h #define configUSE_PREEMPTION 1 #define configUSE_IDLE_HOOK 0 #define configUSE_TICK_HOOK 0 #define configCPU_CLOCK_HZ ( SystemCoreClock ) #define configTICK_RATE_HZ ( ( portTickType ) 1000 ) Tick Interrupt
  37. 37. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Tick Interrupt
  38. 38. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS • Uma função de callback pode ser chamada em cada tick interrupt: – executando uma rotina periódica, como zerar o watchdog timer. – Contexto de interrupção -> processamento o mais breve possível. • Habilitar opção: – configUSE_TICK_HOOK • Implemente a função: – void vApplicationTickHook(void); Tick Interrupt Hook
  39. 39. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Tarefa Idle • Ao se trabalhar com eventos: – as tarefas estão quase sempre no estado Blocked. – e não podem ser escolhidas e executadas pelo escalonador. • Só que, a CPU precisará executar algo. – a tarefa Idle – criada automaticamente na inicialização do escalonador – ao chamar a função vTaskStartScheduler(). – tem prioridade 0.
  40. 40. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Tarefas em Execução
  41. 41. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Idle Hook Function • Função de callback chamada ao executar a tarefa Idle. – Executar um processamento contínuo em background. – Medir a quantidade de processamento livre disponível. – Colocar o processador em modo de baixo consumo. • Habilitar a opção configUSE_IDLE_HOOK no arquivo FreeRTOSConfig.h. • Implementar a função: void vApplicationIdleHook(void);
  42. 42. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Implementação • A função de Idle Hook nunca deve bloquear ou suspender. • Na tarefa Idle ocorre a limpeza das tarefas deletadas pela aplicação. – se a aplicação usa a função vTaskDelete(), – Então a função Idle Hook sempre deverá retornar. void vApplicationIdleHook( void ) { ++u64IdleTicksCnt; }
  43. 43. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Gerenciamento de Memória • O FreeRTOS precisa alocar memória dinamicamente toda vez que cria uma tarefa, um queue ou um semáforo. • Quando o kernel precisa alocar memória, em vez de chamar malloc() diretamente, o kernel chama pvPortMalloc(). • Da mesma forma, para liberar memória, em vez de chamar a função free(), o kernel chamará a função vPortFree().
  44. 44. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Alocação • O FreeRTOS fornece 4 diferentes implementações para alocação de memória: • heap_1.c: apenas aloca memória. • heap_2.c: aloca e desaloca memória, mas não trata fragmentação. • heap_3.c: usa a implementação padrão de malloc() e free() da biblioteca C. • heap_4.c: disponível a partir da versão 7.2.0 do FreeRTOS. Aloca e desaloca memória, trata fragmentação e é mais eficiente que a maioria das implementações da biblioteca C padrão.
  45. 45. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Malloc Failed Hook Function • Os esquemas de alocação de memória implementados por heap1.c, heap2.c, heap3.c e heap4 podem, opcionalmente, incluir a função Malloc Failed Hook Function que pode ser configurada para ser chamado se pvPortMalloc() retornar NULL. • Definir a função Malloc Failed Hook Function ajudará a identificar os problemas causados pela falta de memória no heap - especialmente quando falha uma chamada para pvPortMalloc() dentro de uma função da aplicação.
  46. 46. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Malloc Failed Hook Function • A Malloc Failed Hook Function será chamada apenas se configUSEMALLOCFAILEDHOOK estiver definida como 1 em FreeRTOSConfig.h. • Quando isso é definido, a aplicação deve implementar o método com a seguinte assinatura: void vApplicationMallocFailedHook( void );
  47. 47. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Stack • Região de memória onde são salvos as variáveis locais, registradores e parâmetros nas chamadas de função. • Na criação de uma tarefa, um stack de uso particular desta tarefa, também é definido. • Um mau dimensionamento do stack pode levar uma tarefa a ultrapassar este espaço alocado (stack overflow).
  48. 48. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Stack Overflow Hook • Dois mecanismos opcionais podem monitorar o stack das tarefas em tempo de execução. • O kernel irá monitorar o stack das tarefas, caso identifique stack overflow, ele executará uma função de callback (stack overflow hook). • Tem como desvantagem o aumento do tempo na troca de contexto.
  49. 49. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Stack Overflow Hook • Para ambos os métodos, a implementação da função de callback de stack overflow é a seguinte: void vApplicationStackOverflowHook (xTaskHandle *pxTask, signed char *pcTaskName); • Deve ser usada para: – identificar e corrigir problemas de stack durante o desenvolvimento da aplicação. – Simplificar o debugging de problemas com o stack. • Não existe nenhum jeito fácil de se recuperar de um stack overflow.
  50. 50. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS MÉTODO 1 • É selecionado quando configuramos no arquivo FreeRTOSConfig.h: configCHECK_FOR_STACK_OVERFLOW com 1. • Após a troca de contexto de uma tarefa, o kernel verifica o stack pointer do stack associada a esta tarefa. Caso esteja fora dos limites será chamada a função de stack overflow hook. • A desvantagem é que pode-se perder alguns stack overflows, já que apenas verifica-se o stack pointer na troca de contexto, ou seja, durante algum momento na execução da tarefa o stack pointer pode ter ultrapassado os limites do stack. Stack Overflow Hook
  51. 51. ESCOLA POLITÉCNICA DE PERNAMBUCO – UNIVERSIDADE DE PERNAMBUCO SISTEMAS OPERACIONAIS Stack Overflow Hook MÉTODO 2 • É selecionado quando configuramos no arquivo FreeRTOSConfig.h: configCHECK_FOR_STACK_OVERFLOW com 2. • Acrescenta mais uma checagem ao método 1. • O stack é preenchido com um padrão conhecido, que terá seus últimos 20 bytes verificados. Caso tenham sido sobrescrito, a função de stack overflow hook será chamada. • Tem a desvantagem de ser mais lento do que o método 1 , em contrapartida garante quase que 100% de acerto.

×