Análise do impacto da reprogramação do microcontrolador ATmega328P na previsibilidade do freertos no Arduino Uno

Previsibilidade FreeRTOS em ATmega328P

Informações do documento

Autor

Rodrigo Miguel Tomazi

instructor Marco Aurélio Spohn
Escola

Universidade Federal da Fronteira Sul

Curso Ciência da Computação
Tipo de documento Trabalho de conclusão de curso
Local Chapecó, SC
Idioma Portuguese
Formato | PDF
Tamanho 3.60 MB

Resumo

I.Análise do Impacto de Alterações no Clock do Microcontrolador no FreeRTOS

Este trabalho analisa como mudanças nas configurações do microcontrolador, especificamente a redução da frequência do clock, afetam a previsibilidade do FreeRTOS, um popular Real-Time Operating System (RTOS). Foram realizados testes no Arduino Uno, utilizando o microcontrolador ATmega328P, para medir o tempo de execução de funções-chave do FreeRTOS, incluindo troca de contexto, criação e exclusão de recursos (filas, tarefas, grupos de eventos, mutex e semáforos), e o comportamento de temporizadores de software. Os resultados demonstram um aumento exponencial no tempo de execução à medida que a frequência do clock diminui, comprometendo a previsibilidade do sistema, mas oferecendo ganhos em eficiência energética em alguns cenários. A pesquisa também investiga o impacto do tamanho da pilha na criação de tarefas e a influência do número de tarefas concorrentes no desempenho dos temporizadores.

1. Introdução Objetivo e Escopo da Pesquisa

O estudo investiga o impacto de alterações nas configurações do microcontrolador, especificamente a frequência do clock, na previsibilidade do sistema operacional de tempo real FreeRTOS. O objetivo principal é medir o atraso na execução de recursos-chave do FreeRTOS em diferentes frequências de clock. A pesquisa destaca a importância da previsibilidade em sistemas de tempo real, crucial para aplicações críticas como controle de temperatura em usinas nucleares e controladores de voo. A escolha do FreeRTOS, um sistema operacional de código aberto mantido pela Amazon, justifica-se por sua popularidade e por sua ampla utilização em microcontroladores. O trabalho reconhece a ausência de mecanismos de gerenciamento de energia eficiente em muitos RTOS, incluindo o FreeRTOS, e propõe a redução da frequência do clock como uma técnica para melhorar a eficiência energética, embora se reconheça os potenciais problemas de desempenho e previsibilidade que tal abordagem pode introduzir. A citação de Santos (2017, p. 32) reforça a preocupação com atrasos que podem comprometer a resposta esperada do sistema. O trabalho, portanto, visa quantificar e analisar esses efeitos.

2. Sistemas Operacionais de Tempo Real RTOS e suas Características

A pesquisa contextualiza o conceito de Sistemas Operacionais de Tempo Real (RTOS), enfatizando a previsibilidade como característica principal. RTOS garantem a execução de tarefas dentro de prazos definidos, tornando-os adequados para sistemas críticos. O FreeRTOS é apresentado como exemplo, destacando suas funcionalidades multitarefas, mecanismos de comunicação e sincronização entre tarefas e tratamento de eventos externos. A capacidade de adaptação do FreeRTOS a diferentes dispositivos é mencionada, com destaque para sua portabilidade para o Arduino Uno. No entanto, a pesquisa aponta a falta de gerenciamento de energia integrado em muitos RTOS, incluindo o FreeRTOS, que depende da manipulação direta do hardware para atingir economia de energia. A pesquisa menciona a lentidão do desenvolvimento de baterias eficientes em relação a outros componentes de hardware (Urriza et al., 2004, p. 01), o que torna o gerenciamento de energia uma necessidade para sistemas embarcados. A pesquisa contrasta o uso de um RTOS com a programação sem um sistema operacional, onde o programador assume toda a responsabilidade de gerenciamento de processos, acesso ao hardware e memória, o que aumenta a complexidade e a propensão a erros. A pesquisa também diferencia sistemas de tempo real críticos e não críticos, conforme a classificação de Tanenbaum (2016, p. 26).

