
操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载本篇技术指南以 RT-Thread 仓库中 bsp/raspberry-pico/RP2350 的官方 BSP 文档为核心完整讲解如何在 Linux 环境下为树莓派 RP2350 芯片编译 RT-Thread 固件、通过 UF2 文件完成烧写并结合仓库源码剖析其时钟、系统节拍、堆内存与串口控制台的初始化流程。读完本文你将能够在基于 RP2350 的 Pico 开发板上快速跑起 RT-Thread 与 msh 命令行并在此基础上按需裁剪外设驱动。RP2350 与 BSP 概览Raspberry RP2350 是树莓派推出的高性能微控制器芯片该 BSP 面向搭载此芯片的开发板。根据 README 的产品介绍其主要特性如下双核双架构设计可选择 Arm Cortex-M33 或 Hazard3 RISC-V 内核兼顾生态兼容与架构灵活性150MHz 主频520KB RAM、2MB Flash算力与存储资源足以承载 RT-Thread 完整内核、Shell 组件及多种外设驱动高度集成、超小尺寸板卡尺寸仅 25 × 20.5mm集成锂电池充电管理与电池电压监测并引出 11 个 IO低功耗休眠功耗仅 25uA文档标称值适合电池供电的物联网场景支持 C/C 与 MicroPython编程单面布局、半孔工艺可直接用于贴片量产。该 BSP 位于仓库bsp/raspberry-pico/RP2350目录与同仓库的 RP2040 BSP 共用bsp/raspberry-pico/libraries/Drivers下的通用驱动实现UART、GPIO、SPI、I2C、PWM、ADC、RTC、WDT 等并额外引入raspberrypi-pico-rp2350-sdk软件包作为底层 SDK。BSP 工程结构与关键文件编译前先了解 BSP 的目录组织便于后续按图索骥路径作用applications/main.c应用入口默认实现 LED 闪烁与 Hello, RT-Thread! 打印board/board.c板级初始化堆、系统时钟、SysTick、串口与控制台board/board.h定义 SRAM 大小与堆区边界HEAP_BEGIN / HEAP_ENDboard/Kconfig外设驱动开关与引脚复用的菜单配置KconfigBSP 顶层配置入口声明 SOC_RP2350 并关联 SDK 包SConstructscons 构建入口自动进入 SDK 包目录完成子构建SConscript递归收集子目录中的 SConscript 参与构建rtconfig.h编译期配置内核、组件、外设、引脚号rtconfig.py工具链与编译/链接参数包含 UF2 生成步骤link.ld链接脚本tools/picotool官方 picotool 工具用于 elf → uf2 转换及命令行烧写编译环境准备Linux文档明确注明当前 BSP 需要在 Linux 环境下编译测试环境为 Ubuntu 21并建议 gcc 版本不低于 6.x。构建依赖 RT-Thread 的 menuconfig 配置系统与在线软件包管理器因此需预先安装 scons、gcc、arm-none-eabi 工具链等基础环境。Step 1下载 SDK 软件包在 BSP 目录bsp/raspberry-pico/RP2350下执行menuconfig pkgs --updatemenuconfig打开图形化配置界面可在此调整内核选项与各外设驱动pkgs --update会根据配置自动下载raspberrypi-pico-rp2350-sdk软件包。该依赖关系在 Kconfig 中已声明config SOC_RP2350会自动select PKG_USING_RASPBERRYPI_PICO_RP2350_SDK并在 rtconfig.h 中体现为PKG_USING_RASPBERRYPI_PICO_RP2350_SDK与..._LATEST_VERSION两个宏。SDK 包下载后落在packages目录构建时由 SConstruct 通过find_package_path定位并进入该目录执行子构建。编译固件Step 2使用 scons 编译scons -c sconsscons -c清理上一次的构建产物避免残留对象文件造成链接错误scons执行增量编译并链接。工具链在 rtconfig.py 中定义架构为arm、CPU 为cortex-m33交叉编译器前缀为arm-none-eabi-并带有-marcharmv8-m.mainfpdsp -mcpucortex-m33 -mthumb -mfloat-abisoftfp -mfpufpv5-sp-d16 -mcmse等针对 Cortex-M33 安全扩展TrustZone的编译选项。默认BUILD debug采用-O3 -gdwarf-2 -g优化与调试信息级别。Step 3生成 UF2 烧写文件编译结束后构建脚本会自动生成UF2 烧写文件。在 rtconfig.py 的POST_ACTION中可以看到完整流程POST_ACTION OBJCPY -O binary $TARGET rtthread.bin\n SIZE $TARGET \n ... POST_ACTION {0} uf2 convert --quiet rtthread-pico.elf rtthread-pico.uf2 --family rp2350-arm-s --abs-block.format(elf2uf2_path)即先用arm-none-eabi-objcopy将 ELF 转换为rtthread.bin并打印 size 信息再调用 BSP 自带的tools/picotool执行uf2 convert将rtthread-pico.elf转换为rtthread-pico.uf2。注意这里指定的 family 为rp2350-arm-sARM Secure 变体与 rtconfig.h 中ARCH_ARM_CORTEX_SECURErtconfig.h的配置相互呼应即默认编译 ARM 安全态镜像。最终产物为rtthread-pico.uf2文件位于 BSP 根目录。烧写方式两种方式一U 盘拖拽烧写推荐按住开发板上的boot 按键再短按重启按键进入 U 盘烧写模式将 RP2350 板通过 USB 插入电脑系统会识别出一个U 盘将编译生成的rtthread-pico.uf2文件复制到该 U 盘根目录固件写入完成后开发板自动重启运行无需额外操作。方式二picotool 命令行烧写进入 boot 模式后也可以使用 BSP 附带的 picotool 工具执行烧写与重启picotool load rtthread-pico.uf2 picotool rebootpicotool load将 UF2 镜像加载到板载 Flashpicotool reboot触发开发板重启进入用户固件。运行结果烧写并重启后通过串口终端对应 UART0默认波特率取决于 SDK 配置可看到如下输出\ | / - RT - Thread Operating System / | \ 4.0.3 build Jan 28 2021 2006 - 2021 Copyright by rt-thread team Hello, RT-Thread! msh 其中RT-Thread 版本横幅与版权信息由内核打印Hello, RT-Thread!来自 applications/main.c 的rt_kprintfmsh 表明 FinSH 命令行组件已启动可以输入 RT-Thread 内置命令进行交互调试。说明横幅中显示的版本号 4.0.3 build Jan 28 2021 为 BSP 文档保留的示例输出实际构建时版本信息以你当前仓库RT_VER_NUMrtconfig.h 中为 0x50300及编译日期为准。板级初始化源码解析理解 BSP 的启动脉络有助于后续自行裁剪。板级初始化集中在 board/board.c 的rt_hw_board_init()void rt_hw_board_init() { #ifdef RT_USING_HEAP rt_system_heap_init(HEAP_BEGIN, HEAP_END); #endif set_sys_clock_khz(PLL_SYS_KHZ, true); alarm_pool_init_default(); systick_config(clock_get_hz(clk_sys) / RT_TICK_PER_SECOND); #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif #ifdef RT_USING_SERIAL stdio_init_all(); rt_hw_uart_init(); #endif #ifdef RT_USING_CONSOLE rt_console_set_device(RT_CONSOLE_DEVICE_NAME); #endif }关键点逐项说明堆初始化rt_system_heap_init(HEAP_BEGIN, HEAP_END)将堆区交由内核动态内存管理。堆边界定义在 board/board.hPICO_SRAM_SIZE为 520KBPICO_SRAM_END为0x20000000 520 * 1024HEAP_BEGIN为链接脚本中的栈符号_sstack即从栈顶到 SRAM 末尾的整段空间系统时钟set_sys_clock_khz(PLL_SYS_KHZ, true)将系统主频配置为150 * 1000kHz150MHzPLL_SYS_KHZ定义于 board.c系统节拍systick_config(clock_get_hz(clk_sys) / RT_TICK_PER_SECOND)用 Cortex-M33 的 SysTick 产生 RT-Thread 时基RT_TICK_PER_SECOND默认 100rtconfig.h即 10ms 一个 tick。节拍中断服务函数SysTick_Handlerboard.c通过rt_interrupt_enter()/rt_tick_increase()/rt_interrupt_leave()驱动内核调度器串口与控制台stdio_init_all()初始化 Pico SDK 标准 IOrt_hw_uart_init()注册 UART 设备驱动最后rt_console_set_device(RT_CONSOLE_DEVICE_NAME)将控制台设备设为uart0rtconfig.h。默认应用LED 闪烁示例applications/main.c 是默认的用户主函数演示了 RT-Thread PIN 设备 API 的基本用法#define LED_PIN 25 int main() { rt_kprintf(Hello, RT-Thread!\n); rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED_PIN, 1); rt_thread_mdelay(1000); rt_pin_write(LED_PIN, 0); rt_thread_mdelay(1000); } return 0; }rt_pin_mode/rt_pin_write来自 RT-Thread 统一 PIN 设备驱动框架由BSP_USING_PINrtconfig.h使能板载 LED 接在 GP25与 RP2040 BSP 一致每 1 秒翻转一次电平形成可观察的闪烁rt_thread_mdelay让出 CPU体现 RT-Thread 的线程化时间管理。外设支持与配置README 给出当前 BSP 支持的外设总览DriveSupportRemarkUARTSupportUART0/1GPIOSupport0-29默认rtconfig.h中已使能 UART0TXGP0、RXGP1见 rtconfig.h与 GPIO。在 board/Kconfig 中还可以开启更丰富的外设均通过menuconfig图形界面勾选后重新scons生效UART0 / UART1支持多个引脚复用选择。UART0 的 TX 可选 GP0/12/16RX 可选 GP1/13/17UART1 的 TX 可选 GP4/8RX 可选 GP5/9board/KconfigSPI0 / SPI1MOSI、MISO、SCK、CS 均提供多组引脚选择硬件 I2C0 / I2C1SCL/SDA 提供多组引脚映射PWM0 ~ PWM7覆盖全部 8 组 PWM sliceA/B 通道引脚可选ADC0/1/2对应 GP26/27/28WDT、RTC、片上 Flash配合 FAL等软件 I2C / 软件 SPIswi2c1、swspi0、swspi1适合引脚受限场景。此外板级配置还预留了两类生态集成选项BSP_USING_ARDUINOboard/Kconfig启用 RTduino 兼容层自动联动 UART1、GPIO、ADC、PWM、I2C、SPI 等驱动并默认将 SPI/I2C 引脚切换为 Arduino 布局BSP_USING_LVGLboard/Kconfig为 LCD 屏接 LVGL 图形库可附带官方 LVGL demo。对应的驱动实现位于 bsp/raspberry-pico/libraries/Driversdrv_uart.c、drv_gpio.c、drv_spi.c、drv_i2c.c、drv_pwm.c、drv_adc.c、drv_rtc.c、drv_wdt.c、drv_flash.c、drv_timer.cRP2040 与 RP2350 两个 BSP 共享这套驱动层。总结通过本文你可以完整走通 RT-Thread 在 Raspberry RP2350 上的开发闭环menuconfigpkgs --update拉取 SDK →scons编译生成rtthread-pico.uf2→ 进入 U 盘模式拖拽烧写或picotool命令行烧写 → 串口看到 RT-Thread 启动横幅与msh命令行。同时board.c 的初始化顺序与 board/Kconfig 的外设裁剪方式也为二次开发与驱动移植提供了清晰的参照。赞分享操作系统嵌入式物联网嵌入式OSRTOS【免费下载链接】rt-threadRT-Thread is an open source IoT Real-Time Operating System (RTOS). https://rt-thread.github.io/rt-thread/项目地址https://gitcode.com/gh_mirrors/rt/rt-thread点击查看免费下载相关推荐RT-Thread Raspberry Pi 3-64 BSP 移植指南环境搭建、镜像烧写与驱动支持详解RT Thread Raspberry Pi 3 64 BSP 移植指南环境搭建、镜像烧写与驱动支持详解 Raspberry Pi 3树莓派 3是价格亲民操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 在 MM32F103RBMM32 MiniBoard上的移植实战BSP 上手、编译烧写与源码解析RT Thread 在 MM32F103RBMM32 MiniBoard上的移植实战BSP 上手、编译烧写与源码解析 本篇技术指南以 RT Thread操作系统嵌入式物联网嵌入式OSRTOSRT-Thread Smart 在 Allwinner D1RISC-V64上的移植指南环境搭建、编译与烧录验证RT Thread Smart 在 Allwinner D1RISC V64上的移植指南环境搭建、编译与烧录验证 全志 D1d1 allwinner n操作系统嵌入式物联网嵌入式OSRTOS上一篇CANN hcomm通道获取API下一篇5分钟上手zip库从安装到创建第一个ZIP文件的快速教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考