操作系统嵌入式物联网嵌入式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 仓库中瑞萨 CPK-RA6M4 开发板的 BSP 说明文档bsp-template/README.md结合 ra6m4-cpk 板级目录的真实源码展开完整覆盖开发板硬件资源、片上/外接外设支持清单、MDK5 编译与 J-Flash Lite 烧录流程、应用入口函数写法以及进阶场景下的 FSP 外设配置、ENV 工具配置与 SEGGER_RTT 控制台技巧。读完本文你可以独立把 RT-Thread 跑在 CPK-RA6M4 上并知道如何为这块板添加新的 UART、ICU、WDT、RTC 等外设驱动。开发板与硬件资源CPK-RA6M4 是瑞萨基于 RA6M4 系列 MCU 推出的 MCU 评估板面向 RA6M4 MCU 群组特性的评估与嵌入式应用开发。开发板正面外观如下核心板载资源如下资源说明MCUR7FA6M4AF3CFB主频 200MHzArm Cortex-M33 内核存储1MB 代码闪存256kB SRAM调试接口板载 J-Link 接口扩展接口两个 PMOD 连接器从源码的 Kconfig 可以看到该 BSP 的 SoC 配置项为SOC_R7FA6M4AF并自动选择SOC_SERIES_R7FA6M4、RT_USING_COMPONENTS_INIT与RT_USING_USER_MAIN即默认启用组件初始化框架和用户main函数入口。BSP 源码结构以 ra6m4-cpk 目录为例BSP 的整体组织是理解 FSP 工作流的基础ra6m4-cpk/ ├── board/ # 板级初始化board.h、board_init.c、board_leds.c、ports 端口驱动 ├── ra/ │ ├── board/ # RA 芯片级 board 文件 │ └── fsp/ # 瑞萨 FSP 驱动库bsp/r_ioport/r_sci_uart 等 ├── ra_cfg/fsp_cfg/ # FSP 生成的配置头文件bsp_cfg.h、r_ioport_cfg.h、r_sci_uart_cfg.h 等 ├── ra_gen/ # FSP 生成的运行时数据hal_data.c、vector_data.c、pin_data.c、main.c ├── script/ # 链接脚本fsp.scat、fsp.ld、memory_regions 系列 ├── src/hal_entry.c # 应用层入口函数 ├── Kconfig # BSP 配置入口rsource 共享的 ../libraries/Kconfig ├── configuration.xml # FSPrasc工程配置文件 ├── R7FA6M4AF3CFB.pincfg # 引脚配置 └── project.uvprojx # MDK5 工程文件可以推断ra_cfg与ra_gen两类目录都是 FSP 工具链的生成产物前者存放编译期配置宏后者存放 HAL 运行期数据结构与向量表。这也是后文“用 FSP 重新生成工程内容”步骤需要更新这两处目录的原因。内存布局方面board/board.h 定义了 SRAM 边界与堆起点#define RA_SRAM_SIZE 256 #define RA_SRAM_END (0x20000000 RA_SRAM_SIZE * 1024) #ifdef __ARMCC_VERSION extern int Image$$RAM_END$$ZI$$Base; #define HEAP_BEGIN ((void *)Image$$RAM_END$$ZI$$Base) ... #define HEAP_END RA_SRAM_END即 SRAM 起始于0x20000000大小 256kB堆Heap从ZI段结束处一直延伸到RA_SRAM_END。内核侧关键参数可在 rtconfig.h 中确认RT_TICK_PER_SECOND 1000、RT_THREAD_PRIORITY_MAX 32、RT_ALIGN_SIZE 8并开启了溢出检查、钩子机制、空闲线程钩子栈 256 字节与软定时器线程栈 512 字节。外设支持情况本 BSP 目前的片上外设支持情况如下片上外设支持情况备注UART支持UART7 为默认日志输出端口GPIO支持IIC支持软件 IICWDT支持RTC支持ADC支持DAC支持SPI支持FLASH支持PWM支持CAN支持SEGGER_RTT支持可作为 console 输出免去 USB 转串口外接模块方面该 BSP 已适配RW007 WiFi 网络模块对应 board/ports/drv_rw007.c 驱动源码、HS300x 温湿度模块、zmod4410 室内空气质量模块、isl29035 光线传感器模块这些模块均以 RT-Thread 软件包形式提供。此外板级目录还预留了 LVGL 显示移植与 FALFlash 抽象层见 board/ports/fal_cfg.h配置。快速上手该 BSP 提供 MDK5 工程project.uvprojx。下面以 MDK5 开发环境为例介绍如何把系统跑起来。硬件连接使用 USB 数据线连接开发板到 PC通过板载 J-Link 接口下载和调试程序使用 USB 转串口工具连接 UART7P613TXD、P614RXD这是默认的日志与 shell 输出端口。MDK 编译与烧录编译双击project.uvprojx打开 MDK5 工程并编译。编译产物为/object/ra6m4.hex。直接下载如果不需要在线调试可配置好 Flash 下载算法后直接在 MDK 中点击 Download 烧录。使用 J-Flash Lite 烧录该工程推荐使用 J-Flash Lite 工具建议 V7.50 及以上版本烧录步骤为打开 J-Flash Lite选择芯片型号R7FA6M4AF点击 OK 进入工具选择 BSP 目录下 MDK 编译出的/object/ra6m4.hex文件点击 Program Device 按钮开始烧录。J-Flash Lite 中选择 hex 文件的界面如下查看运行结果烧录成功后系统自动运行。在终端工具中打开对应串口115200-8-1-N复位设备后可看到 RT-Thread 启动信息输入help可列出系统命令\ | / - RT - Thread Operating System / | \ 4.0.4 build Oct 11 2021 2006 - 2021 Copyright by rt-thread team Hello RT-Thread! msh msh help RT-Thread shell commands: reboot - Reboot System help - RT - Thread shell help. ps - List threads in the system. free - Show the memory usage in the system. hello - say hello world clear - clear the terminal screen version - show RT - Thread version information list_thread - list thread list_sem - list semaphore in system list_event - list event in system list_mutex - list mutex in system list_mailbox - list mail box in system list_msgqueue - list message queue in system list_timer - list timer in system list_device - list device in system list - list all commands in system msh 应用入口函数应用层入口函数为 src/hal_entry.c 中的void hal_entry(void)用户编写的源文件可直接放在src目录下。默认实现是打印 Hello 并以 1 秒周期翻转 LED3#define LED3_PIN BSP_IO_PORT_01_PIN_06 #define USER_INPUT P105 void hal_entry(void) { rt_kprintf(\nHello RT-Thread!\n); while (1) { rt_pin_write(LED3_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED3_PIN, PIN_LOW); rt_thread_mdelay(500); } }其中LED3_PIN被映射到 FSP 的 IO Port 0 第 6 脚BSP_IO_PORT_01_PIN_06命名遵循瑞萨 “Port01 Port0” 的编号习惯。同一个文件还附赠了 GPIO 中断ICU示例命令icu_sample非 NANO 内核下可用它把P105配置为上升沿触发的 RT-Thread 引脚中断void icu_sample(void) { rt_uint32_t pin rt_pin_get(USER_INPUT); rt_kprintf(\n pin number : 0x%04X \n, pin); rt_err_t err rt_pin_attach_irq(pin, PIN_IRQ_MODE_RISING, irq_callback_test, RT_NULL); if(RT_EOK ! err) { rt_kprintf(\n attach irq failed. \n); } err rt_pin_irq_enable(pin, PIN_IRQ_ENABLE); ... } MSH_CMD_EXPORT(icu_sample, icu sample);在 shell 中执行icu_sample即可把 P105 挂接为中断输入触发时回调irq_callback_test打印IRQ00 triggered——这个例子的 FSP 侧配置方法与下文 GPIO 中断章节完全对应。进阶使用FSP 外设配置需要修改瑞萨侧的外设配置或添加新的外设端口时必须使用瑞萨的 FSPFlexible Software Package配置工具。务必注意FSP 版本请使用 3.5.0旧版本可能存在兼容性问题。完整方法可参阅仓库内的 RA系列使用FSP配置外设驱动.md核心流程如下。准备工作安装 FSP 3.5.0从瑞萨官网下载 Flexible Software Package 并安装。导入 CPK-RA6M4 官方板级支持包在 CPK-RA6M4 开发板详情页的“下载”列表中找到“CPK-RA6M4 板级支持包”下载后按瑞萨《如何导入板级支持包》文档将其添加到 FSP 中。在 MDK 中添加启动 FSP 的自定义命令打开 MDK选择 “Tools - Customize Tools Menu…”点击 “new” 图标添加一条自定义命令命名为RA Smart ConfiguratorCommand 填入 FSP 安装目录下rasc.exe的完整路径Initial Folder 填$PArguments 填--device $D --compiler ARMv6 configuration.xml之后通过菜单 “Tools - RA smart Configurator” 即可打开当前工程的 FSP 配置工程根目录的 configuration.xml 即 FSP 工程描述文件。打开 RASC 前请务必先检查 FSP version、Board、Device 三项配置是否正确。添加与配置外设命名约定FSP 文档中各外设添加步骤均为独立说明排版顺序不代表添加顺序遇到引脚冲突需查阅开发板与芯片手册。所有外设配置完成后点击Generate Project Content生成/更新ra_cfg、ra_gen目录下的代码。由于 RT-Thread 的瑞萨系列驱动按固定的实例命名查找 FSP 生成对象因此name、channel、callback 的命名必须与驱动约定一致典型约定包括UART在 Stacks 页选择 New Stack - UART将 name、channel、callback 设为一致的标号如uart7对应 channel 7GPIO 中断ICU例如选 P105 作中断引脚先查其可配置的 IRQ 通道号IRQ00打开该 IRQ 通道并创建 stackname 与 channel 保持一致callback 统一命名为irq_callback再选择触发方式验证代码即上文icu_sample命令WDTRT-Thread 侧只注册了一个 WDT 设备未编号新创建时 name 字段应为g_wdtRTC同样只有一个 RTC 设备name 应为g_rtcCallback 命名为rtc_callback。生成后更新工程FSP 生成新文件后不会立即加入 MDK 工程需要先编译一次若弹出导入新文件的提示选择“是”再次编译即可。除 MDK 自定义命令外也可以在 env 流程下操作先用scons --targetmdk5生成 MDK 工程打开project.uvprojx在导航栏Software Components中展开Flex Software点击RA Configuration旁的配置按钮工具会自动查找本机已安装的 FSP 版本选定后即可进入配置界面流程相同。ENV 工具配置本 BSP 默认只开启了 UART7 功能。若需启用更多高级功能组件、软件包、其他外设驱动需要利用 ENV 工具配置步骤如下在 BSP 目录下打开 env 工具输入menuconfig命令配置工程配置完成后保存退出输入pkgs --update命令更新软件包输入scons --targetmdk5命令重新生成 MDK5 工程。其中menuconfig的配置项来源于 Kconfig除标准 RT-Thread 内核配置外它通过rsource ../libraries/Kconfig引入瑞萨系列共享库HAL 驱动、板级组件的配置树非 NANO 内核还会加载 board/Kconfig 中的板载设备驱动选项RW007、FAL、LCD 等。使用 SEGGER_RTT 作为 console由于 RA6M4 的串口输出需要 USB 转 TTL 工具比较不方便。RT-Thread 社区提供 RTTHREAD_SEGGER_TOOL 软件包可以把 J-Link 直接作为 RT-Thread 的 console 口在RT-Thread Settings - 硬件 - 板载设备驱动下使能 SEGGER-RTT重新生成工程后调试器连接即可直接看到 shell 输出无需外接串口。FAQMDK 调试时提示 “Error: Flash Download failed Cortex-M33”这是 Cortex-M33 目标下常见的 Flash 下载算法选择问题可修改 Utilities 中的选项解决小结该 BSP 以“FSP 负责外设实例化、RT-Thread 设备驱动负责系统抽象”的双层结构组织configuration.xml FSP 生成ra_cfg/ra_gen板级层board/完成堆栈、LED、引脚与外设实例的初始化应用层从hal_entry()切入。快速上手只需 MDK5 编译 J-Flash Lite 烧录两条命令级操作而扩展新外设时关键约束只有一条——严格遵循 FSP 实例的命名约定再配合scons --targetmdk5重新生成工程即可让新的 UART、ICU、WDT、RTC 等实例被 RT-Thread 设备框架正确识别。赞分享操作系统嵌入式物联网嵌入式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 RA 系列 BSP 外设驱动扩展实战以 ra6m4-cpk 新增 UART9 为例RT Thread RA 系列 BSP 外设驱动扩展实战以 ra6m4 cpk 新增 UART9 为例 本文为需要在 RT Thread 的瑞萨Renesa操作系统嵌入式物联网嵌入式OSRTOSRT-Thread 瑞萨 RA 系列 BSP通过 ENV 与 FSP 配置开启片上外设驱动的完整实战教程RT Thread 瑞萨 RA 系列 BSP通过 ENV 与 FSP 配置开启片上外设驱动的完整实战教程 本文以 RT Thread 中瑞萨 RA 系列 BS操作系统嵌入式物联网嵌入式OSRTOSGD32470I-EVAL 评估板 RT-Thread BSP 使用指南从快速上手到外设配置全解析GD32470I EVAL 评估板 RT Thread BSP 使用指南从快速上手到外设配置全解析 GD32470I EVAL 是 RT Thread 仓库中操作系统嵌入式物联网嵌入式OSRTOS上一篇cleanlab 数据估值指南用 data_shapley_knn 与 Datalab 量化每个样本对模型训练的贡献下一篇KKManagerIllusion游戏模组管理器的完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
