成功移植RTOS到项目上使用的MCU上

先说下啥是RTOS吧,RTOS一般指实时操作系统,是Real Time Operating System的简称,说的通俗点,就是一种可以创建多个任务,然后多个任务间可以进行调度的一种系统,市场上也有好几种RTOS,我当时用的FreeRTOS,之所以用这个,完全是因为Free,当时移植前,我是担心自己胜任不了,毕竟之前没怎么接触过RTOS,还好最后完美的完成了任务,而且现在手表手环以及一些固件,或者小系统中,都离不开了RTOS,所以说学习这个RTOS,还是很有前景的。接下来我一一给大家说下我的思路和处理方式,和大家共勉

1.准备工作

要移植RTOS,实现任务切换,稍微了解的工程师都会知道,那肯定会用到汇编了,这个自己找对应MCU架构的汇编指令集说明手册,不需要懂每一条,但后面用到至少有权限的资料可以查看

要知道任务切换的本质,任务切换实际上就是保存上一个任务的现场到对应的栈中,然后根据相应的算法找到下一个任务,把将要执行的任务的现场成栈中恢复就可以了

还要知道什么情况下会触发任务切换,任务线程如何存入栈中,从FreeRTOS上下载接近这个平台的demo

这样我的准备工作就做完了。至此我知道了任务切换的所有理论知识,开搞吧。

2.先把下载好的demo加载到自己的工程中,或者直接用demo中对应的工具,这样更省事

3.在代码中找到任务创建时,栈的处理方式,因为后面任务切换要使用栈的,说实话,我已经忘记具体这块FreeRTOS咋弄的了,好几年没用了

4.找到任务切换到入口,做过RTOS的,可能会只要三个关键的中断,systick,pendSV和SVC,我简单说下这几个中断吧,这块就是在准备工作阶段去了解到的,比如一个时间片到了,也就是systick中断,在这个中断里面,我设置好pendsv中断标志,然后系统执行pendSV中断进行上下文切换,这个切换其实就是保存上一个任务的现场到对应的栈中,然后根据算法获取下一个任务的信息在恢复并执行,获取下一个任务,其实牵涉很多的,比如任务的优先级,任务是否处于可执行状态等,不同rtos这块的实现也会不同,算是比较核心的东西了,感兴趣的可以自己去研究下,保准让你成为大神,然后说最后一个中断SVC,当我们某一个任务因等待资源而放弃CPU时,就可以通过SVC主动告诉系统,让我歇会吧,你去干其他活吧,好了两种切换任务的原理我就说到这,知道这三个中断函数后,那我就知道我移植rtos主要就是让他能切换任务,此刻我就适配这三个中断就可以了。

5.当上面三个中断适配完了后,就可以开始测试了,我是创建了3个任务,然后通过在三个任务中通过串口输出不同的打印log,通过打印信息来判断是否能正常进行任务切换。如果不能正常切换任务,那就需要从上面说的三个中断处入手了,看哪一步出错了,我当时使用的开发工具是keil,通过keil可以进行调试,调试的时候,keil工具会把寄存器,MSP PSP等都打印出来,也可以看指定地址开始处的内存信息来供我们分析问题。

至此我就说完了,RTOS虽然不是Liunx这类大系统,但也不是很简单的,而且现在RTOS市场还是很不错的,如刚开始说的,手表手环中会用到,固件中会用到,车载中其实也会用到,所以很值得学习的,最后祝大家天天都开开心心的啊

#我的成功项目解析我的失利项目复盘##我的成功项目解析#
全部评论
有RTOS相关项目的,面试时回答项目问题就可以参考你这个了
3 回复 分享
发布于 2023-03-29 18:55 广东
感觉很厉害 先马住
点赞 回复 分享
发布于 2023-03-11 13:30 山东
狠狠收藏了
点赞 回复 分享
发布于 2023-03-11 13:39 甘肃
厉害了
点赞 回复 分享
发布于 2023-03-14 22:28 陕西

相关推荐

01-08 09:40
中南大学 Java
苏苏加油努力:你的女神不回你消息,并且给别的男生发消息 be like
点赞 评论 收藏
分享
评论
15
109
分享

创作者周榜

更多
牛客网
牛客企业服务