0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简述STM32单片机开发中的RTOS

STM32嵌入式开发 来源:STM32嵌入式开发 作者:STM32嵌入式开发 2021-06-28 14:53 次阅读

很多STM32单片机初学者都是从裸机开始的,裸机确实也能开发出好的产品。但是,作为一个嵌入式软件工程师,况且用的并不是51那种低端单片机,如果只会用裸机开发产品,那肯定是不够的。

要从裸机的思维转变到RTOS(Real Time Operating System)的思维,其实需要一个过程,而且开始的一段时间会很痛苦。但过一段时间理解了一些内容,能写一些Demo之后,你会发现其实RTOS也不难。

现在FreeRTOS在CubeMX工具中可以直接配置并使用,相当方便。

为什么需要RTOS

为什么我们需要RTOS?就像最开始学C编程时,老师告诉我们,指针很重要,那时你肯定有一个大的疑问,指针到底有什么好? 心里一直犯嘀咕着:不用指针不一样把程序编出来了? 现在想想看C语言没了指针,是不是“寸步难行”呢。 回到正题,我们到底为什么需要RTOS? 一般的简单的嵌入式设备的编程思路是下面这样的:

main{ {处理事务1}; {处理事务2}; {处理事务3}; 。。。。。。。 {处理事务N};}

isr_server{ {处理中断};}

这是最常见的一种思路,对于简单的系统当然是够用了,但这样的系统实时性很差。 比如“事务1”如果是一个用户输入的检测,当用户输入时,如果程序正在处理事务1下面的那些事务,那么这次用户输入将失效,用户的体验是“这个按键不灵敏,这个机器很慢”,而我们如果把事务放到中断里去处理。

虽然改善了实时性但会导致另外一个问题,有可能会引发中断丢失,这个后果有时候比“慢一点”更加严重和恶劣! 又比如事务2是一个只需要1s钟处理一次的任务,那么显然事务2会白白浪费CPU的时间。改进思路 看到上面裸机开发的局限了吗? 这时,我们可能需要改进我们的编程思路,一般我们会尝试采用“时间片”的方式。这时候编程会变成下面的方式:

main{ {事务1的时间片到了则处理事务1}; {事务2的时间片到了则处理事务2}; 。。。。。。。 {事务N的时间片到了则处理事务N};}

time_isr_server{ {判断每个事务的时间片是否到来,并进行标记};}

isr_server{ {处理中断};}

可以看到,这种改进后的思路,使得事务的执行时间得到控制,事务只在自己的时间片到来后,才会去执行。但这种方式仍然不能彻底解决“实时性”的问题,因为某个事务的时间片到来后,也不能立即就执行,必须等到当前事务的时间片用完,并且后面的事务时间片没到来,才有机会获得“执行时间”。

这时候我们需要继续改进思路,为了使得某个事务的时间片到来后能立即执行,我们需要在时钟中断里判断完时间片后,改变程序的返回位置,让程序不返回到刚刚被打断的位置,而从最新获得了时间片的事务处开始执行,这样就彻底解决了事务的实时问题。

我们在这个思路上,进行改进,我们需要在每次进入时钟中断前,保存CPU的当前状态和当前事务用到的一些数据,然后我们进入时钟中断进行时间片处理,若发现有新的更紧急的事务的时间片到来了,则我们改变中断的返回的地址,并在CPU中恢复这个更紧急的事务的现场,然后返回中断开始执行这个更紧急的事务。

使用RTOS的好处

上面那段话,对于初学者来说,可能有些不好理解。 事实上,这是因为要实现这个过程是有些复杂和麻烦的,这时候我们就需要找一个操作系统(OS)帮我们做这些事了,如果你能自己用代码实现这个过程,事实上你就在自己写操作系统了。

其实从这里也可也看出,操作系统的原理其实并不那么神秘,只是一些细节你很难做好。我们常见的RTOS基本都是这样的一个操作系统,它能帮你完成这些事情,而且是很优雅的帮你完成! 事实上,RTOS的用处远不止帮你完成这个“事务时间片的处理”,它还能帮你处理各种超时,进行内存管理,完成任务间的通信等。

有了RTOS,程序的层次也更加清晰,给系统添加功能也更方便,这一切在大型项目中越发的明显!

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5997

    文章

    43947

    浏览量

    620542
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10411

    浏览量

    206465
  • RTOS
    +关注

    关注

    20

    文章

    773

    浏览量

    118772
  • c编程
    +关注

    关注

    0

    文章

    94

    浏览量

    29300

原文标题:STM32单片机开发中的RTOS

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    求助,英飞凌单片机程序开发STM32程序开发之间有多少差异?

    英飞凌单片机程序开发STM32程序开发之间有多少差异?英飞凌单片机有没有类似库函数的东西?
    发表于 02-05 07:14

    STM32单片机的特点和功能是什么

    STM32单片机是一款基于ARM Cortex-M内核的32位闪存微控制器,由STMicroelectronics公司(意法半导体)生产。STM32单片机具有高性能、低功耗、丰富的外设
    的头像 发表于 01-03 15:33 3236次阅读

    stm32和51单片机的区别

    OTPROM。闪存具有更大的存储容量和更高的读写速度。 接口 STM32单片机具有更多的外设接口,包括USB、CAN和以太网等。而51单片机的接口较少,只能支持一些基本的外设。 开发
    发表于 11-20 13:18

    在具有RTOSSTM32Cube上开发应用

    电子发烧友网站提供《在具有RTOSSTM32Cube上开发应用.pdf》资料免费下载
    发表于 09-21 11:02 1次下载
    在具有<b class='flag-5'>RTOS</b>的<b class='flag-5'>STM32</b>Cube上<b class='flag-5'>开发</b>应用

    一款漂亮的板子 #单片机 #FreeRTOS #stm32 #stm32单片机

    单片机STM32
    百问网官方
    发布于 :2023年09月20日 15:26:00

    STM32嵌入式开发中的RTOS,你用过哪些?

    STM32嵌入式开发中的RTOS,你用过哪些?
    的头像 发表于 09-18 16:21 786次阅读
    <b class='flag-5'>STM32</b>嵌入式<b class='flag-5'>开发</b>中的<b class='flag-5'>RTOS</b>,你用过哪些?

    STM32单片机开发环境安装与工程搭建

    STM32: 意法半导体基于ARM公司的Cortex-M内核开发的32位的高性能、低功耗单片机
    发表于 08-22 15:49 720次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>单片机</b><b class='flag-5'>开发</b>环境安装与工程搭建

    STM32的中断和异常(2)#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:35:06

    STM32的中断和异常(1)#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:34:25

    STM32的USART串口(2)#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:33:41

    STM32的USART串口(1)#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:32:52

    STM32的SPI接口(2)#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:32:08

    STM32的SPI接口(1)#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:31:23

    STM32定时器#单片机

    单片机STM32
    未来加油dz
    发布于 :2023年08月11日 16:30:39

    51单片机可以移植RTOS吗?

    说起RTOS移植,我们首先会想到32位单片机
    发表于 05-23 17:09 1411次阅读