哪些工具可以在使用RTOS时发现实时系统的bug?

嵌入式大杂烩 2021-11-24 22:53

越来越多的嵌入式系统依赖于实时操作系统(RTOS)的使用,以满足实时需求,减少上市时间,简化开发,增加代码可移植性。尽管RTOS有许多好处,但它也有其缺点,如可能引入分配不当的任务优先级、堆栈溢出、饥饿、死锁、优先级反转等bug。

一些专门设计的工具,可以帮助基于RTOS的程序开发人员发现一些难以发现的错误。

RTOS是什么?

实时操作系统(RTOS或实时内核)是有效地管理CPU时间的软件。大多数内核使用C编写,仅需汇编语言编写小部分代码,使内核适配不同的CPU体系结构。在使用RTOS内核设计应用程序时,只需将工作分成任务,每个任务负责工作的一部分。任务(也称为线程)是一个简单的程序,认为自己完全拥有CPU。


在单核CPU上,在任何给定时间内只能执行一个任务。应用代码还需要根据任务重要性为每个任务分配优先级以及任务堆栈(RAM)。一般来说,增加低优先级任务不会影响系统对高优先级任务的响应。任务实现通常是一个无限循环,内核负责任务的管理,称为多任务处理。


多任务处理是在几个顺序任务之间调度和切换CPU的过程。多任务处理提供了具有多个CPU的错觉,最大化地使用CPU,如图1所示。多任务处理还有助于创建模块化的应用程序。使用实时内核后,应用程序更容易设计和维护。

大多数商业RTOS都是抢占式调度方式,内核总是运行就绪的最重要的任务。抢占式内核也是事件驱动的,任务被设计为等待事件发生后才能执行。如果任务等待的事件没有发生,内核将运行其它任务。


等待状态的任务不消耗CPU时间。通过内核API调用来完成事件的发生和等待操作,避免轮询操作,提高CPU时间的利用率。典型的任务实现示例,如下所示:

实时内核提供了许多服务,如多任务处理、中断管理、任务间通信与同步、资源管理、时间管理、内存分区管理等。RTOS可以用于少量任务的简单应用,在需要复杂和耗时的通信的应用中,如TCP/IP、USB(主机和/或设备)、CAN、蓝牙、Zigbee应用等,RTOS是一个必备工具。当应用程序需要文件系统来存储和检索数据,以及当产品配备了图形显示(黑白、灰度或彩色)时,也强烈推荐使用RTOS。

硬件调试端口

ARM Cortex-M内核配备了强大的调试硬件。CoreSight提供了非侵入性的功能,允许工具在不停止CPU的情况下监视和控制实时系统,例如:

▪ 动态内存/外设访问(读写)

▪ 指令跟踪(芯片需包括一个执行跟踪宏单元,ETM)

▪ 数据跟踪

下图显示了Core Sight调试端口、CPU和内存外设之间的关系简化框图。

系统测试/调试工具

下图显示了CoreSight如何连接到开发环境:

1、嵌入式开发通常使用集成开发环境(IDE),IDE中通常包含代码编辑器、编译器、汇编器、链接器、调试器等工具。

IDE内置的调试器只提供了最基本的功能:下载代码、启动/停止应用、设置断点等功能。一些调试器允许在目标运行时显示和更改变量(如Live Watch),但这些功能仅限于数值。许多调试器内置RTOS插件,但通常需要停止应用程序才能检查RTOS的状态(对于调试实时系统不太实用)。

2、通过调试器,例如Segger J-Link,将代码下载到目标系统。

3、J-Link连接到CoreSight调试端口,启动/停止CPU,下载代码,编程板载Flash等。即使目标系统正在执行代码,J-Link也可以读写内存。

4、Micrium的μC/Probe是一个独立的、与CPU无关的Windows应用程序,它读取工具链生成的ELF文件。ELF文件包含下载到目标系统的代码以及所有全局变量的名称、数据类型和内存位置。

5、μC/Probe允许用户在运行时显示或更改连接的嵌入式目标上的变量或内存位置(包括I/O端口)的值。用户只需在μC/Probe图形环境填充量规、数字指示器、表格、图表、虚拟LED、条形图、滑块、开关、按钮等控件,并将控件与嵌入设备中的变量或内存位置相关联,即可在运行时显示或更改变量。通过μC/Probe图形界面中添加的虚拟滑块或开关,你可以轻松地更改运行系统的参数(如过滤系数和PID回路增益)或启动设备并测试I/O端口。

