树莓派 Pico RP2040 多核心运行模式 多核编程
同时利用Raspberry Pi Pico的两个核心并行执行任务,setup()
和 setup1()
将同时调用,并且loop()
或loop1()
将在核心的setup()完成后立即启动(即不一定同时启动!)。
在 setup()
中,核心0初始化了GPIO 0和GPIO 1,并启动了串口通信。
在 loop()
中,核心0每1秒切换一次GPIO 0和GPIO 1上的LED状态。
在 setup1()
中,核心1初始化了GPIO 25,并在 loop1()
中每2秒切换一次GPIO 25上的LED状态。
#include <Arduino.h>
#include "pico/stdlib.h"
#include "pico/multicore.h"
#define GPIO_0_PIN 0 // GPIO 0 pin
#define GPIO_1_PIN 1 // GPIO 1 pin
#define GPIO_25_PIN 25 // GPIO 25 pin
// Running on core1
void setup1() {
gpio_init(GPIO_25_PIN); // Initialize GPIO 25
gpio_set_dir(GPIO_25_PIN, GPIO_OUT); // Set GPIO 25 as output
Serial.printf("C1: setup1...\n");
delay(1000);
}
void loop1() {
gpio_put(GPIO_25_PIN, 1); // Turn on LED on GPIO 25
Serial.printf("C1: loop1 - GPIO 25 ON...\n");
delay(2000); // Wait for 1 second
gpio_put(GPIO_25_PIN, 0); // Turn off LED on GPIO 25
Serial.printf("C1: loop1 - GPIO 25 OFF...\n");
delay(2000); // Wait for 1 second
}
void setup() {
Serial.begin(115200); // Initialize serial communication
Serial.printf("C0: setup...\n");
gpio_init(GPIO_0_PIN); // Initialize GPIO 0
gpio_init(GPIO_1_PIN); // Initialize GPIO 1
gpio_set_dir(GPIO_0_PIN, GPIO_OUT); // Set GPIO 0 as output
gpio_set_dir(GPIO_1_PIN, GPIO_OUT); // Set GPIO 1 as output
delay(1000); // Wait for 1 second
// while(1){
// gpio_put(GPIO_0_PIN, 1); // Turn on LED on GPIO 0
// gpio_put(GPIO_1_PIN, 1); // Turn on LED on GPIO 1
// Serial.printf("C0: loop - GPIO 0 and 1 ON...\n");
// delay(1000); // Wait for 1 second
// gpio_put(GPIO_0_PIN, 0); // Turn off LED on GPIO 0
// gpio_put(GPIO_1_PIN, 0); // Turn off LED on GPIO 1
// Serial.printf("C0: loop - GPIO 0 and 1 OFF...\n");
// delay(1000); // Wait for 1 second
// }
}
void loop() {
gpio_put(GPIO_0_PIN, 1); // Turn on LED on GPIO 0
gpio_put(GPIO_1_PIN, 1); // Turn on LED on GPIO 1
Serial.printf("C0: loop - GPIO 0 and 1 ON...\n");
delay(1000); // Wait for 1 second
gpio_put(GPIO_0_PIN, 0); // Turn off LED on GPIO 0
gpio_put(GPIO_1_PIN, 0); // Turn off LED on GPIO 1
Serial.printf("C0: loop - GPIO 0 and 1 OFF...\n");
delay(1000); // Wait for 1 second
}
该程序使用 pico/multicore.h
库来在Raspberry Pi Pico的两个核心上并行运行任务。setup1()
和 loop1()
会在核心1上运行,而 setup()
和 loop()
会在核心0上运行。
默认多核支持: Arduino环境会自动将程序分配到两个核心。setup()
和 loop()
默认在核心0上执行,而在程序中,setup1()
和 loop1()
作为核心1的任务,可以直接由核心1执行。
代码结构: 在你当前的代码中,setup1()
和 loop1()
会运行在核心1上,而 setup()
和 loop()
会在核心0上运行,Arduino已经内置支持了多核任务分配,不需要手动启动核心1。
执行顺序: setup1()
和 loop1()
会在核心1上运行,setup()
和 loop()
会在核心0上运行,它们在不同的核心上并行执行。所以,默认情况下,两个核心的代码会同时运行。