Skip to content

Exemplos práticos de programação multicore para a BitDogLab com Raspberry Pi Pico W (RP2040), demonstrando comunicação e sincronização entre os núcleos usando variáveis globais, FIFO e lockout com o SDK C.

License

Notifications You must be signed in to change notification settings

LabirasIFPI/bitdoglab_multicore

Repository files navigation

🖇️ Exemplos de Programação Multicore para Raspberry Pi Pico

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.


🌟 Recursos

  • Paralelismo Real: Aprenda a lançar o segundo núcleo com multicore_launch_core1 para 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:
    1. Básico: Comunicação insegura via variável global (para fins didáticos).
    2. Intermediário: Sincronização com o sistema de lockout.
    3. Avançado: Comunicação robusta e reativa usando FIFO.

🛠️ Pré-requisitos

🔩 Hardware

  • Raspberry Pi Pico ou Pico W
  • (Opcional para os exemplos) Botão e LED -> Integrados à BitDogLab

💻 Software

🚀 Como Usar

1. Clone o Repositório

git clone [https://github.com/LabirasIFPI/bitdoglab_multicore.git](https://github.com/LabirasIFPI/bitdoglab_multicore.git)
cd bitdoglab_multicore

2. 👨‍💻 Compile o Projeto

Cada 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

3. ✨ Flashe o Pico

  • Pressione e segure o botão BOOTSEL no seu Pico e conecte-o ao computador.
  • Ele aparecerá como um dispositivo de armazenamento USB.
  • Arraste o arquivo .uf2 gerado na pasta build para dentro do Pico.

A placa irá reiniciar. Abra um monitor serial para ver a interação entre os dois núcleos em tempo real! 👀


🔬 Exemplos Incluídos

  1. 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.
  2. ex2_lockout_sync:

    • O que faz: Ambos os núcleos incrementam um contador, mas o Core 0 usa lockout para 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).
  3. 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! 🌐

About

Exemplos práticos de programação multicore para a BitDogLab com Raspberry Pi Pico W (RP2040), demonstrando comunicação e sincronização entre os núcleos usando variáveis globais, FIFO e lockout com o SDK C.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published