RT-Thread 移植,模版制作完成后续的内核学习将基于本工程,该工程基于 STM32 中的模版
当我们进入嵌入式领域时,通常首先接触的是单片机裸机编程。即在没有引入任何实时操作系统(RTOS)的情况下进行编程,所有操作都在一个循环中完成。现实生活中许多中小型电子产品仍采用裸机系统,也能满足需求。然而,随着功能要求的增加,纯粹的裸机系统已不能完美解决问题,反而会使编程变得复杂。为了降低编程难度,我们可以考虑引入 RTOS 来实现多任务管理,这是使用 RTOS 最大的优势。
一、CubeIDE 安装 RT-Thread
1、点击 help 选择 Manage Embeedded Software Packages
2、点击 From Url … 按键以在线安装
3、在打开的 User Defined Packs Manager 界面,点击 New 按钮,填写 RT-Thread (注意该选框只能右键后 paste 不知道是不是我遇到的 bug )在线安装包的源地址:https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc 点击Check检查源地址是否可行,OK的话输入框右侧会出现“ √ ”
4、点击 OK 回到 User Defined Packs Manager 界面,勾选后再次点击 OK
5、等待 CubeMX 自动连接服务器,并获取包描述文件。回到 Embedded Software Packages Manager 界面,就会发现 RealThread 下的 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install ,当然你需要同意 license 啦,安装完毕可以看到该组件前方的选择框变绿即为安装成功咯,就可以点击 Close 退出咯
二、模版工程中添加RT-Thread支持
1、添加组建
点击 Softwares Packages 选择 Select Components 以进入组件配置界面
选择 RealThread.RT-Thread , 然后根据需求选择 RT-Thread 组件,然后点击 OK
这里简单说明一下RT-Thread软件包中包含 kernel 、 shell 和 device 三个部分,
-
仅选择 kernel 表示只使用 RT-Thread 内核
-
选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。
-
选择 device 表示使用 RT-Thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设
之后的工程基于该工程都会使用到,因此这里大龙小龙我们全都要
2、选择组建
在 Middleware and Software Packs 中点击 RT_Thread ,其右侧 Mode 选项框全部勾选
RT-Thread 操作系统重定义了 HardFault_Handler、PendSV_Handler以及SysTick_Handler 三个中断函数,需要在中断配置中,代码生成的选项中,取消选择三个中断函数以避免重复定义的问题(对应选项为 Hard fault interrupt, Pendable request , Time base :System tick timer )点开 NVIC 选项时系统可能提示 RT-Thread 默认更改,检查一下如下图即可
3、更新时钟源
SysTick 是以最低的中断优先级运行,因此在执行此中断时,必须取消所有中断的屏蔽。为避免不必要的 warning ,需要将系统时钟由 SysTick 替换为 TIM ,不懂没关系跟着设置就行了,设置完成即可生成代码
三、工程调整与程序编写
1、引用 RT-Thread 的头文件
2、编写主函数
啊哈很简单,HAL_Delay 已经成为弃子啦,我们用系统的延时函数 rt_thread_mdelay 函数验证 RT-Thread 是否生效
rt_thread_mdelay(1000);//该函数为ms 所以写1000方便后续建议时基
编译,哟西,一堆错误
3、问题解决
修改启动文件
修改启动文件的 bl main 改为 bl entry ,更改此处使芯片在进入 main 之前启动 RT-Thread
更改配置
左上角 File 中选择 Properties 打开选项界面
如图所示添加一行指令
-Wa,-mimplicit-it=thumb
最后按照报错指示打开 rtconfig.h 的注释
4、编译下载
OK,没有问题,串口按照预期每秒进行一次输出,正确打印信息