Arduino RP2040 多核心运行模式

Arduino RP2040 多核心运行模式


  • 📌RP2040基于Earle F. Philhower, III的开发核心固件:https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json
  • 🎈相关开发文档在线j简要介绍:https://arduino-pico.readthedocs.io/en/latest/multicore.html

📒多核处理介绍

📑RP2040芯片有2个内核可以相互独立运行,相互共享外设和内存。Arduino代码通常只会在核心0上执行,第二个核心处于低功耗状态下空闲。

📓使用介绍

  • 🌿通过在草图中添加setup1()loop1()函数,您可以使用第二个核心。从setup1()loop1()例程中调用的任何内容都将在第二个核心上执行。

  • 🌿setup()setup1()将同时调用,并且loop()loop1()将在核心的setup()完成后立即启动(即不一定同时启动!)。

📘暂停核心任务相关函数

有时应用程序需要暂停片上的其他内核(即它正在写入闪存或需要在其他事件发生时停止处理)。

  • 🌿void rp2040.idleOtherCore()
  • 发送消息以停止另一个核心(即当从核心0调用时,它会暂停核心1,反之亦然)。等待另一个核心确认后再返回。
  • 另一个内核将禁用其中断并在基于RAM的例程中忙碌等待,因此可以访问闪存和其他外围设备。
  • ✨注意如果核心0空闲时间过长,则USB端口可能会被冻结。这是因为核心0管理USB并需要及时服务IRQ(空闲时无法做到)。
  • 🌿void rp2040.restartCore1()
    从Core 0硬重置Core1并从setup1()重新启动其操作。

📙核心之间的通信

RP2040为内核之间的通信提供了硬件FIFO,但它专门用于上述空闲/恢复调用。相反,请使用以下功能访问软件管理的多核安全FIFO。

  • 🌿void rp2040.fifo.push(uint32_t)
    将一个值推送到另一个核心。如果FIFO已满,将阻塞。

  • 🌿 bool rp2040.fifo.push_nb(uint32_t)
    将一个值推送到另一个核心。如果FIFO已满,则立即返回false并且不阻塞。如果推送成功,则返回true。

  • 🌿uint32_t rp2040.fifo.pop()
    从此核心的FIFO中读取一个值。阻塞,直到一个可用。

  • 🌿bool rp2040.fifo.pop_nb(uint32_t *dest)
    从该核心的FIFO中读取一个值并将其放置在此数据库中。如果成功将返回true,如果弹出将阻止则返回false。

  • 🌿 int rp2040.fifo.available()
    返回此核心的FIFO中可用的值的数量。

📝测试代码

  • 🔖例程位置:C:\Users\用户名\AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\3.7.2\libraries\rp2040\examples\Multicore
void setup() {
  Serial.begin(115200);
  delay(5000);
}

void loop() {
  Serial.printf("C0: Blue leader standing by...\n");
  delay(1000);
}

// Running on core1
void setup1() {
  delay(5000);
  Serial.printf("C1: Red leader standing by...\n");
}

void loop1() {
  Serial.printf("C1: Stay on target...\n");
  delay(500);
}
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值