FreeRTOS V7.5

- por Sergio Prado

Categorias: FreeRTOS Tags: , ,

O FreeRTOS V7.5 foi liberado no último dia 19 de julho com bastante melhorias e algumas novas implementações.

Fazendo um diff com a versão 7.4, pude perceber algumas alterações no escalonador para melhorar sua performance, além de vários comentários relacionados à ferramenta de análise estática de código PC-Lint. Segundo o release notes, os arquivos principais do FreeRTOS foram passados pela ferramenta, incluindo checagens do padrão MISRA, sem exibir nenhum warning!

Algumas novas funções foram adicionadas à API, dentre elas uxTaskGetSystemState(), xQueueOverwrite(), xQueueOverwriteFromISR() e xQueuePeekFromISR().

1
2
3
4
5
unsigned portBASE_TYPE uxTaskGetSystemState(
                       xTaskStatusType *pxTaskStatusArray, 
                       unsigned portBASE_TYPE uxArraySize, 
                       unsigned long *pulTotalRunTime
                     );

A uxTaskGetSystemState() é uma função para debugging da aplicação. Ela retorna na variável pxTaskStatusArray um array de estruturas do tipo xTaskStatusType, que contém informações sobre as tarefas do sistema como nome, estado, prioridade, tempo total alocado para a tarefa e a marca d’agua do stack. Para usar esta função habilite a opção configUSE_TRACE_FACILITY no FreeRTOSConfig.h.

Esta nova API fez com que as funções vTaskList() e vTaskGetRunTimeStats() ficassem obsoletas. Isso significa que precisarei alterar dois exercícios do meu treinamento de FreeRTOS…:)

1
2
3
4
5
6
7
8
9
10
portBASE_TYPE xQueueOverwrite(
                       xQueueHandle xQueue,
                       const void * pvItemToQueue
                     );
 
portBASE_TYPE xQueueOverwriteFromISR(
                       xQueueHandle xQueue,
                       const void * pvItemToQueue
                       portBASE_TYPE *pxHigherPriorityTaskWoken
                     );

A função xQueueOverwrite() é uma versão da função xQueueSendToBack(), porém se o queue estiver cheio, ela sobreescreve o último item. Sua variante xQueueOverwriteFromISR() tem o mesmo efeito, mas deve ser usada em uma ISR.

1
2
3
4
portBASE_TYPE xQueuePeekFromISR(
                       xQueueHandle xQueue,
                       void *pvBuffer,
                     );

A xQueuePeekFromISR() é uma versão da xQueuePeek() para ser usada em uma ISR. Ela permite que você receba um item sem removê-lo do queue.

Algumas novas opções de configuração também foram adicionadas:

  • configUSE_TIME_SLICING: se esta opção for configurada com 0, tarefas de mesma prioridade irão rodar até que explicitamente entrem no estado Blocked. Ou seja, a preempção por timeslice em tarefas de mesma prioridade é desabilitada!
  • configUSE_NEWLIB_REENTRANT: se esta opção for habilitada, uma estrutura do tipo reent é declarada para cada tarefa do FreeRTOS, possibilitando a integração do FreeRTOS com a API de funções reentrantes da newlib.
  • configUSE_STATS_FORMATTING_FUNCTIONS: habilita o uso das agora obsoletas funções vTaskList() e vTaskGetRunTimeStats().

Foram incluídos também novos portes para as plataformas ARM Cortex-A9 nos compiladores IAR e ARM, Renesas RZ e Microsemi SmartFusion2.

Além disso, esta disponível uma nova biblioteca chamada FreeRTOS+FAT SL para suporte à sistemas de arquivo FAT. O uso dela é liberado em projetos comerciais, mas apenas nas arquiteturas abaixo:

  • NXP LPC17xx family
  • NXP LPC18xx family
  • Microchip PIC32 family
  • Microchip PIC24 family
  • Microchip dsPIC family

Para qualquer outra arquitetura, ela possui duas licenças: GPL e comercial. Se você usar a licença GPL, precisa liberar o código fonte da sua aplicação sob a mesma licença. Ou então adquirir uma licença comercial. Mais informações sobre a licença desta biblioteca aqui.

O histórico completo das alterações pode ser acessado aqui e o FreeRTOS pode ser baixado neste link.

Um abraço,

Sergio Prado

Sem Comentários

Nenhum comentário até agora... é a sua chance de ser o primeiro a comentar!

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.