新闻详情

新闻详情

首页 / 资讯中心 / 详情

RTThread学习记录12——RTThread的启动过程解析,与裸机的区别

发布时间:2026/9/28 4:36:22来源:尧图网络
RTThread学习记录12——RTThread的启动过程解析,与裸机的区别
一、前言我们知道RTThread默认保底有3条线程main线程空闲线程还有最近学的定时器线程我们也知道RTThread默认有很多链表定时器链表、挂起链表、就绪链表的链表数组这些以及优先级位图信号量与互斥量等线程基础杂项我们虽然总是使用但是不清楚它们是怎么来的所以今天分析一下。二、RTThread的启动过程这是官方那里拿的RTThread启动过程。我们主要看懂这个过程就行了首先startup_xx.s 是芯片厂家给出的汇编启动文件比如startup_stm32.s、startup_GD32.s然后根据编译器的不同最终进入的入口不一样但是不管哪一个入口最终都会进入rtthread_startup()这个函数里面rtthread_startup()就负责完成整个工程的初始化和启动。rtthread_startup()函数详解rtthread_startup()是核心启动整个项目的函数。第一步调用rt_hw_interrupt_disable()关闭全局中断因为操作系统正在做核心初始化此时内核数据结构就绪队列、线程控制块等还不完整。如果此时触发中断中断服务函数有可能访问未初始化完成的内核变量造成系统崩溃。 关闭全局中断保证后面一长串系统初始化代码可以原子执行不受任何中断干扰。等系统初始化完成、调度器启动之后中断才会重新打开。第二步调用rt_boarad_init()负责最底层单板硬件初始化属于板级层面注意不是外设驱动。主要工作配置芯片系统主时钟、初始化调试串口控制台、基础 GPIO同时执行所有标记INIT_BOARD_EXPORT的初始化函数。⚠️注意这里不会初始化 ADC、PWM、SPI 这类外设驱动。这一步在调度器启动之前只保证基础硬件可以工作让后续内核能够打印日志。第三步通过上面初始化好的调试串口输出 RT-Thread 版本、编译器、芯片架构等开机日志。也就是我们串口上电最先看到的那一段版本字符串。第四步rt_system_timer_init()配置 SysTick系统滴答定时器产生周期性的滴答中断tick。tick 是 RT-Thread 的时间基准线程延时、软件定时器、时间片轮转全都依赖这个定时器。第五步rt_system_scheduler_init()对调度器的初始化并且就绪链表和优先级位图就是在这里初始化的。第六步rt_system_signal_init()对线程信号相关内容初始化。第七步调用rt_thread_init(main_thread_entry)构造 main 线程的线程控制块 TCB。但是只是创建线程还没有启动调度器并不会运行。main_thread_entry 是 main 线程真正入口函数进入这个函数后会调用rt_components_init()依次执行INIT_DEVICE_EXPORT、INIT_COMPONENT_EXPORT等宏导出的函数ADC/PWM 等外设驱动就在这里自动初始化、注册到设备模型所有组件初始化完成之后才调用 $Super$$main()最终进入我们用户编写的main()业务函数。所以我们平时见到的main函数不是一个线程只是main线程调用的一个函数。第八步rt_system_timer_thread_init()初始化并创建 timer 线程线程入口是rt_thread_timer_entry。第九步rt_thread_idle_init ()创建 idle 线程优先级最低。到这一步main 线程、timer 线程、idle 线程三个系统核心线程全部创建完成全部挂入就绪队列。但调度器仍未启动所有线程都不会跑。第十步rt_system_scheduler_start ()最后一步在函数内部会打开全局中断然后启动调度器开始触发线程切换。自动初始化宏前面大家可能看到INIT_BOARD_EXPORT或者INIT_DEVICE_EXPORT、INIT_COMPONENT_EXPORT会不懂这是什么意思其实这叫做自动初始化宏。以INIT_BOARD_EXPORT为例如果我在一个函数的后面标记上了INIT_BOARD_EXPORT“填你要标记的函数名”意思就是我把这个函数标记成了板级初始化函数当系统启动到了板级初始化也就是上面的第二步就会自动调用被INIT_BOARD_EXPORT标记的函数方便初始化板子最基础的硬件。同理有很多这种类似的用法。只需要了解有这个东西即可。宏执行时机用途INIT_BOARD_EXPORT(fn)rt_components_board_init ()调度器启动前板级基础硬件时钟、调试串口、pinINIT_PREV_EXPORT(fn)rt_components_init ()main 线程内纯软件前置初始化INIT_DEVICE_EXPORT(fn)rt_components_init ()main 线程内ADC/PWM/UART/SPI 外设驱动注册初始化INIT_COMPONENT_EXPORT(fn)rt_components_init ()main 线程内文件系统、lwip 网络协议栈INIT_ENV_EXPORT(fn)rt_components_init ()main 线程内挂载文件系统、环境配置INIT_APP_EXPORT(fn)rt_components_init ()main 线程内应用层创建线程三、裸机的启动过程简单来说裸机和RTThread最开头的汇编启动步骤几乎一样栈初始化、数据段搬运、bss 清零这是芯片硬件要求的不管裸机还是 RTOS 都要做。裸机就是上电→汇编准备→直接进 main→死循环跑业务全程单线程RT-Thread 就是在裸机的基础上在进 main 之前先做了一整套操作系统内核初始化把单线程死循环变成了多线程调度还加了自动初始化、线程管理这些功能。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Spring Boot校园绿化管理系统开发全攻略:从需求拆解到部署答辩 2026/9/28 5:46:23