6、μC/Probe向J-Link发送读取或写入内存的请求。

7、J-Link请求将转换为CoreSight命令,获取变量值并显示到μC/Probe图形界面。

8、测试/调试实时嵌入式系统的另一个非常有用的工具是SEGGER的SystemView。此工具通常与RTOS一起工作,按时间顺序显示任务和ISR的执行,可以查看每个任务需要执行的时间(最小/平均/最大),任务何时就绪,每个任务实际开始执行时间,ISR何时执行等。SystemView可以帮助你发现不易发现的错误。但SystemView需要向目标系统添加记录RTOS事件和ISR的驻留代码(由SEGGER免费提供),SystemView还会消耗少量的RAM来缓存这些事件。

9、J-Link允许多个进程同时访问CoreSight,因此你可以同时使用这三个工具。

基于RTOS应用中的问题

堆栈溢出

在基于实时内核的应用中,每个任务都需要自己的堆栈。任务所需堆栈的大小取决于应用程序。如果堆栈大于任务要求,则会浪费内存。如果堆栈太小,堆栈可能溢出。我们可以通过分配更多内存来减少堆栈溢出的机会,通常需要25-50%的额外堆栈空间。一些CPU,比如基于ARMv8M架构的CPU,内置了堆栈溢出检测机制。然而,该特性并不能帮助确定合适的堆栈大小,它只是防止堆栈溢出的负面后果。

堆栈分配时,首先为任务堆栈分配更多空间,然后在已知最坏情况下运行应用程序,监视实际堆栈使用情况。

下图显示了μC/Probe对测试应用程序的μ/OS-III内核感知的截图。Stack Usage列显示每个任务在给定时间的最大堆栈使用情况。μC/Probe将更新并实时显示堆栈使用信息,无需停止目标应用。绿色表示最大堆栈使用量一直保持在70%。黄色表示堆栈使用量在70%到90%之间。红色表示堆栈使用量已超过90%。显然,使用92%堆栈的任务应该增大堆栈,使其回到70%以下。

中断响应

在临界代码处理时,RTOS和应用程序代码通常必须禁用中断。关中断会影响系统对事件的响应,RTOS应用中尽量减少中断禁用时间。

μC/OS-III会监测每个任务最坏情况下的中断禁用时间,下图所示。如果应用需要满足实时截止时间,这些信息非常有用。

中断被禁用的时间很大程度上取决于CPU、其时钟速率、应用程序和调用的RTOS服务。禁用中断最长的任务用红色高亮显示,帮助用户快速识别潜在的异常值。

如果最大中断禁用时间是由RTOS引起的,可以:

🔸 查找并使用中断禁用时间较低的RTOS API。

🔸 增加CPU的时钟速率。

🔸 使用非内核感知中断来处理高度时间敏感的代码。


优先级反转

优先级反转发生在低优先级任务持有高优先级任务需要的资源时。当中等优先级的任务抢占占用资源的低优先级的任务时,问题就会加剧。“优先级反转”一词指的是,低优先级任务似乎比高优先级任务具有更高的优先权,至少在共享该资源时是如此。

优先级反转是实时系统中的一个问题,当使用基于优先级的抢占式内核时会发生。如下图所示,SystemView展示了一个优先级反转场景。

App HPT具有最高优先级,App MPT 具有中优先级,App LPT优先级最低。

可以使用RTOS的互斥量机制来解决上面描述的优先级反转问题。优先级反转被限定为LPT访问共享资源所需的时间,下图所示。LPT和HPT都使用互斥量而非信号量来获得对共享资源的访问权。如果没有SystemView这样的工具,优先级反转将很难识别和校正。

注意,如果LPT只是HPT的下一个优先级级别,则可以使用信号量。在这种情况下,RTOS不需要更改LPT的优先级,信号量是首选项,它比互斥信号量快。


死锁

死锁是至少两个任务相互等待另一个任务拥有的资源。死锁可能不会立即发生,它很大程度上取决于两个任务何时需要彼此的资源。如图8所示,μC/Probe的内核感知视图有一列,显示每个任务的执行频率(RTOS切换任务的频率)。通过监视此列可以检测死锁。如果至少两个任务的计数已停止(μC/Prboe在CPU运行时更新这些计数器),则可能存在死锁。对于这种情况,不需要使用μC/Probe等工具也可以判定锁定行为,该工具使它更加明显。

可以通过以下方法来避免死锁:

1、任务先获取所有必需的资源,以相同的顺序获取它们,以相反的顺序释放它们。