3. Recursos do FreeRTOS e seus Mecanismos de Gerenciamento

Esta seção descreve recursos essenciais do FreeRTOS relevantes para o estudo. O gerenciamento de memória é abordado, com destaque para a mudança na alocação de objetos do kernel (versões posteriores à 9.0.0) para uma abordagem dinâmica ou estática, abandonando a pré-alocação ineficiente. O processo de criação e exclusão de tarefas é explicado, mencionando as funções xTaskCreate e xTaskCreateStatic. A utilização de filas para comunicação e sincronização entre tarefas é detalhada, incluindo a inserção e remoção de elementos, e o tratamento de situações de filas vazias ou cheias. O conceito de grupos de eventos para comunicação entre múltiplas tarefas ou ISRs é explicado. A sincronização entre tarefas e ISRs é detalhada, usando semáforos (binários e contadores) para garantir que os recursos sejam acessados de forma correta, evitando inconsistências e deadlocks. A utilização de mutex como mecanismo de exclusão mútua para acesso a regiões críticas é explicada. Finalmente, a notificação de tarefas é descrita como um método mais rápido para comunicação, embora limitado em comparação com as filas. A pesquisa também destaca a importância da priorização de tarefas e o impacto da troca de contexto no desempenho do sistema.

4. Implementação dos Testes e Resultados

A metodologia experimental envolveu a utilização da versão 10.2.0-3 do FreeRTOS em um Arduino Uno Rev3 com o microcontrolador ATmega328P. As frequências de clock testadas foram 16 MHz, 8 MHz, 4 MHz, 2 MHz e 1 MHz. Frequências inferiores a 1 MHz não foram testadas devido a limitações do Arduino Uno relacionadas a uma constante interna (clockCyclesPerMicrosecond). Os testes abrangeram a criação e exclusão de recursos (filas, tarefas, grupos de eventos), a comunicação entre tarefas (usando filas, grupos de eventos e notificação de tarefas), a sincronização entre tarefas e ISRs usando semáforos, e a troca de contexto. Os resultados mostraram um crescimento exponencial no tempo de execução dos recursos à medida que a frequência do clock diminuiu. No caso das filas, o tamanho e a quantidade de itens não afetaram os tempos de criação e exclusão, pois a alocação de memória foi feita em tempo de compilação. A alocação dinâmica de memória apresentou problemas e não foi usada nos testes de criação de recursos. O tamanho da pilha de uma tarefa impactou apenas o tempo de criação, não a exclusão. Nos testes de sincronização usando grupos de eventos, o tempo de comunicação entre tarefas foi 16% menor em relação ao uso de filas para mensagens de 1 byte. A comunicação entre ISRs e tarefas usando filas foi significativamente mais rápida do que a comunicação usando tarefas, possivelmente devido a diferentes funções de inserção de elementos nas filas e a ausência de interrupções e controle do escalonador para as ISRs.

5. Análise dos Temporizadores e Conclusões

A análise dos temporizadores de software revelou uma precisão limitada a múltiplos de 16ms (o tick do sistema), independentemente da frequência do clock. A pesquisa observou desvios padrões elevados em alguns cenários com alta concorrência de tarefas, indicando falhas na tarefa Daemon em obter a CPU a tempo para executar os temporizadores. Em geral, se o número de ticks do temporizador for maior ou igual ao número de tarefas com mesma prioridade que a Daemon, não foram detectadas anormalidades. A conclusão principal é que o aumento de atrasos no FreeRTOS é exponencial com a diminuição da frequência do clock, dobrando ou quase dobrando a cada divisão pela metade. A pesquisa destaca a necessidade de um trade-off entre a economia de energia e o aumento do tempo de resposta. O Zenodo disponibiliza os dados completos da pesquisa (TOMAZI, 2019). A economia de energia com a redução de frequência para 4 MHz é significativa, mesmo com um aumento de quatro vezes no tempo de resposta do sistema, enquanto a economia com 8MHz é menos expressiva.

