当前位置: 首页 > article >正文

树莓派 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上运行,它们在不同的核心上并行执行。所以,默认情况下,两个核心的代码会同时运行。


http://www.kler.cn/a/468297.html

相关文章:

  • Java实现下载excel模板,并实现自定义下拉框
  • 图数据库 | 17、高可用分布式设计(上)
  • TDengine + MQTT :车联网时序数据库如何高效接入
  • 计算机毕业设计Python+CNN卷积神经网络高考推荐系统 高考分数线预测 高考爬虫 协同过滤推荐算法 Vue.js Django Hadoop 大数据毕设
  • MarkDown 的 mermaid gantt(甘特图)、mermaid sequenceDiagram (流程图) 语法解析和应用
  • Wireshark 具体某种协议的分析
  • 圆周率π为何是无穷无尽的
  • Rust中的Option枚举快速入门
  • LookingGlass使用
  • [react+ts] useRef获取自定义组件dom或方法声明
  • Windows 11 上配置VSCode 使用 Git 和 SSH 完整步骤
  • Go语言的 的反射(Reflection)核心知识
  • springboot远程链接Hadoop
  • launch.json传递True值
  • CSS3 框大小
  • Python基于wordcloud库绘制词云图
  • 基于SpringBoot的旅游网站的设计与实现(源码+数据库+文档)
  • 深入探索:将 Elasticsearch 与 Ruby 工具结合使用
  • Postgresql源码(139)vim直接修改postgresql表文件的简单实例
  • 字玩FontPlayer开发笔记3 性能优化 大量canvas渲染卡顿问题
  • CSS——6. 导入样式
  • GraphRAG实践:neo4j试用
  • Xcode 16.1: Warning: unable to build chain to self-signed root for signer
  • 降维算法之PCA(PrincipalComponent Analysis,主成分分析)
  • Python实现一个简单的 HTTP echo 服务器
  • 举例说明AI模型怎么聚类,最后神经网络怎么保存