The RP2040 processor of the Raspberry Pi Pico has dual ARM Cortex-M0+ cores that can be used in an Arduino-style sketch as follows:
/*
* Test Rspberry Pi Pico dualcore mode
*
* Classical 'blink' example but split into two tasks, running on the two RP2040 cores:
* - Core 0 sets the state of the LED
* - Core 1 copies the state to the LED
*
*/
unsigned char state;
/*
* Setup for core 0
*/
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
/*
* Setup for core 1
*/
void setup1() {
}
/*
* Core 0 - set value of the user LED
*/
void loop() {
state = HIGH; // turn the LED on (HIGH is the voltage level)
delay(1000); // wait a second
state = LOW; // turn the LED off by making the voltage LOW
delay(1000); // wait a second
}
/*
* Core 1 - copy to LED
*/
void loop1() {
digitalWrite(LED_BUILTIN, state);
delay(1); // wait a millisecond
}
There are the setup routines setup() and setup1() as well as the looping routines loop() and loop1() for cores 0 and 1.
These routines are executed on the different cores and thus run asynchronously. Proper use of semaphores is necessary when data are exchanged between the loop threads.
