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

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

3天内不再提示

使用专门的RTOS工具发现实时错误

星星科技指导员 来源:嵌入式计算设计 作者:Jean Labrosse 2022-06-30 10:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

越来越多的嵌入式系统依赖使用实时操作系统 (RTOS) 来:满足实时要求、缩短上市时间、简化开发、增加代码可移植性和简化开发。尽管有很多好处,但 RTOS 也有其缺点,其中之一是可能引入不正确分配的任务优先级、堆栈溢出、饥饿、死锁、优先级反转和其他难以发现的错误。

在本文中,我们将研究专门设计用于帮助基于 RTOS 的应用程序开发人员发现其中一些难以捉摸的错误、识别问题并提供纠正措施的工具。这些工具很容易获得,但嵌入式开发人员通常不知道。

什么是实时操作系统

实时操作系统(也称为 RTOS 或实时内核)是尽可能高效地管理 CPU(中央处理单元)时间的软件。大多数内核都是用 C 语言编写的,并且需要一小部分用汇编语言编写的代码才能使内核适应不同的 CPU 架构。当您使用 RTOS 内核设计应用程序(您的代码)时,您只需将工作拆分为任务,每个任务负责一部分工作。任务(也称为线程)是一个简单的程序,它认为自己完全拥有 CPU。在单个 CPU 上,在任何给定时间只能执行一个任务。您的应用程序代码还需要根据任务重要性以及每个任务的堆栈 (RAM) 为每个任务分配优先级。一般来说,添加低优先级任务不会影响系统对高优先级任务的响应。任务通常也实现为无限循环。内核负责任务的管理。这称为多任务处理。多任务处理是在多个顺序任务之间调度和切换 CPU 的过程。多任务处理提供了拥有多个 CPU 的错觉,并最大限度地利用了 CPU,如下所示。多任务处理还有助于创建模块化应用程序。使用实时内核,应用程序更易于设计和维护。多任务处理提供了拥有多个 CPU 的错觉,并最大限度地利用了 CPU,如下所示。多任务处理还有助于创建模块化应用程序。使用实时内核,应用程序更易于设计和维护。多任务处理提供了拥有多个 CPU 的错觉,并最大限度地利用了 CPU,如下所示。多任务处理还有助于创建模块化应用程序。使用实时内核,应用程序更易于设计和维护。

pYYBAGK9B02AZFU-AAEBYD1r2P8657.png

大多数商业 RTOS 都是抢占式的,这意味着内核始终运行最重要的可立即运行的任务。抢占式内核也是事件驱动的,这意味着任务被设计为等待事件发生才能执行。如果任务等待的事件没有发生,内核运行其他任务。等待任务消耗零 CPU 时间。发送信号和等待事件是通过内核应用程序编程接口 (API) 调用完成的。内核允许您避免轮询循环,这会浪费 CPU 的时间。以下是如何实现典型任务的示例:

poYBAGK9B1WAf5u5AAC3kTgRW_U317.png

内核为程序员提供了许多有用的服务,例如多任务处理、中断管理、任务间通信和信令、资源管理、时间管理、内存分区管理等等。RTOS 可用于只有少量任务的简单应用程序,但它是需要复杂且耗时的通信堆栈的应用程序的必备工具,例如 TCP/IP、USB(主机和/或设备) )、CAN蓝牙Zigbee 等。当应用程序需要文件系统来存储和检索数据以及产品配备某种图形显示(黑白、灰度或彩色)时,强烈建议使用 RTOS。

内置调试端口

ARM Cortex.-M 处理器配备了内置于每个芯片上的特殊且非常强大的调试硬件。CoreSight 提供非侵入式功能,允许工具在不停止 CPU 的情况下监视和控制实时系统,例如:

动态内存/外设访问(读取和写入)

指令跟踪(要求芯片还包括一个执行跟踪宏单元,ETM)

数据追踪

使用分析计数器进行分析

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

poYBAGK9B1yAYuXmAAJ0T2PUqic459.png

用于测试/调试实时系统的工具

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

poYBAGK9B2iAWNSSAAIz0v3vR28368.png

1 - 嵌入式开发人员经常使用集成开发环境 (IDE),其中包括代码编辑器、编译器、汇编器、链接器、调试器和可能的其他工具。

IDE 中内置的调试器只提供最基本的必需品:下载代码、启动/停止、设置断点和其他一些简单功能。一些调试器更进一步,允许您在目标运行时显示和更改变量(也称为 Live Watch),但功能仅限于数值。包含内置 RTOS 感知功能的调试器也很常见,但通常需要您暂停应用程序以检查 RTOS 的状态(对于调试实时系统不太实用)。

2 - 当您准备好调试应用程序时,通过 Debugger Probe(例如 Segger J-Link )将代码下载到目标。

3 - J-Link 连接到 CoreSight 调试端口,能够启动/停止 CPU、下载代码、对板载 Flash 进行编程等。即使目标正在执行代码,J-Link 也可以根据需要直接读取和写入内存。

4 - Micrium 的 μC/Probe是一个独立的、与 CPU 供应商无关的、基于 Windows 的应用程序,可读取工具链生成的 ELF 文件。ELF 文件包含下载到目标的代码以及所有全局可访问变量的名称、它们的数据类型以及它们在目标内存中的物理内存位置。

5 - μC/Probe 允许用户在运行时(即实时)显示或更改连接的嵌入式目标上几乎任何变量或内存位置(包括 I/O 端口)的值。用户只需从仪表、数字指示器、表格、图形、虚拟 LED、条形图、滑块、开关、按钮和其他组件的库中填充 μC/Probe 的图形环境,并将其中的每一个与变量或内存位置相关联嵌入式设备。μC/Probe 不需要您检测目标代码以在运行时显示或更改变量。通过在 μ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,因此您可以同时使用所有三个工具。