II.Metodologia de Teste e Ambiente Experimental

A pesquisa utilizou a versão 10.2.0-3 do FreeRTOS em um Arduino Uno Rev3 com ATmega328P. Foram testadas diferentes frequências de clock (16 MHz, 8 MHz, 4 MHz, 2 MHz, 1 MHz), avaliando-se o impacto em tempos de criação/exclusão de recursos do FreeRTOS (filas, tarefas, grupos de eventos, mutex), comunicação entre tarefas (usando filas, grupos de eventos, e notificação de tarefas), e a sincronização entre tarefas e ISRs (interrupções) utilizando semáforos. A alocação estática de memória foi priorizada devido a problemas com a alocação dinâmica no port utilizado. Os dados coletados estão disponíveis em (TOMAZI, 2019) no Zenodo.

1. Plataforma de Teste e Ferramentas

O experimento utilizou um Arduino Uno Rev3, baseado no microcontrolador ATmega328P, como plataforma de teste. O sistema operacional de tempo real escolhido foi o FreeRTOS, versão 10.2.0-3, configurado com as definições padrão. A escolha do Arduino Uno se justifica pela sua popularidade e facilidade de uso para prototipagem, além de possuir hardware relativamente simples, o que torna a análise do impacto na frequência do clock mais evidente. A utilização da versão 10.2.0-3 do FreeRTOS garante a reprodutibilidade dos resultados. A frequência do clock do microcontrolador ATmega328P foi o foco da manipulação, sendo testadas as seguintes frequências: 16 MHz, 8 MHz, 4 MHz, 2 MHz e 1 MHz. Frequências inferiores a 1 MHz foram descartadas devido a limitações matemáticas em uma constante interna do Arduino Uno, a 'clockCyclesPerMicrosecond', que gera divisão por zero para valores menores que 1.000.000 Hz. A escolha da alocação estática de memória para os testes foi feita por conta de limitações e erros encontrados na alocação dinâmica de memória do port usado para o Arduino Uno, onde a função malloc não funcionava corretamente dentro das tarefas FreeRTOS. Os resultados obtidos podem ser acessados em (TOMAZI, 2019) na plataforma Zenodo.

2. Testes Realizados e Métodos de Medição

A metodologia de teste envolveu a medição do tempo de execução de diversas funcionalidades-chave do FreeRTOS sob diferentes frequências de clock do microcontrolador. Foram testados os tempos de criação e exclusão de recursos como filas, tarefas, grupos de eventos, e mutex. A metodologia incluiu testes de comunicação entre tarefas usando diferentes mecanismos do FreeRTOS, como filas, grupos de eventos, e notificação de tarefas. A comunicação entre as tarefas e as interrupções (ISRs) foi testada utilizando filas e semáforos. A sincronização entre múltiplas tarefas foi avaliada utilizando grupos de eventos. A medição da troca de contexto foi realizada utilizando uma tarefa principal e uma secundária, registrando o tempo de troca entre elas. Para os testes de criação e exclusão de recursos, um loop foi utilizado para criar e excluir os recursos múltiplas vezes, obtendo o tempo médio de criação e exclusão. Para os testes de comunicação, o tempo total da operação, desde o início do envio da mensagem até o final do recebimento foi registrado, seguindo a sugestão de Sacha (1995, p. 2) que argumenta que medir o tempo total é mais relevante em termos práticos, pois inclui os tempos de entrega da mensagem pelo sistema operacional e a alternância das tarefas. Os tempos dos temporizadores de software foram testados variando-se o tempo dos temporizadores (múltiplos de 16ms) e o número de tarefas concorrentes para simular diferentes cenários de carga.

