Pi-Pico编程风格

两种 Raspberry Pi Pico 编程风格对比:Arduino 框架 vs 原生 SDK

当第一次接触 Raspberry Pi Pico 时,你可能会发现网上存在两种截然不同的代码写法:一种是类似 Arduino 的 setup() / loop() 结构,另一种则是标准的 main() 函数加官方库。它们分别代表了两大主流开发方式——Arduino 风格(或称 Arduino 框架)与 原生 C/C++ SDK 风格。本文将带你深入了解两者的本质、差异以及如何根据自身需求做出选择。


一、两种风格究竟是什么?

1. Arduino 风格

这种风格源自 Arduino 生态,通过安装第三方“核心”(如 Earle F. Philhower 的 arduino-pico)使 Pico 能够被 Arduino IDE 识别。代码结构通常如下:

1
2
3
4
5
6
7
8
9
10
11
12
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
Serial.println("Hello from Pico!");
}

void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
  • 入口:框架隐藏了 main(),用户只需实现 setup()(初始化一次)和 loop()(无限循环)。
  • 函数:采用 Arduino 命名的函数,如 pinMode()digitalWrite()delay()Serial.print() 等。
  • 目标用户:希望快速上手、复用 Arduino 教程和库的开发者,尤其是初学者。

2. 原生 C/C++ SDK 风格

这是树莓派官方提供的开发方式,基于 Pico SDK(Software Development Kit)。代码结构如下:

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include "pico/stdlib.h"

int main() {
stdio_init_all();
while (true) {
printf("Hello from Pico!\n");
sleep_ms(1000);
}
return 0;
}
  • 入口:标准的 main() 函数,一切从 main 开始。
  • 函数:使用 SDK 提供的函数,如 gpio_put()sleep_ms()printf() 等,更贴近底层硬件操作。
  • 目标用户:希望深入了解硬件、进行高性能开发或使用官方完整功能的开发者。

二、核心差异对比

对比维度 Arduino 风格 原生 SDK 风格
编程模型 事件驱动(setup + loop 顺序执行(main + 自定义循环)
抽象层次 高,封装了大量硬件细节 中,需要显式初始化外设
学习曲线 平缓,有海量 Arduino 资源可参考 较陡,需阅读 SDK 文档
代码简洁性 极高,常用操作一行函数搞定 需自行处理初始化、错误检查等
库生态 可复用大量现有 Arduino 库 主要使用官方 SDK 库,部分第三方库
调试手段 串口监视器(Serial Monitor) 串口输出、调试器、printf
编译工具链 Arduino IDE 或 PlatformIO CMake + GCC,命令行为主
上传方式 一键上传(按住 BOOTSEL 插入 USB) 生成 .uf2 文件,手动拖拽或 picotool
性能开销 几乎无差异(底层调用相同 SDK) 直接调用 SDK,无中间封装
高级特性支持 部分支持(如 PIO、多核) 完全支持,官方文档齐全

三、性能与资源占用

很多初学者担心 Arduino 风格是否“更慢”或“更占内存”。实际上,两种方式编译出的机器码效率基本一致:

  • 函数调用:Arduino 的 digitalWrite() 最终调用的也是 SDK 的 gpio_put(),现代编译器会内联简单函数,实际指令数相差无几。
  • 内存占用:Arduino 框架会多链接一些库代码,但对于 Pico 的 2MB Flash / 264KB RAM 来说,这点差异通常可以忽略(例如一个简单 LED 闪烁程序,Arduino 版本可能多占用几 KB Flash)。
  • 实时性delay()sleep_ms() 底层都使用硬件定时器或忙等待,精度相当。

只有在极端性能场景(如高频中断、PIO 程序、多核同步)下,原生 SDK 可以让你直接操作寄存器,获得理论最优性能。但对绝大多数项目,Arduino 风格完全够用。


四、开发体验对比

Arduino 风格的优势

  • 上手极快:5 分钟就能让 LED 闪烁,成就感满满。
  • 无需配置环境:安装 Arduino IDE,添加板卡 URL,选择开发板即可。
  • 大量现成库:控制 OLED、WiFi、传感器等,常常只需几行代码。
  • 串口监视器集成:一键查看输出,无需额外工具。

原生 SDK 风格的优势

  • 官方支持:SDK 由树莓派基金会维护,文档详尽,示例丰富。
  • 完全可控:可以深度定制时钟、外设、中断等,适合专业项目。
  • 多核与 PIO:原生 SDK 对 Pico 的特色功能(如 PIO 状态机、双核通信)支持最完整。
  • 调试能力:配合 SWD 调试器,可以进行断点、单步调试,排查复杂问题。

五、如何选择?

选择 Arduino 风格,如果你:

  • 刚开始接触嵌入式开发,希望快速实现有趣的功能。
  • 手头有大量 Arduino 教程或代码想复用。
  • 更看重开发效率而非底层细节。
  • 习惯使用 Arduino IDE 或 PlatformIO 的图形化界面。

选择原生 SDK 风格,如果你:

  • 希望系统学习嵌入式开发,了解硬件工作原理。
  • 需要用到 Pico 的特色外设(PIO、多核、USB 主机等)。
  • 追求最大性能或最小代码体积。
  • 已经有一定 C/C++ 基础,愿意使用命令行工具和 CMake。

六、两全其美:混合使用

你并不需要二选一!在 Arduino 风格的代码中,你可以直接调用 SDK 函数,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <pico/stdlib.h>  // 在 Arduino 环境中也能包含

void setup() {
Serial.begin(115200);
gpio_init(25); // 直接使用 SDK 函数
gpio_set_dir(25, GPIO_OUT);
}

void loop() {
gpio_put(25, 1);
delay(1000);
gpio_put(25, 0);
delay(1000);
}

这样既能享受 Arduino 的便捷,又能随时使用 SDK 的底层能力。


七、总结

Raspberry Pi Pico 之所以广受欢迎,一个重要原因就是它提供了多种开发路径,满足不同层次开发者的需求。无论你选择 Arduino 风格 的简洁高效,还是 原生 SDK 风格 的深入掌控,都能借助 Pico 强大的硬件实现丰富的创意。

对于初学者,我的建议是:从 Arduino 风格起步,快速建立信心;随着项目复杂度的提升,逐步尝试原生 SDK,解锁更多硬件特性。 两种方式各有千秋,了解它们的异同后,你便能在合适的场景中选择最顺手的工具。

希望这篇文章能帮助你理清思路,在 Pico 的探索之路上走得更稳、更远。如果你在实践中遇到任何问题,欢迎随时交流!


Pi-Pico编程风格
https://ka5fxt.cn/2026/03/29/Pi-Pico编程风格/
发布于
2026年3月29日
许可协议