2、在RTOS API调用中使用超时机制,以避免永远等待资源可用。检查RTOS API返回的错误代码,以确保对所需资源的请求成功。


任务饥饿

饥饿指高优先级任务消耗了所有CPU带宽,低优先级任务没有CPU时间或很少。饥饿的影响是响应性和产品特性的下降,例如嵌入式目标的显示更新缓慢、通信堆栈中的数据包丢失、操作界面响应迟缓等。为解决饥饿问题,可以:

1、优化消耗大多数CPU带宽的代码。

2、提高CPU的时钟速度。

总结

IDE内置的调试器通常不足以调试基于RTOS的实时系统。

幸运的是,有专门为调试基于RTOS的系统而设计的工具。其中一个工具是Segger的SystemView,它会按时间顺序显示ISR和任务的执行,收集运行时统计数据,如最小和最大执行时间、ISR与任务之间的关系、CPU负载等。

另一个可以补充SystemView的工具是Micrium的μC/Probe,这是一个通用工具,它允许开发人员在不干扰CPU的情况下,可视化和改变正在运行的嵌入式目标的行为。μC/Probe可以用于裸机或基于RTOS的应用中。对于基于RTOS的应用程序,μC/Probe包括非侵入性的、实时内核感知以及TCP/IP协议栈感知功能。SystemView和μC/Probe可以在整个开发周期中使用,提供关于嵌入式目标的运行时行为的反馈。


往期推荐:

MCU、RTOS、物联网之间的关系?

使用Jlink来合并烧写文件,就是这么简单!

点击阅读原文,查看更多分享

嵌入式大杂烩 专注于嵌入式技术,包括但不限于C/C++、嵌入式、物联网、Linux等编程学习笔记,同时,内包含大量的学习资源。欢迎关注,一同交流学习,共同进步!
评论
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 152浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 130浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 105浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 105浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 117浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 185浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 93浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 155浏览
  • 本文介绍编译Android13 ROOT权限固件的方法,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。关闭selinux修改此文件("+"号为修改内容)device/rockchip/common/BoardConfig.mkBOARD_BOOT_HEADER_VERSION ?= 2BOARD_MKBOOTIMG_ARGS :=BOARD_PREBUILT_DTB
    Industio_触觉智能 2025-01-08 00:06 77浏览
  •  在全球能源结构加速向清洁、可再生方向转型的今天,风力发电作为一种绿色能源,已成为各国新能源发展的重要组成部分。然而,风力发电系统在复杂的环境中长时间运行,对系统的安全性、稳定性和抗干扰能力提出了极高要求。光耦(光电耦合器)作为一种电气隔离与信号传输器件,凭借其优秀的隔离保护性能和信号传输能力,已成为风力发电系统中不可或缺的关键组件。 风力发电系统对隔离与控制的需求风力发电系统中,包括发电机、变流器、变压器和控制系统等多个部分,通常工作在高压、大功率的环境中。光耦在这里扮演了
    晶台光耦 2025-01-08 16:03 16浏览
  • 故障现象一辆2017款东风风神AX7车,搭载DFMA14T发动机,累计行驶里程约为13.7万km。该车冷起动后怠速运转正常,热机后怠速运转不稳,组合仪表上的发动机转速表指针上下轻微抖动。 故障诊断 用故障检测仪检测,发动机控制单元中无故障代码存储;读取发动机数据流,发现进气歧管绝对压力波动明显,有时能达到69 kPa,明显偏高,推断可能的原因有:进气系统漏气;进气歧管绝对压力传感器信号失真;发动机机械故障。首先从节气门处打烟雾,没有发现进气管周围有漏气的地方;接着拔下进气管上的两个真空
    虹科Pico汽车示波器 2025-01-08 16:51 19浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 205浏览
  • 「他明明跟我同梯进来,为什么就是升得比我快?」许多人都有这样的疑问:明明就战绩也不比隔壁同事差,升迁之路却比别人苦。其实,之间的差异就在于「领导力」。並非必须当管理者才需要「领导力」,而是散发领导力特质的人,才更容易被晓明。许多领导力和特质,都可以通过努力和学习获得,因此就算不是天生的领导者,也能成为一个具备领导魅力的人,进而被老板看见,向你伸出升迁的橘子枝。领导力是什么?领导力是一种能力或特质,甚至可以说是一种「影响力」。好的领导者通常具备影响和鼓励他人的能力,并导引他们朝着共同的目标和愿景前
    优思学院 2025-01-08 14:54 23浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