0% acharam este documento útil (0 voto)
20 visualizações4 páginas

Esp32 Uepg

O documento apresenta uma introdução ao ESP32, um sistema em um chip com suporte a Wi-Fi e Bluetooth, e discute a implementação do FreeRTOS, um sistema operacional de tempo real adaptado para o ESP32. Ele aborda a criação e escalonamento de tarefas, alocação de memória e os tipos de memória disponíveis no ESP32, além de descrever o funcionamento dos watchdogs. O FreeRTOS permite a execução de multitarefas em um ambiente de microcontrolador, utilizando um escalonador que gerencia a execução das tarefas de acordo com suas prioridades.

Enviado por

bdr2102
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
20 visualizações4 páginas

Esp32 Uepg

O documento apresenta uma introdução ao ESP32, um sistema em um chip com suporte a Wi-Fi e Bluetooth, e discute a implementação do FreeRTOS, um sistema operacional de tempo real adaptado para o ESP32. Ele aborda a criação e escalonamento de tarefas, alocação de memória e os tipos de memória disponíveis no ESP32, além de descrever o funcionamento dos watchdogs. O FreeRTOS permite a execução de multitarefas em um ambiente de microcontrolador, utilizando um escalonador que gerencia a execução das tarefas de acordo com suas prioridades.

Enviado por

bdr2102
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Transcend Studio

Introdução
Tarefas
Escalonamento
Memória
Watchdogs

Guilherme Pontarolo
guipontarolo@gmail.com
Engenharia de Computação
Universidade Estadual de Ponta Grossa

ESP32
Software

Introdução
Tarefas
Escalonamento
Memória
Watchdogs

Introdução
ESP32 é um sistema em um chip que integra os seguintes atributos:

-> Wi-fi(2.4GHz)
-> Bluetooth 4.2
-> Dois cores de alta performance
-> Coprocessador de baixo consumo de energia
-> Diversos periféricos

O firmware padrão é o FreeRTOS, que é um software gratuito que opera em tempo real (Real Time
Operating System - RTOS). Entretanto, existem outros sistemas que podem ser implementados no ESP32, tais
como MicroPython, Espruino, Mongoose-os, entre outros. No FreeRTOS, as threads são chamadas de tarefas.

RTOS
Um Real Time Operating System (sistema operacional de tempo real) é um sistema operacional projetado
para executar multitarefas onde cada evento tem um padrão de tempo pré-definido. Como cada core do
processador executa apenas uma tarefa de cada vez, é necessário que o escalonador tenha um padrão previsível.

FreeRTOS
FreeRTOS é uma classe de RTOS que é projetado para ser leve o suficiente para rodar em um
microcontrolador, tal como o ESP32.

Adaptações para o ESP32


O FreeRTOS é projetado para rodar em um único core do processador. Porém o ESP32 é dual core, contendo
uma CPU de protocolo (conhecida como CPU 0 ou PRO_CPU) e uma CPU de aplicação (referida como CPU
1 ou APP_CPU). Na prática, ambos são idênticos e compartilham a mesma memória. O ESP-IDF FreeRTOS é
uma versão adaptada do vanilla FreeRTOS que suporta symetric multiprocessing (SMD).

Tarefas
No sistema FreeRTOS, o usuário pode criar uma tarefa com a função xTaskCreate, e decidir o nível de
prioridade da tarefa criada com o parâmetro uxPriority. Dessa forma, o escalonador decide qual tarefa irá usar o
processador através de uma fila de prioridades, na qual as tarefas são inseridas. Exemplo de criação da tarefa:

// Tarefa a ser criada.


//A função vTaskCode tem uma série de parâmetros. Para mais informações acesse a
//documentação relacionada ao FreeRTOS.
void vTaskCode( [...], uxPriority, [..] ){
for( ;; )
{
// Código da tarefa vem aqui.
}
}

// Função que cria a tarefa.


void vOtherFunction( void ){
static uint8_t ucParameterToPass;
TaskHandle_t xHandle = NULL;

// Cria uma tarefa, armazenando o identificador. Note que o parâmetro passado


//ucParameterToPass deve existir pelo tempo de vida da tarefa, Então nesse caso é
//declarado estático.
xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle);
configASSERT( xHandle );