审核编辑:郭婷

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

    关注

    5186

    文章

    20146

    浏览量

    328796
  • 滤波器
    +关注

    关注

    162

    文章

    8351

    浏览量

    184758
  • 编辑器
    +关注

    关注

    1

    文章

    826

    浏览量

    32648
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何选择合适的实时操作系统

    选择合适的实时操作系统(RTOS,Real-Time Operating System)可能会影响你在不同行业的职业发展路径。
    的头像 发表于 09-09 14:47 801次阅读

    使用RTOS的SDK,调整rtsmart-menuconfig出现编译错误怎么解决?

    部分错误日志: ……Make librtsp_pusher done.Make MPP middleware libraries done.4cf2f76fatal: 没有发现名称,无法描述任何东西
    发表于 07-22 07:59

    请问编译纯rtos到底是选择Linux+rtos的sdk编译only rtos还是直接使用rtos sdk?

    编译纯rtos到底是选择Linux+rtos的sdk编译only rtos还是直接使用rtos sdk?
    发表于 07-11 07:22

    IAR平台现已提供对Zephyr RTOS的量产级支持

    IAR宣布,其嵌入式开发平台正式推出对Zephyr RTOS的量产级支持。该支持自IAR的Arm开发工具链v9.70起全面提供。
    的头像 发表于 07-09 15:43 347次阅读

    Lauterbach TRACE32开发工具现在支持PX5 RTOS

    Lauterbach TRACE32开发工具现在支持PX5 RTOS。这里TRACE32工具支持包括对PX5 RTOS内部结构和数据的访问,使开发人员能够更深入地了解其应用程序的行为方
    的头像 发表于 06-12 16:38 824次阅读

    零延迟响应:安卓工控机如何用实时操作系统(RTOS)赋能工业控制

    在工业4.0时代,工业控制系统对实时性的要求已突破毫秒级门槛,传统操作系统因任务调度延迟、中断响应不确定性等问题,难以满足精密运动控制、闭环反馈调节等场景需求。安卓工控机通过集成RTOS实时
    的头像 发表于 06-09 15:49 835次阅读

    揭秘LuatOS:实时操作系统RTOS核心库的关键技术剖析!

    电机控制、传感器采集等实时数据处理场景。 在LuatOS开发中, 用于实时操作系统(RTOS)相关功能的核心库 ——提供了定时器管理、系统控制、内存监控、路径配置等底层操作接口,为物联网设备提供可靠的
    的头像 发表于 05-21 16:02 513次阅读
    揭秘LuatOS:<b class='flag-5'>实时</b>操作系统<b class='flag-5'>RTOS</b>核心库的关键技术剖析!

    如何在Eclipse ThreadX RTOS中集成SystemView

    SEGGER实时软件分析工具SystemView已经在ThreadX v6.4.2上进行了测试。SystemView从v3.60c版本支持Eclipse ThreadX(Azure RTOS),用户
    的头像 发表于 05-06 17:11 1171次阅读

    如何在STM32CubeMX中集成Flexible Safety RTOS

    使用STM32处理器的用户,可以通过STM32Cube工具生成基础工程,免费评估功能安全操作系统Flexible Safety RTOS二进制库了。
    的头像 发表于 01-17 11:31 2257次阅读
    如何在STM32CubeMX中集成Flexible Safety <b class='flag-5'>RTOS</b>

    基于Vector工具进行CAN协议错误帧的分析实践

    广播发送的短帧结构,还体现在其错误检测机制上。通过总线数据以及总线波形来分析总线故障时,CAN协议错误检测机制中丰富的错误帧类型能让定位问题的效率更高。错误帧是CA
    的头像 发表于 01-15 10:03 993次阅读
    基于Vector<b class='flag-5'>工具</b>进行CAN协议<b class='flag-5'>错误</b>帧的分析实践

    Flexible Safety RTOS的技术特征

    Embedded Office的Flexible Safety RTOS是专为具有严格功能安全要求的嵌入式系统量身定制的、先进的实时操作系统。该RTOS专为工业自动化、汽车、铁路和医疗设备等行业而设
    的头像 发表于 01-07 11:29 993次阅读

    RTOS中的错误检查机制

    在嵌入式应用中,有可能发生各种各样的错误,系统必须能够检测到这些错误并作出适当的响应。RTOS通常内置了一些错误检查功能,用于检测错误并向应
    的头像 发表于 01-03 14:44 1022次阅读

    使用任务通知提高RTOS应用的效率

    实时嵌入式系统中,性能和资源效率是决定设计成败的关键因素。传统的实时操作系统(RTOS)提供了如队列、信号量和事件组机制,实现任务之间的同步和通信。FreeRTOS/SAFERTOS还提供一种方法可以使这些过程更快、更轻量化,
    的头像 发表于 12-27 14:54 1068次阅读

    鸿道Intewell操作系统的Windows实时拓展方案

    道Intewell-Win继承了鸿道(Intewell)多融合的特性,能够在Windows上运行高实时性应用的RTOS。它支持一个CPU核心同时运行多个RTOS,并确保这些RTOS能按
    的头像 发表于 12-24 17:40 834次阅读
    鸿道Intewell操作系统的Windows<b class='flag-5'>实时</b>拓展方案

    一种实现亚毫秒定时分辨率的RTOS新方法

    你在使用实时操作系统(RTOS)时是否发现无法将任务调度或延迟精度降到毫秒以下?你可能不得不在RTOS之外编写大量应用代码。虽然这种方式可行,但这会让你怀疑应用程序是否满足其截止期限,
    的头像 发表于 12-17 13:58 719次阅读
    一种实现亚毫秒定时分辨率的<b class='flag-5'>RTOS</b>新方法