III.Resultados e Análise dos Recursos do FreeRTOS

Os testes revelaram que o tempo de execução da maioria dos recursos do FreeRTOS dobra ou quase dobra a cada redução pela metade da frequência do clock, confirmando a relação esperada. O tamanho da pilha impactou o tempo de criação das tarefas, mas não a exclusão. A comunicação entre tarefas via grupos de eventos mostrou-se mais rápida que via filas. Temporizadores de software apresentaram precisão limitada a múltiplos de 16ms (tick do sistema) e irregularidades em cenários de alta concorrência, dependendo da relação entre o tempo do temporizador e o número de tarefas com mesma prioridade. A eficiência energética obtida com a redução da frequência do clock deve ser ponderada com o aumento do tempo de resposta, dependendo das tolerâncias do sistema.

1. Criação e Exclusão de Recursos do FreeRTOS

Os testes de criação e exclusão de recursos do FreeRTOS foram realizados usando funções de criação estática (com o sufixo 'Static'), devido a problemas com a alocação dinâmica de memória no port utilizado para o Arduino Uno. Os resultados mostraram um aumento exponencial no tempo de criação dos recursos com a redução da frequência do clock. Em relação à exclusão dos recursos, também houve um aumento exponencial do tempo, mas com uma taxa de crescimento menor em frequências mais baixas. Para filas, o número de itens e o tamanho dos mesmos não influenciaram nos tempos de criação e exclusão, já que a memória foi alocada em tempo de compilação. Nos testes com tarefas, o tamanho da pilha influenciou diretamente o tempo de criação (devido à função memset que preenche a pilha), mas não o tempo de exclusão. O comportamento observado indica que o tempo de criação e exclusão de recursos é fortemente impactado pela frequência do clock, com o tempo dobrando ou quase dobrando a cada redução pela metade da frequência, exceto para a transição de 16MHz para 8MHz, onde o aumento foi superior ao dobro, e uma desaceleração do crescimento em frequências mais baixas para a exclusão.

2. Comunicação e Sincronização entre Tarefas

A comunicação entre tarefas foi avaliada utilizando filas, grupos de eventos e notificação de tarefas. Os resultados mostraram um aumento exponencial nos tempos de comunicação com a redução da frequência do clock, similar ao observado na criação e exclusão de recursos. As filas apresentaram um comportamento semelhante ao observado na comunicação entre tarefas usando grupos de eventos, mas com tempos de resposta ligeiramente mais lentos. A comunicação via grupos de eventos foi aproximadamente 16% mais rápida do que com filas para mensagens de 1 byte. A notificação de tarefas, embora mais rápida que as outras opções, apresentou limitações quanto à capacidade de envio de dados e a impossibilidade de notificar uma tarefa a partir de uma ISR. A comunicação usando ISRs (interrupções) via filas foi mais rápida do que usando tarefas, provavelmente devido à necessidade de desabilitar interrupções e o escalonador nas funções de inserção e remoção de elementos em filas no contexto das tarefas. Com relação aos grupos de eventos, o tempo de resposta a partir das ISRs foi aproximadamente o dobro do tempo com as tarefas, sem explicação clara para esse acréscimo. A troca de contexto também apresentou um aumento exponencial nos tempos com a redução da frequência do clock.

3. Análise dos Temporizadores de Software

Os temporizadores de software foram testados com diferentes tempos (múltiplos de 16ms, devido ao tick do sistema) e números de tarefas concorrentes. A precisão dos temporizadores é limitada a 16ms (um tick), independentemente da frequência do clock. Testes com diferentes quantidades de tarefas (vTarefaX) concorrendo com a tarefa Daemon (responsável pela execução dos temporizadores) revelaram desvios padrões elevados em alguns cenários, especialmente quando o número de ticks do temporizador era menor que o número de tarefas com a mesma prioridade da Daemon. Isto indica que a tarefa Daemon não conseguia obter a CPU a tempo para executar os temporizadores, levando a atrasos e irregularidades na sua execução, principalmente para tempos de temporizadores de 16ms e com maior número de tarefas concorrentes. Em situações onde o número de ticks do temporizador é maior ou igual ao número de tarefas com a mesma prioridade, não foram observadas anormalidades. As tabelas completas dos resultados dos testes com temporizadores, encontram-se no apêndice A.

