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

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

3天内不再提示

RT-Thread操作系统的问题及解决方案

RTThread物联网操作系统 来源:古月居 作者:better_coder 2021-04-07 17:07 次阅读

现在的裸机程序已经不能满足嵌入式机器人所需的代码结构要求了,因为一个嵌入式机器人的系统是非常庞大的,分别由感知算法,决策算法和控制算法等组成,这还没有算上一些需要联网的程序。庞大的代码需要一个芯片级的操作系统来屏蔽掉硬件对于上层算法的影响,同时向上层提供API,帮助上层的算法调用底层硬件,因此一个芯片级操作系统就十分重要了,而RT-Thread是一种国产的芯片级操作系统,而我的课程刚好也涉及到了该系统,所以我准备写一系列的博客来记录下我在学习这个操作系统过程中的种种问题,希望能带给大家一些帮助~

问题现象

这学期我们在上嵌入式的课程,学习了一个新的轻量级操作系统——RT-Thread(后面简称为rtt),这是一个国产的操作系统,这个操作系统的特点就是只有线程,没有进程,那么我们要使用这个系统的话只需要操作相应的线程就可以了,那么我们用好这个系统的方法就很简单了,我们只需要实现各个线程间的协调工作就可以了。

言归正传,在我学习这个rtt的时候我出现了一个问题,那就是当我的main函数的while(1)里面啥东西也不放,空跑的时候,整个芯片就宕机了,代码如图:

3723a6f6-93fa-11eb-8b86-12bb97331649.jpg

原因及解决办法

【走过的弯路】

开始的时候我以为这个原因就是在我的整个工程中main线程的优先级比较高,其他线程的优先级都是最低的(我这里设置的是25),那么在线程调度的时候高优先级的线程会先被调度,main线程作为我的系统中优先级最高的线程,而且是在空跑的一个线程,那么就是这个main线程在一直占用着系统资源,其他线程都不能被调度,因此出现了类似于系统宕机的现象。

说到这里就不得不说一下我们这张rtt系统的线程调度的状态流转图了。

3747aa74-93fa-11eb-8b86-12bb97331649.jpg

在普通的操作系统中,这些状态之间的流转还是比较好理解的,但是在rtt中,它有一个与其他操作系统所不同的地方,这我在前面也已经讲过了,那就是它是没有进程这个东西的,因此在rtt操作系统中,就绪状态=运行状态。也就是说图中的2号圆圈代表的循环就相当于等价。

但是,这样就出现问题了,因为如果按照我这个逻辑的话,不止是在空跑main线程的while(1)的时候会出现系统宕机的情况,就算main线程的while(1)里面加入了任务程序,那么我们整个rtt系统也是会根据系统进程的调度机制(高优先级的线程一定会先被调度)来不停的循环调用main线程里while(1)里面的任务,同样其他的线程也是不会被调用的,这样肯定是不行的,于是我就去rtt的官网查询相关资料,最终解开了这个问题背后的谜团。

恍然大悟

首先让我们来rtt系统中明确一些概念。

我们以下面这个代码段来举例说明:

void thread_entry(void* paramenter) { /* 等待事件的发生 */ /* 对事件进行服务、进行处理 */ }

线程就绪/运行

这个代码是线程的实体函数,那rtt系统届时会怎样执行这个程序呢?我画一个形象的图给大家解释一下。

3765d512-93fa-11eb-8b86-12bb97331649.jpg

如果这个线程优先级够高的话,rtt系统会一直执行这个线程,也就不会执行其他线程了,因为该线程运行结束之后会进入就绪状态,又因为该线程有最高优先级,所以进入线程调度池之后马上又会被调度运行,进入运行状态,但是在rtt 中,实际上(实现过程中)线程并不存在运行状态,就绪状态和运行状态是等同的,但是在理解机制时照上面说的来理解较为方便。

线程挂起

rtt官网有对其较为详细,清楚的描述,我这里做了一个搬运,侵删。

377cd352-93fa-11eb-8b86-12bb97331649.jpg

这段话里面重要的就是这句话,线程不参与调度,也就是说不论该线程优先级有多高,他都不会进入到线程调度池里面,根据表格中的描述,导致线程挂起的条件有2个资源不可用。

线程主动延时一段时间

解决问题

main线程就是一个特殊的线程,所以他肯定也符合rtt系统管理线程的机制。

那我们这个问题就很好说明了。当main线程的while(1)循环内程序没有发生资源不可用或者线程主动延时的操作时,该线程一直会处于运行/就绪阶段,又因为我的程序中,main线程优先级最高,所以我的main线程一直霸占着系统资源,造成了系统宕机的假象。但是如果我在main线程的while(1)循环中插入一段延时程序,main线程就会进入挂起状态,让出系统资源,从而使其他线程有机会得到调度,使得该系统能稳定运行。

原文标题:机器人”大脑”:RT-Thread的main线程“卡死”的一种可能原因及解决方案

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    206

    文章

    27033

    浏览量

    201383
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121872
  • RT-Thread
    +关注

    关注

    31

    文章

    1148

    浏览量

    38867
  • RTThread
    +关注

    关注

    7

    文章

    129

    浏览量

    40518