Spring Boot校园绿化管理系统开发全攻略:从需求拆解到部署答辩

想写这篇文章的念头,其实挺实在的——每年到了毕设季,后台总有人来问“Spring Boot到底能做什么项目”“校园管理类系统是不是太老套了”。我得说,校园绿化管理系统这个选题,看起来不花哨,但真正做下来你会发现&#x…

阅读更多 →
Python基于ARIMA时间序列的销量预测模型实战指南 2026/9/28 5:46:23

Python基于ARIMA时间序列的销量预测模型实战指南

简介:这是一套面向Python数据分析初学者、毕业设计与课程设计学生的ARIMA时间序列销量预测完整项目包,围绕平稳化处理、模型定阶、参数估计与模型检验展开,并采用每月上中下旬三次预测当月销量的策略,将月上旬与中旬实际销量作为先…

阅读更多 →
Vim 常用命令与快捷键实战指南:从入门到高效编辑 2026/9/28 5:46:23

Vim 常用命令与快捷键实战指南:从入门到高效编辑

我到现在都记得第一次被人按着在Linux服务器上改配置文件的场景:没有鼠标、没有图形界面,只有一个黑乎乎的终端,里面等着我的是一个叫 vim 的东西。旁边的老同事丢下一句“按 i 插入,按 Esc 返回,按 :wq 保存退出”就走…

阅读更多 →
全维度解析 AI 开发核心工具:智能编码 / 数据标注 / 模型训练平台配 TaoToken 统一 Key 通道 2026/9/28 5:46:23

全维度解析 AI 开发核心工具:智能编码 / 数据标注 / 模型训练平台配 TaoToken 统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Ubuntu文本编辑全攻略:nano/vim/权限与实战技巧 2026/9/28 5:46:16

Ubuntu文本编辑全攻略:nano/vim/权限与实战技巧

1. Ubuntu下编辑文本文件的整体思路很多刚接触Ubuntu的人,第一反应是“编辑文件?用记事本双击打开不就行了吗”。这个直觉在Windows上完全没问题,但到了Ubuntu这里,如果你只是在桌面上双击某个文件,大概率会碰到权限不…

阅读更多 →
用 TaoToken 统一 Key 驱动自动化脚本:模拟鼠标移动、点击、双击、键盘输入与滚轮滚动 2026/9/28 5:46:16

用 TaoToken 统一 Key 驱动自动化脚本:模拟鼠标移动、点击、双击、键盘输入与滚轮滚动

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