Expert - firmware - Multi core
Neste laboratório iremos trabalhar com o uso do multicore da pico. O objetivo é fazer cada core da Pico ser responsável por uma parte específica do sistema. A comunicação entre os núcleos será realizada por meio da FIFO de sincronização disponibilizada pelo hardware.
LEITURA
Antes de seguir no laboratório será necessário ler o material:
Laboratório
A proposta é expandir o LAB-3-pra, distribuindo as responsabilidades nos múltiplos cores da seguinte forma:
Core 0:
- Leitura da UART
- Implementação do protocolo de comunicação com o PC
Core 1:
- Leitura do sensor ultrassônico HC-SR04
Conforme ilustrado no diagrama abaixo:

FIFOs
No diagrama, observe que o Core 0 e o Core 1 se comunicam por meio das FIFOs de sincronização. Elas serão utilizadas para:
- Core 0 → Core 1: envio da frequência de leitura do sensor
- Core 1 → Core 0: envio da distância medida
Pensar
Alguns problemas que precisam ser resolvidos:
- Como sinalizar ao
Core 1que a leitura deve ser interrompida (por exemplo, ao receber o comandostop)? - Como o
Core 1deve informar aoCore 0que ocorreu um erro na leitura do sensor?
Lembrem que as FIFOs utilizadas no processador rp2350 são de 32 bits.
Printfs
Devido às características das funções da biblioteca stdio (printf, scanf, etc.), não é possível utilizá-las simultaneamente em diferentes núcleos, pois não são reentrantes.
Por esse motivo, recomenda-se que apenas o Core 0 seja responsável pelas operações de printf e scanf.
Medindo
Instrumente o firmware com um GPIO para cada core, conforme explicado no guia de métricas bare-metal multicore:
- Core 0: mantenha o GPIO em nível alto enquanto o core processa um comando da UART. Mantenha-o em nível baixo enquanto aguarda um novo comando.
- Core 1: mantenha o GPIO em nível alto durante a leitura do HC-SR04 e o envio da medida pela FIFO. Mantenha-o em nível baixo enquanto aguarda a próxima leitura.
Com um osciloscópio ou analisador lógico, meça durante o mesmo intervalo de tempo:
- A utilização de cada core, calculando o percentual de tempo em que seu GPIO permaneceu em nível alto.
- O WCET observado de cada core, encontrando o pulso mais longo de cada sinal.
- O desbalanceamento de carga, calculando a diferença absoluta entre as utilizações dos cores:
.
Repita as medições usando diferentes frequências de leitura do sensor e compare os resultados, adicione no README.md do seu repositório a análise realizada.