原文标题:机器人”大脑”:RT-Thread的main线程“卡死”的一种可能原因及解决方案

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread荣获“最具影响力IoT操作系统奖”

    2024年3月30日,第十一届开源操作系统年度技术会议(OS2ATC)在西郊宾馆举办!RT-Thread作为国内领先的开源操作系统斩获了“最具影响力IoT操作系统奖”。该奖项是对
    的头像 发表于 04-12 08:37 114次阅读
    <b class='flag-5'>RT-Thread</b>荣获“最具影响力IoT<b class='flag-5'>操作系统</b>奖”

    RT-Thread斩获“最具影响力IoT操作系统奖”

    2024年3月30日,第十一届开源操作系统年度技术会议(OS2ATC)在西郊宾馆举办!RT-Thread作为国内领先的开源操作系统斩获了“最具影响力IoT操作系统奖”。
    的头像 发表于 04-10 09:51 141次阅读

    RT-Thread公司的Persimmon图形界面是否必须依赖RTT操作系统

    RT-Thread公司的Persimmon图形界面是否必须依赖RTT操作系统
    发表于 10-28 07:38

    有使用过RT-Thread操作系统的吗?性能怎么样?

    有使用过RT-Thread 操作系统的吗,性能怎么样?
    发表于 10-27 06:05

    新书上架|嵌入式系统原理及应用——基于STM32和RT-Thread

    裸机开发和RT-Thread操作系统开发两条主线贯穿工作原理与实践应用,层层递进地介绍嵌入式系统的开发设计方
    的头像 发表于 09-25 18:25 540次阅读
    新书上架|嵌入式<b class='flag-5'>系统</b>原理及应用——基于STM32和<b class='flag-5'>RT-Thread</b>

    基于xmake的RT-Thread Smart用户态开发教程

    RT-Thread Smart(以下简称 Smart) 是基于 RT-Thread 操作系统上的混合操作系统,简称为 rt-smart,它把
    的头像 发表于 09-14 11:48 708次阅读
    基于xmake的<b class='flag-5'>RT-Thread</b> Smart用户态开发教程

    RT-Thread操作系统全面支持飞腾腾珑E2000系列芯片

    近日,国内领先的自主核心芯片提供商飞腾和国内领先的RTOS(实时操作系统) RT-Thread 共同完成了针对飞腾系列CPU的适配支持,并且全部源码已经发布到开源社区平台,为嵌入式开发者们提供了广泛
    的头像 发表于 08-28 18:55 1052次阅读
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系统</b>全面支持飞腾腾珑E2000系列芯片

    就在明天!全国高校嵌入式系统设计暨RT-Thread操作系统教学研讨交流会议

    点击阅读原文进入官网 原文标题:就在明天!全国高校嵌入式系统设计暨RT-Thread操作系统教学研讨交流会议 文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章
    的头像 发表于 07-27 19:55 348次阅读
    就在明天!全国高校嵌入式<b class='flag-5'>系统</b>设计暨<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系统</b>教学研讨交流会议

    师资培训 | 基于瑞萨RA6M3×RT-Thread操作系统使用LVGL实战教学

    2023年7月31日 师资培训 RT-Thread R T-Thread 作为 国产开源嵌入式/ 物联网操作系统 , 具有 中立第三方 / 构架先进 / 功能强大 / 社区繁荣等特点,能够加速
    的头像 发表于 07-26 12:10 502次阅读
    师资培训 | 基于瑞萨RA6M3×<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系统</b>使用LVGL实战教学

    【师资培训】基于RT-Thread操作系统使用LVGL实战教学

    20230731师资培训 RT-Thread R T-Thread 作为 国产开源嵌入式 物联网操作系统 , 具有 中立第三方 / 构架先进 / 功能强大 / 社区繁荣等特点,能够加速
    的头像 发表于 07-24 19:35 849次阅读
    【师资培训】基于<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系统</b>使用LVGL实战教学

    【新书上架】RT-Thread第10本相关书籍!物联网实时操作系统原理与实战

    新书上架,本书以RT-Thread操作系统为例,系统地阐述了物联网项目开发中,实时操作系统的作用、内核原理、组件技术以及如何利用其组件化开发平台搭建实际的物联网项目。本书也是
    的头像 发表于 06-28 19:25 591次阅读
    【新书上架】<b class='flag-5'>RT-Thread</b>第10本相关书籍!物联网实时<b class='flag-5'>操作系统</b>原理与实战

    RT-Thread操作系统有哪些优势?

    RT-thread是一个轻量级的操作系统,很小,但是也是一个操作系统。主要优势有这些: 跨芯片平台:支持所有主流微控制器,解决设备碎片化问题。 实时操作系统内核:完全自主开发,硬实时,
    发表于 06-28 08:16

    基于xmake的RT-Thread Smart用户态开发教程

    RT-Thread Smart(以下简称 Smart) 是基于 RT-Thread 操作系统上的混合操作系统,简称为 rt-smart,它把
    的头像 发表于 06-07 11:44 960次阅读
    基于xmake的<b class='flag-5'>RT-Thread</b> Smart用户态开发教程

    RT-Thread内核对象操作API详解

    目的还是学习并熟悉RT-Thread 操作系统
    发表于 06-02 09:48 317次阅读
    <b class='flag-5'>RT-Thread</b>内核对象<b class='flag-5'>操作</b>API详解

    国内高校 + 开源社区:共同守护RT-Thread操作系统安全运行

    RT-Thread操作系统一直秉承着社区,开放,中立的原则不断向前演进、发展。而对于未来的工程师们,RT-Thread也以自己微小的力量推行着RT-Thread大学计划:持续坚持产学研
    的头像 发表于 05-12 10:45 696次阅读
    国内高校 + 开源社区:共同守护<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系统</b>安全运行