IV.Conclusão

O estudo confirmou que a redução da frequência do clock do microcontrolador impacta diretamente a previsibilidade do FreeRTOS, aumentando exponencialmente o tempo de resposta dos recursos. Apesar disso, a redução da frequência do clock para 4 MHz resultou em significativa economia de energia, mesmo com um aumento no tempo de resposta. O trabalho destaca a importância de considerar essa trade-off entre performance e eficiência energética ao projetar sistemas embarcados baseados em RTOS como o FreeRTOS em plataformas como o Arduino Uno com o ATmega328P. As tabelas e gráficos completos estão disponíveis em (TOMAZI, 2019) no Zenodo.

1. Comportamento Geral do FreeRTOS em Diferentes Frequências

O estudo concluiu que o aumento dos atrasos no sistema operacional FreeRTOS é exponencial em relação à diminuição da frequência do clock do microcontrolador. Em geral, a cada redução pela metade da frequência, o tempo de execução dos recursos pelo menos dobra, mostrando que o sistema se comporta como esperado. Essa relação direta entre frequência e tempo de resposta é crucial para o desenvolvimento de sistemas embarcados que dependem de um tempo de resposta preciso. A pesquisa destaca que a alocação dinâmica de memória não foi possível dentro das tarefas do FreeRTOS devido a limitações do port específico para o Arduino Uno. No entanto, a medição do tempo de criação estática dos recursos e o tempo de manipulação dos recursos e da troca de contexto foram realizadas conforme o proposto. Os resultados fornecem dados quantitativos para a avaliação da troca entre desempenho e consumo de energia.

2. Análise da Precisão e Desempenho dos Temporizadores

Os temporizadores de software do FreeRTOS, analisados neste estudo, apresentaram uma precisão limitada a 16ms (um tick), independentemente da frequência do clock do microcontrolador. Essa limitação intrínseca dos temporizadores deve ser considerada no projeto de sistemas que requeiram maior precisão temporal. A pesquisa identificou comportamentos irregulares em cenários de alta concorrência de tarefas, onde o número de ticks do temporizador era inferior ao número de tarefas com mesma prioridade que a tarefa Daemon. Nestes cenários, a tarefa Daemon, responsável pela execução dos temporizadores, não conseguia obter o controle da CPU a tempo. Para evitar esses problemas, a pesquisa sugere que o número de ticks do temporizador seja igual ou superior ao número de tarefas com mesma prioridade da tarefa Daemon. A análise completa destes resultados está disponível nas tabelas apresentadas no Apêndice A, servindo como referência para projetos futuros.

3. Considerações sobre Eficiência Energética e Previsibilidade

A pesquisa demonstra que a redução da frequência do clock do microcontrolador pode gerar uma significativa economia de energia, mas com o custo de um aumento no tempo de resposta do sistema. A análise dos resultados sugere que a redução da frequência para 4MHz oferece uma excelente relação custo-benefício: embora o tempo de resposta seja quatro vezes maior que em 16MHz, a economia de energia é aproximadamente seis vezes maior. Já para 8MHz, a economia de energia é menor do que a metade e o atraso é o dobro em comparação a 16MHz. A escolha da frequência ideal requer, portanto, uma avaliação cuidadosa, considerando as tolerâncias de tempo de resposta do sistema e a necessidade de economia de energia. Este estudo fornece informações relevantes para que desenvolvedores de sistemas embarcados possam fazer escolhas mais informadas ao projetar aplicações com o FreeRTOS, balanceando a necessidade de previsibilidade e eficiência energética.