raspberrypi/pico-sdk

GitHub: raspberrypi/pico-sdk

树莓派官方推出的 RP 系列微控制器 C/C++ SDK,为 Pico 等嵌入式设备提供完整的硬件抽象 API 与构建工具链。

Stars: 4868 | Forks: 1252

# Raspberry Pi Pico SDK Raspberry Pi Pico SDK(以下简称 SDK)提供了必要的头文件、库和构建系统, 以便使用 C、C++ 或汇编语言为基于 RP 系列微控制器的设备(如 Raspberry Pi Pico 或 Raspberry Pi Pico 2)编写程序。 SDK 旨在提供一套 API 和编程环境,让非嵌入式 C 开发者和嵌入式 C 开发者都能感到熟悉。 设备同一时间只运行一个程序,并以传统的 `main()` 方法启动。支持标准的 C/C++ 库, 同时还提供 C 语言级别的库/API,用于访问 RP 系列微控制器的所有硬件,包括 PIO (Programmable IO)。 此外,SDK 还提供了更高层的库,用于处理定时器、同步、Wi-Fi 和蓝牙网络、USB 以及多核编程。这些库的功能非常全面,您的应用程序代码几乎不需要(如果有的话)直接访问硬件寄存器。不过,如果您确实需要或更喜欢直接访问原始硬件寄存器,您也会在 SDK 中找到完整且带有详细注释的寄存器定义头文件。完全不需要在数据手册中查阅地址。 SDK 可用于构建各种内容,从简单的应用程序、完整的运行时环境(如 MicroPython),再到底层软件 (例如 RP 系列微控制器本身的片上 bootrom)。 整个 SDK 的设计目标是简单而强大。 尚未准备好纳入 SDK 的其他库/API 可以在 [pico-extras](https://github.com/raspberrypi/pico-extras) 中找到。 # 文档 请参阅 [Raspberry Pi Pico 系列入门指南](https://rptl.io/pico-get-started),了解如何设置您的硬件、 IDE/环境,以及如何为 Raspberry Pi Pico 和其他基于 RP 系列微控制器的设备构建和调试软件。 请参阅[使用 Raspberry Pi Pico W 连接到互联网](https://rptl.io/picow-connect),详细了解如何为您的 Raspberry Pi Pico W 编写可连接到互联网的应用程序。 请参阅 [Raspberry Pi Pico 系列 C/C++ SDK](https://rptl.io/pico-c-sdk),详细了解如何使用 SDK 进行编程,探索更高级的功能,并查看完整的基于 PDF 的 API 文档。 请参阅[在线 Raspberry Pi Pico SDK API 文档](https://rptl.io/pico-doxygen)以获取基于 HTML 的 API 文档。 # 示例代码 请参阅 [pico-examples](https://github.com/raspberrypi/pico-examples) 获取您可以构建的示例代码。 # 获取最新的 SDK 代码 GitHub 上 `pico-sdk` 的 [master](https://github.com/raspberrypi/pico-sdk/tree/master/) 分支包含 SDK 的_最新稳定版本_。如果您需要或想要测试即将推出的功能,可以尝试使用 [develop](https://github.com/raspberrypi/pico-sdk/tree/develop/) 分支。 # 快速启动您自己的项目 ## 使用 Visual Studio Code 您可以在 VS Code 中安装 [Raspberry Pi Pico Visual Studio Code 扩展](https://marketplace.visualstudio.com/items?itemName=raspberry-pi.raspberry-pi-pico)。 ## Unix 命令行 这些说明非常简明,且仅适用于基于 Linux 的系统。有关详细步骤、 其他平台的说明,以及一般性指导,我们建议您参阅 [Raspberry Pi Pico 系列 C/C++ SDK](https://rptl.io/pico-c-sdk) 1. 安装 CMake(至少为 3.13 版本)、python 3、本地编译器以及 GCC 交叉编译器 sudo apt install cmake python3 build-essential gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib 2. 设置您的项目以指向使用 Raspberry Pi Pico SDK * 将 SDK 克隆到本地(最常见): 1. `git clone` 此 Raspberry Pi Pico SDK 仓库 2. 将 [pico_sdk_import.cmake](https://github.com/raspberrypi/pico-sdk/blob/master/external/pico_sdk_import.cmake) 从 SDK 复制到您的项目目录中 3. 在您的环境中将 `PICO_SDK_PATH` 设置为 SDK 的位置,或者稍后将其 (`-DPICO_SDK_PATH=`) 传递给 cmake。 4. 设置一个 `CMakeLists.txt`,如下所示: cmake_minimum_required(VERSION 3.13...3.27) # 基于 PICO_SDK_PATH 初始化 SDK # 注意:这必须在 project() 之前完成 include(pico_sdk_import.cmake) project(my_project) # 初始化 Raspberry Pi Pico SDK pico_sdk_init() # 项目的其余部分 * 或者将 Raspberry Pi Pico SDK 作为 submodule: 1. 将 SDK 克隆为名为 `pico-sdk` 的 submodule 2. 设置一个 `CMakeLists.txt`,如下所示: cmake_minimum_required(VERSION 3.13...3.27) # 从 submodule 初始化 pico-sdk # 注意:这必须在 project() 之前完成 include(pico-sdk/pico_sdk_init.cmake) project(my_project) # 初始化 Raspberry Pi Pico SDK pico_sdk_init() # 项目的其余部分 * 或者从 GitHub 自动下载: 1. 将 [pico_sdk_import.cmake](https://github.com/raspberrypi/pico-sdk/blob/master/external/pico_sdk_import.cmake) 从 SDK 复制到您的项目目录中 2. 设置一个 `CMakeLists.txt`,如下所示: cmake_minimum_required(VERSION 3.13) # 从 GIT 初始化 pico-sdk # (注意,这可以来自环境、CMake 缓存等) set(PICO_SDK_FETCH_FROM_GIT on) # pico_sdk_import.cmake 是从此 SDK 复制的单个文件 # 注意:这必须在 project() 之前完成 include(pico_sdk_import.cmake) project(my_project) # 初始化 Raspberry Pi Pico SDK pico_sdk_init() # 项目的其余部分 * 或者将 SDK 克隆到本地,但不复制 `pico_sdk_import.cmake`: 1. `git clone` 此 Raspberry Pi Pico SDK 仓库 2. 设置一个 `CMakeLists.txt`,如下所示: cmake_minimum_required(VERSION 3.13) # 直接初始化 SDK include(/path/to/pico-sdk/pico_sdk_init.cmake) project(my_project) # 初始化 Raspberry Pi Pico SDK pico_sdk_init() # 项目的其余部分 3. 编写您的代码(有关更多信息,请参阅 [pico-examples](https://github.com/raspberrypi/pico-examples) 或 [Raspberry Pi Pico 系列 C/C++ SDK](https://rptl.io/pico-c-sdk) 文档) 您能编写的最简单程序就是一个单一的源文件(例如 hello_world.c) #include #include "pico/stdlib.h" int main() { stdio_init_all(); printf("Hello, world!\n"); return 0; } 并将以下内容添加到您的 `CMakeLists.txt` 中: add_executable(hello_world hello_world.c ) # 添加 pico_stdlib library,它聚合了常用功能 target_link_libraries(hello_world pico_stdlib) # 在 ELF 之外额外创建 map/bin/hex/uf2 文件。 pico_add_extra_outputs(hello_world) 请注意,此示例使用默认的 UART 作为 _stdout_; 如果您想使用默认的 USB,请参阅 [hello-usb](https://github.com/raspberrypi/pico-examples/tree/master/hello_world/usb) 示例。 4. 设置一个 CMake 构建目录。 例如,如果不使用 IDE: $ cmake -S . -B build 当为 Raspberry Pi Pico 以外的板卡构建时,您应该将 `-DPICO_BOARD=board_name` 传递给上面的 `cmake` 命令,例如 `cmake -S . -B build -DPICO_BOARD=pico2` 或 `cmake -S . -B build -DPICO_BOARD=pico_w`,以便针对该特定板卡相应地配置 SDK 和构建选项。 指定 `PICO_BOARD=` 会设置各种编译器定义(例如 UART 和其他硬件的默认引脚号),并且在某些 情况下还会启用额外的库(例如为 `PICO_BOARD=pico_w` 构建时的无线支持),如果没有提供所需硬件功能的板卡,这些库是无法 构建的。 有关 SDK 本身定义的板卡列表,请查看[此目录](src/boards/include/boards),其中包含 每个指定板卡的头文件。 5. 从您创建的构建目录中构建您的目标。 $ cmake --build build --target hello_world 6. 您现在拥有了可以通过调试器加载的 `hello_world.elf`,或者可以通过拖拽的方式安装并在您的 Raspberry Pi Pico 系列设备上运行的 `hello_world.uf2`。 # RP2350 上的 RISC-V 支持 有关在 RP2350 上设置 RISC-V 构建环境的信息,请参阅 [Raspberry Pi Pico 系列 C/C++ SDK](https://rptl.io/pico-c-sdk)。 ## RISC-V 快速入门 [pico-sdk-tools](https://github.com/raspberrypi/pico-sdk-tools/releases) 仓库包含一些预编译版本的 RISC-V 编译器。 例如,您可以使用它们在 Raspberry Pi OS 上获取可用的 RISC-V 编译器。 ``` wget https://github.com/raspberrypi/pico-sdk-tools/releases/download/v2.0.0-5/riscv-toolchain-14-aarch64-lin.tar.gz sudo mkdir -p /opt/riscv/riscv-toolchain-14 sudo chown $USER /opt/riscv/riscv-toolchain-14 tar xvf riscv-toolchain-14-aarch64-lin.tar.gz -C /opt/riscv/riscv-toolchain-14 ``` 要使用 RISC-V 编译器构建代码,您需要设置几个环境变量并重新运行 cmake。 ``` export PICO_TOOLCHAIN_PATH=/opt/riscv/riscv-toolchain-14/ export PICO_PLATFORM=rp2350-riscv ```
标签:Bash脚本, C/C++, 事务性I/O, 客户端加密, 嵌入式开发, 微控制器, 物联网, 硬件驱动, 自动回退, 逆向工具