// Use o identificador para excluir a tarefa.


if( xHandle != NULL ){
vTaskDelete( xHandle );
}
}

Escalonamento
O FreeRTOS implementa o escalonamento através da função vTaskSwitchContext(). Essa função é
responsável por selecionar a tarefa de maior prioridade para rodar de uma lista conhecida como Ready task list
(lista de tarefas prontas). No ESP-IDF FreeRTOS, cada núcleo vai chamar vTaskSwitchContext()
independentemente para rodar da lista, que é compartilhada entre os dois núcleos.

Escalonamento Round Robin


Quando há uma série de tarefas no estado “pronto”, e todas com a mesma prioridade, o sistema implementa o
escalonamento Round Robin. Entretanto, o ESP-IDF FreeRTOS pode pular tarefas quando o Round Robin
escalonar múltiplas tarefas prontas. Isso ocorre porque o Vanilla FreeRTOS é adaptado ao ESP32 para rodar em
dois cores. A imagem abaixo ilustra a lista de tarefas prontas do ESP-IDF FreeRTOS:

Quando o core PRO_CPU chama o escalonador, ele considera apenas as tarefas azuis e roxas. Da mesma
forma, quando o core APP_CPU chama o escalonador, ele considera apenas as tarefas laranjas e roxas.
Uma solução para o problema de ignorar tarefas é garantir que todas as tarefas entrem em um estado
bloqueado para que sejam removidas da lista de tarefas prontas. Outra solução é distribuir tarefas entre várias
prioridades, de modo que uma determinada prioridade não seja atribuída a várias tarefas que são fixadas em
diferentes núcleos.

Alocação de memória
Aplicações ESP-IDF utilizam os padrões comuns de arquitetura de computadores de pilha (memória
dinâmica alocada pelo fluxo de controle do programa) e heap (memória dinâmica alocada por chamadas de
funções), bem como memória alocada estaticamente (alocada em tempo de compilação).
Por o ESP-IDF ser um ambiente RTOS de multi-thread, cada tarefa RTOS tem sua própria pilha. Por padrão,
cada uma dessas pilhas são alocadas da heap quando a tarefa é criada.
Um alocador de memória baseado na capacidade da memória permite apps fazerem alocações de heaps para
diferentes propósitos. Para a maioria dos casos, é possível utilizar as funções malloc() e free() sem nenhuma
consideração especial.

Capacidades de memória
O ESP32 contém diferentes tipos de memórias:
-> DRAM (Data RAM): usada para manter dados. Esse é o tipo de memória mais comum acessado pela
heap.
-> IRAM (Instruction RAM): usualmente mantém apenas dados executáveis. Se acessada como memória
genérica, todo o acesso deve ser alinhado a 32-bit.
-> D/IRAM: pode ser acessada tanto para dados, quanto para instruções.

DRAM

Ao iniciar, a heap DRAM contém toda a memória que não é alocada estaticamente pelo aplicativo. A
redução de buffers alocados estaticamente aumentará a quantidade de heap livre disponível.

IRAM

Ao iniciar, a heap IRAM contém todas as instruções de memórias que não são utilizadas pelo código
executável do aplicativo.

D/IRAM

Algumas memórias do ESP32 estão disponíveis como DRAM ou IRAM. Se a memória for alocada a partir
de uma região D/IRAM, o tamanho de heap livre para os dois tipos de memória diminuirá.

Watchdogs
O ESP-IDF tem suporte para dois tipos de watchdogs: o timer de watchdog de interrupção e o Timer de
watchdog de tarefa (TWDT). Ambos podem ser habilitados usando make menuconfig, entretanto o TWDT
também pode ser habilitado durante o tempo de execução. O Watchdog de Interrupção é responsável por
detectar instâncias em que a alternância de tarefas do FreeRTOS é bloqueada por um período prolongado de
tempo. O TWDT é responsável por detectar instâncias de tarefas em execução que não liberam o core do
processador por um período prolongado.

Copyright ©2022 All rights reserved | This template is made with by Colorlib

Você também pode gostar