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

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

    关注

    210

    文章

    28086

    浏览量

    205790
  • 操作系统
    +关注

    关注

    37

    文章

    6672

    浏览量

    123127
  • RT-Thread
    +关注

    关注

    31

    文章

    1259

    浏览量

    39825
  • RTThread
    +关注

    关注

    7

    文章

    132

    浏览量

    40773

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

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

收藏 人收藏

    评论

    相关推荐

    混合部署 | 在迅为RK3568上同时部署RT-Thread和Linux系统

    RT-Thread介绍 RT-Thread 是一个高安全性、实时性的操作系统,广泛应用于任务关键领域,例如电力、轨道交通、车载系统、工业控制和新能源等。它的加入让 RK3568 能够在
    发表于 11-01 10:31

    喜报|睿赛德科技RT-Thread操作系统成功入选上海市重点推荐目录

    近日,经企业自主申报、资料审查、专家评审、产品测试等环节,上海睿赛德电子科技有限公司自主研发的RT-Thread嵌入式实时操作系统成功入选《2024年度上海市重点产业和领域数字化产品和解决方案
    的头像 发表于 10-18 08:08 391次阅读
    喜报|睿赛德科技<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系统</b>成功入选上海市重点推荐目录

    混合部署 | 在迅为RK3568上同时部署RT-Thread和Linux系统

    RT-Thread介绍 RT-Thread 是一个高安全性、实时性的操作系统,广泛应用于任务关键领域,例如电力、轨道交通、车载系统、工业控制和新能源等。它的加入让 RK3568 能够在
    发表于 09-18 10:54

    新书发布——《RT-Thread嵌入式实时操作系统内核、驱动和应用开发技术》

    我们非常高兴地宣布,由郑苗秀、沈鸿飞和廖建尚编著的《RT-Thread嵌入式实时操作系统内核、驱动和应用开发技术》一书正式发布。本书的编写团队由多位在嵌入式和实时操作系统领域有着丰富经验的专家组
    的头像 发表于 09-03 08:06 393次阅读
    新书发布——《<b class='flag-5'>RT-Thread</b>嵌入式实时<b class='flag-5'>操作系统</b>内核、驱动和应用开发技术》

    【好书推荐】RT-Thread设备驱动开发指南

    近年来国内芯片产业和物联网产业的快速崛起,行业发展迫切需要更多人才,尤其需要掌握嵌入式操作系统等底层技术的人才。随着RT-Thread被更广泛地应用于行业中,开发者对嵌入式驱动开发的需求越来越
    的头像 发表于 08-01 08:35 470次阅读
    【好书推荐】<b class='flag-5'>RT-Thread</b>设备驱动开发指南

    RT-Thread内部机制大揭秘,带你深入操作系统内核

    一、RT-Thread概述RT-Thread是一款具有显著优势的开源嵌入式实时操作系统。它不仅具备轻量级、实时性强的特点,还拥有广泛的开源社区支持和丰富的应用场景。在轻量级方面,RT-Thre
    的头像 发表于 08-01 08:11 2758次阅读
    <b class='flag-5'>RT-Thread</b>内部机制大揭秘,带你深入<b class='flag-5'>操作系统</b>内核

    睿赛德科技CEO熊谱翔 ——基于RT-Thread操作系统的安全车控系统实践

    操作系统非常看重生态,RT-ThreadSafetyAuto操作系统也是这样,通过兼容开源RT-Thread操作系统的API来复用已有的生
    的头像 发表于 07-13 08:35 1269次阅读
    睿赛德科技CEO熊谱翔 ——基于<b class='flag-5'>RT-Thread</b><b class='flag-5'>操作系统</b>的安全车控<b class='flag-5'>系统</b>实践

    RT-Thread 新里程碑达成——GitHub Star 破万!

    RT-Thread实时操作系统开源项目在GitHub上的star数量突破一万!截止发文,RT-Thread作为实时操作系统在业界Star数量排名第一!仓库地址:https://gith
    的头像 发表于 07-04 08:35 373次阅读
    <b class='flag-5'>RT-Thread</b> 新里程碑达成——GitHub Star 破万!

    基于 RT-Thread专业版的EtherCAT主站方案

    特点。在RT-Thread实时操作系统上运行EtherCAT主站协议,大大提高了实时性,极大降低了循环同步抖动时间,可满足各种对实时性要求苛刻的应用场景。以下是在瑞
    的头像 发表于 06-19 08:35 722次阅读
    基于 <b class='flag-5'>RT-Thread</b>专业版的EtherCAT主站<b class='flag-5'>方案</b>

    开发者分享 | 基于先楫RT-Thread BSP,使用CLion开发应用

    ,搭载RT-Thread实时操作系统,使用RT-ThreadStudio进行开发。RT-Thread是一个伟大的操作系统,但是,
    的头像 发表于 06-07 08:17 2533次阅读
    开发者分享 | 基于先楫<b class='flag-5'>RT-Thread</b> BSP,使用CLion开发应用

    实时操作系统RT-Thread及FreeRTOS

    RT-Thread与其他很多RTOS如FreeRTOS的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。FreeRTOS和RT-Thread是两种常见的嵌入式实时操作系统
    的头像 发表于 05-29 08:10 3351次阅读
    实时<b class='flag-5'>操作系统</b>之<b class='flag-5'>RT-Thread</b>及FreeRTOS

    新书发布——《实时操作系统应用技术:RT-Thread与ARM编程实践》

    RT-Thread又一本新书《实时操作系统应用技术——基于RT-Thread与ARM的编程实践》发布,标志着RT-Thread生态和实时操作系统
    的头像 发表于 05-11 08:35 678次阅读
    新书发布——《实时<b class='flag-5'>操作系统</b>应用技术:<b class='flag-5'>RT-Thread</b>与ARM编程实践》

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

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

    i.MX RT1170:VGLite移植RT-Thread Nano过程讲解(上)

    RT-Thread 是国人自主研发的开源实时操作系统(RTOS),RT-Thread Nano 是极简版的硬实时内核,内存占用小,移植简单。VGLite 是 NXP 提供的轻量级 2D 图形 API,基于 FreeRTOS 实现
    的头像 发表于 11-09 11:20 2441次阅读
    i.MX <b class='flag-5'>RT</b>1170:VGLite移植<b class='flag-5'>RT-Thread</b> Nano过程讲解(上)