Um repositório com exemplos práticos de como utilizar os dois núcleos (dual-core) do processador ARM Cortex-M0+ no Raspberry Pi Pico (RP2040). Aprenda a executar tarefas em paralelo, comunicar e sincronizar os núcleos de forma segura usando o Pico-SDK em C.
- ⚡ Paralelismo Real: Aprenda a lançar o segundo núcleo com 
multicore_launch_core1para dividir o trabalho e melhorar a performance. - 💬 Comunicação Segura com FIFO: Exemplo detalhado de como o Core 0 pode enviar dados para o Core 1 de forma assíncrona e segura usando o FIFO inter-core e interrupções.
 - 🔒 Sincronização com Lockout: Demonstração de como proteger seções críticas e evitar condições de corrida ao acessar variáveis compartilhadas, pausando um núcleo a partir do outro.
 - 💡 Três Níveis de Aprendizagem:
- Básico: Comunicação insegura via variável global (para fins didáticos).
 - Intermediário: Sincronização com o sistema de 
lockout. - Avançado: Comunicação robusta e reativa usando 
FIFO. 
 
- Raspberry Pi Pico ou Pico W
 - (Opcional para os exemplos) Botão e LED -> Integrados à BitDogLab
 
- Pico C/C++ SDK configurado.
 - ARM GCC Toolchain
 - CMake
 
git clone [https://github.com/LabirasIFPI/bitdoglab_multicore.git](https://github.com/LabirasIFPI/bitdoglab_multicore.git)
cd bitdoglab_multicoreCada exemplo está em um diretório separado. Navegue até o exemplo desejado e compile-o.
# Exemplo para compilar o projeto de FIFO
cd ex3_fifo_comms/
mkdir build
cd build
cmake ..
make- Pressione e segure o botão 
BOOTSELno seu Pico e conecte-o ao computador. - Ele aparecerá como um dispositivo de armazenamento USB.
 - Arraste o arquivo 
.uf2gerado na pastabuildpara dentro do Pico. 
A placa irá reiniciar. Abra um monitor serial para ver a interação entre os dois núcleos em tempo real! 👀
- 
ex1_global_variable_unsafe:- O que faz: O Core 0 lê um botão e o Core 1 acende um LED.
 - Conceito: A forma mais simples (e insegura) de compartilhar dados. Ótimo para entender o conceito básico de paralelismo.
 
 - 
ex2_lockout_sync:- O que faz: Ambos os núcleos incrementam um contador, mas o Core 0 usa 
lockoutpara pausar o Core 1 antes de ler e modificar o valor. - Conceito: Acesso seguro a recursos compartilhados para evitar corrupção de dados (condição de corrida).
 
 - O que faz: Ambos os núcleos incrementam um contador, mas o Core 0 usa 
 - 
ex3_fifo_comms:- O que faz: O Core 0 envia o estado de um botão para o Core 1 via FIFO. O Core 1 usa uma interrupção para reagir instantaneamente à chegada de novos dados.
 - Conceito: O método mais robusto e recomendado para comunicação entre núcleos.
 
 
Explore o poder do processamento dual-core do RP2040 e eleve o nível dos seus projetos embarcados! 🌐