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,因此您可以同时使用所有三个工具。

审核编辑:郭婷

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

    关注

    5209

    文章

    20629

    浏览量

    336810
  • 滤波器
    +关注

    关注

    162

    文章

    8462

    浏览量

    186208
  • 编辑器
    +关注

    关注

    1

    文章

    828

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于极海APM32F4的Azure RTOS ThreadX移植过程分享

    最近在玩APM32F407IG的板子,发现官方提供了两个RTOS的demo,FreeRTOS和RT-thread。想着APM32F4这么丰富的资源,是不是也可以跑一下ThreadX RTOS看看
    的头像 发表于 04-02 11:30 703次阅读
    基于极海APM32F4的Azure <b class='flag-5'>RTOS</b> ThreadX移植过程分享

    如何在Zephyr RTOS中实现延时和计时函数

    实时操作系统(RTOS)中,时间管理是核心功能之一。无论是任务调度、超时控制,还是周期性事件,延时和计时机制都扮演着至关重要的角色。Zephyr RTOS作为一个轻量级、模块化的开源系统,提供了
    的头像 发表于 12-26 10:32 6052次阅读
    如何在Zephyr <b class='flag-5'>RTOS</b>中实现延时和计时函数

    RTOS在嵌入式开发中的作用

    嵌入式系统中,有很多方式实现任务调度。功能有限的小系统中,无限循环足够实现系统功能。当软件设计变得庞大且复杂时,设计师应该考虑使用RTOS实时操作系统)。 下面给大家分享使用RTOS的8个理由
    发表于 12-26 07:53

    使用RTOS时需要注意的几点内容分享

    对许多嵌入式项目来说,系统设计师都倾向于选择实时操作系统(RTOS)。但RTOS总是必要的吗? 答案是取决于具体的应用,因此了解我们要达到什么目标是决定RTOS是必要的还是花瓶的关键
    发表于 12-23 06:34

    选择RTOS的要点

    对于许多嵌入式项目来说,在采用非实时操作系统(non-RTOS)的任何场合,也都可采用RTOS。但是,要找到一款具有完全相同应用编程接口(API)的匹配RTOS就相当困难了。因此,许多
    发表于 12-12 08:00

    RTOS Crash 问题全维度分析与解决指南

    (ISR)执行时间超限3. ISR中修改共享资源未关中断/用原子操作 实时性超时、数据竞态导致逻辑错误、HardFault(ISR栈溢出) 所有RTOS:ISR优先级需低于
    发表于 12-08 03:56

    如何解决I/O时钟布局器错误

    在 I/O 时钟布局器阶段可能会发生错误,指出该工具无法对该时钟结构进行布局,直至最后 BUFG 仍然无法完成布局。
    的头像 发表于 09-23 16:05 1275次阅读

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

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

    使用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 735次阅读

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

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

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

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

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

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