Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RT-Thread一般讨论
【RSOC26】RT-Thread环境代码学习与工程实操内容,以及后续 Git 分支提交
发布于 2026-08-17 21:40:13 浏览:17
订阅该版
[tocm] # 【RSOC26】RT-Thread 大学生夏令营 Day1 学习总结:星火一号QEMU工程与 Git 分支提交实操 作者:李庭荣(第 4 组) 日期:2026-08-17 内核版本:RT-Thread 4.1.1 本文记录 RT-Thread 夏令营 Day1 的代码学习与工程实操内容,涵盖 RT-Thread 产品线、QEMU A9 示例、STM32F407ZG 周期日志、内核启动与调度机制、FinSH/MSH 命令行,以及后续 Git 分支提交和 Pull Request 审核流程。 ## 一、RT-Thread 产品线与代码使用场景 RT-Thread 的内核与组件可以按资源规模和硬件能力选择: | 版本 | 定位 | 主要能力 | | ------ | ----------------- | ------------------------------------------------------------ | | Nano | 资源受限设备 | 实时调度、线程同步与通信、时钟、中断、内存管理等基础内核能力 | | 标准版 | 常规嵌入式应用 | POSIX API、日志、网络协议栈、IoT 协议和可选中间件 | | Smart | 带 MMU 的复杂设备 | 内核态与用户态隔离,并支持更复杂的应用运行环境 | 本次 STM32F407ZG 实操使用 RT-Thread 标准工程的基础内核与日志能力,重点是理解应用代码如何在线程上下文中运行。 ## 二、QEMU A9 工程的最小应用代码 QEMU A9 示例用于观察 RT-Thread 应用入口和终端输出。最小 `main()` 示例如下: ```c #include
#include
#include
int main(void) { printf("hello rt-thread\\n"); return 0; } ``` 该代码通过 `printf()` 输出 `hello rt-thread`,用于验证应用入口已经被执行。RT-Thread 启动后会创建系统线程并启动调度器,因此应用 `main()` 返回并不表示整个系统结束。 在终端中还可以使用 FinSH/MSH 命令行查看系统状态,例如: ```text help 查看命令帮助 ps 查看线程状态 free 查看动态内存使用情况 reboot 触发系统复位 ``` ## 三、STM32F407ZG 周期日志实操 在 RT-Thread 4.1.1 的 STM32F407ZG 工程中,使用日志组件和线程延时实现周期性输出: ```c #include
#define DBG_TAG "main" #define DBG_LVL DBG_LOG #include
int main(void) { int count = 1; while (count++) { LOG_D("Hello RT-Thread!"); rt_thread_mdelay(1000); } return RT_EOK; } ``` 代码要点如下: - `rtthread.h` 提供内核 API,包括 `rt_thread_mdelay()`。 - `DBG_TAG` 用于标识日志模块,终端中的 `[D/main]` 即由该标签生成。 - `DBG_LVL` 设置当前文件的日志等级。 - `LOG_D()` 输出调试日志。 - `rt_thread_mdelay(1000)` 让当前线程延时约 1 秒。 实操终端已观察到 RT-Thread 启动横幅、MSH 命令行和连续的 `[D/main] Hello RT-Thread!` 输出。这说明当前运行环境可以执行应用线程并输出日志。编译成功、固件下载成功和实体开发板运行属于不同的验证层级,应分别记录。 ## 四、RT-Thread 启动与应用线程 从芯片复位到应用代码运行,核心流程可以概括为: ```text 复位处理函数 -> 初始化栈、.data 和 .bss -> SystemInit() -> rtthread_startup() -> 板级初始化与内核对象初始化 -> 创建 main 线程和 idle 线程 -> 启动调度器 -> main 线程执行应用 main() ``` 启动文件负责建立 C 运行环境,包括初始化栈、复制 `.data` 段、清零 `.bss` 段,并完成基础时钟配置。随后 RT-Thread 进行内核对象、软件定时器和组件初始化。 应用中的 `main()` 不是复位后的第一段裸机代码,而是作为 `main` 线程的入口函数,在调度器启动后运行。系统还会创建优先级最低的 `idle` 线程;当没有其他就绪线程时,`idle` 线程负责运行。 ## 五、线程延时、SysTick 与调度 周期输出示例的关键逻辑如下: ```c LOG_D("Hello RT-Thread!"); rt_thread_mdelay(1000); ``` `rt_thread_mdelay(1000)` 不是空循环等待。调用该函数后,当前 `main` 线程会进入延时挂起状态,调度器可以运行其他就绪线程或 `idle` 线程。延时时间到期后,当前线程重新进入就绪队列,等待再次获得 CPU。 ```text main 线程运行 -> 输出日志 -> 调用 rt_thread_mdelay(1000) -> 当前线程挂起 -> 调度其他线程或 idle 线程 -> 系统节拍到期 -> 当前线程恢复就绪并再次输出日志 ``` 系统节拍通常由 SysTick 定时器产生。每次节拍中断到来时,内核会更新 tick 计数、检查延时线程是否到期、推进软件定时器,并在需要时执行调度。 RT-Thread 使用基于优先级的抢占式调度:数值越小表示优先级越高;高优先级线程就绪时可以抢占低优先级线程;相同优先级线程可以通过时间片轮转共享 CPU。 ## 六、FinSH/MSH 命令行与组件初始化 RT-Thread 的 FinSH/MSH 组件提供交互式命令行。串口收到字符后,相关线程解析命令并执行处理,因此可以在应用线程周期输出日志的同时响应终端输入。 常用命令及作用如下: | 命令 | 作用 | | -------- | -------------------- | | `help` | 显示命令帮助 | | `ps` | 查看系统中线程的状态 | | `free` | 查看动态内存使用情况 | | `reboot` | 触发系统复位 | 在系统启动阶段,通过 `INIT_*_EXPORT` 宏注册的组件初始化函数会按阶段执行。驱动、FinSH/MSH、文件系统和网络组件等都可以通过这一机制接入系统启动过程。 ## 七、后续代码提交与 Pull Request 流程 代码修改完成并完成必要验证后,应基于最新的目标分支创建独立开发分支: ```bash git switch master git pull origin master git switch -c feature-name ``` 确认变更内容正确后,暂存、提交并推送: ```bash git add
git commit -m "Describe the code change" git push -u origin feature-name ``` 推送后,在代码托管平台创建 `feature-name -> master` 的 Pull Request。审核人员检查代码变更、测试结果和提交说明;审核通过后再合并到目标分支。 合并完成后,本地继续开发前重新同步: ```bash git switch master git pull origin master ``` 以上流程仅说明通用代码协作方式,不包含本地目录、仓库地址、账号或具体文件信息。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
流落在外的兔子
这家伙很懒,什么也没写!
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
【最新活动】RT-Thread论坛活动正在进行(2026年5月活动已更新)
4
国产MCU移植系列教程汇总,欢迎查看!
5
机器人操作系统 (ROS2) 和 RT-Thread 通信
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
五分钟玩转RT-Thread新社区
8
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
9
STM32的“GPU”——DMA2D实例详解
10
RT-Thread隐藏的宝藏之completion
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
Bootloader
AT
Hardfault
CAN总线
ART-Pi
FinSH
DMA
USB
RT-Thread
SCons
文件系统
RT-Thread Nano
线程
MQTT
STM32
FAL
rt-smart
BSP
cubemx
RTC
WIZnet_W5500
PWM
I2C_IIC
UART
packages_软件包
GD32
ota在线升级
ESP8266
freemodbus
flash
keil_MDK
编译报错
ADC
潘多拉开发板_Pandora
flashDB
Debug
ulog
msh
rt_mq_消息队列_msg_queue
socket
MicroPython
SDIO总线
中断
SFUD
QEMU
本月问答贡献
crystal266
3
个答案
1
次被采纳
CYFS
3
个答案
1
次被采纳
oxlm
1
个答案
1
次被采纳
王棒棒
1
个答案
1
次被采纳
wdfk_prog
1
个答案
1
次被采纳
本月文章贡献
Ewan11111
3
篇文章
1
次点赞
longtsing
1
篇文章
4
次点赞
RTT_Studio
1
篇文章
4
次点赞
枫雪天
1
篇文章
3
次点赞
PVNR_2505
1
篇文章
3
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部