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

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

3天内不再提示

使用RTOS时问题如何检测和纠正

星星科技指导员 来源:嵌入式计算设计 作者: Jean Labrosse 2022-06-30 10:07 次阅读

基于 RTOS 的问题

在本节中,我们将探讨开发人员在使用 RTOS 时遇到的一些常见问题,并展示如何检测和纠正这些问题。

堆栈溢出:

在基于内核的应用程序中,每个任务都需要自己的堆栈。任务所需的堆栈大小是特定于应用程序的。 如果使堆栈大于任务所需,则会浪费内存。如果堆栈太小,您的应用程序很可能会覆盖应用程序变量或另一个任务的堆栈。堆栈区域外的任何写入都称为堆栈溢出。当然,在这两种选择之间,为堆栈过度分配内存比分配不足要好。因此,您可以通过过度分配内存来减少堆栈溢出的机会。但是,通常只需要 25-50% 的额外堆栈空间。一些 CPU,例如基于 ARMv8M 架构的 CPU,具有内置的堆栈溢出检测功能。但是,该功能无助于确定正确的堆栈大小。它只是防止堆栈溢出的负面后果。

参考文献[1]解释了如何确定每个任务堆栈的大小。简而言之,您通过为任务堆栈过度分配空间来开始您的设计,然后在已知的最坏情况下运行您的应用程序,同时监控实际的堆栈使用情况。

下图是 μC/Probe 对一个测试应用的内核感知的截图。Stack Usage列显示每个任务在任何给定时间的最大堆栈使用量的条形图。虽然截取了屏幕截图,但 μC/Probe 会实时更新并显示此信息,因此您无需停止目标即可查看此信息,因为它正在更新。

绿色表示最大堆栈使用率一直保持在 70% 以下。

黄色表示堆栈使用率介于 70% 和 90% 之间。

红色表示堆栈使用率已超过 90%。

显然,应该增加使用 92% 的任务的堆栈,使其回到 70% 范围以下。黄色的任务堆栈是空闲任务,在 77% 的情况下,它通常不会成为问题,除非您将代码添加到空闲任务回调函数(这取决于您使用的 RTOS)。

pYYBAGK9BXuACTJAAALxJalYhUk898.png

中断响应:

在操作内部数据结构(即临界区)时,RTOS 和应用程序代码通常必须禁用中断。RTOS 开发人员尽一切努力减少中断禁用时间,因为它会影响系统对事件的响应。

一些 RTOS 实际上基于每个任务测量最坏情况下的中断禁用时间,如下面的 μC/Probe 屏幕截图所示。如果您试图满足实时截止日期,则此信息非常宝贵。

中断被禁用的时间很大程度上取决于 CPU、它的时钟频率、您的应用程序和被调用的 RTOS 服务。禁用中断时间最长的任务以红色突出显示。这使您可以快速识别潜在的异常值,尤其是在大型和复杂的应用程序中。

pYYBAGK9BYSAOJBIAAMiBG7qqio864.png

如果最大的中断禁用时间是由 RTOS 引起的,那么您可能无能为力,除非:

查找中断禁用时间较短的备用 RTOS API。例如,如果您只是向任务发出信号以指示事件发生,那么您可以简单地挂起/恢复任务,而不是使用信号量或事件标志。换句话说,等待事件的任务会自行挂起,而发出事件信号的 ISR 会恢复任务。

提高 CPU 的时钟频率。不幸的是,这很少是一种选择,因为其他因素可能已经决定了理想的 CPU 时钟频率。

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

优先级反转:

当低优先级任务拥有高优先级任务所需的资源时,就会发生优先级反转。当中等优先级任务抢占低优先级任务同时持有资源时,问题会更加严重。术语“优先级倒置”指的是低优先级任务的行为就好像它比高优先级任务具有更高的优先级,至少在共享该资源时是这样。

优先级反转是实时系统中的一个问题,并且在使用基于优先级的抢占式内核时会发生(大多数 RTOS 都是抢占式的)。如下图所示,SystemView 用于说明优先级倒置的场景。

App HPT(High Priority Task)优先级最高

App MPT (Medium Priority Task) 具有中等优先级

App LPT (低优先级任务)的优先级最低

poYBAGK9BY2AFLtvAADiTjbS9x8808.png

1 - LPT 是唯一可以运行的任务,因此它获取 CPU 并获取信号量以访问共享资源。

2 -为了模拟优先级反转的发生,LPT 使 HPT 准备好运行,因此 RTOS 上下文切换到 HPT。

3 - HPT 使 MPT 准备好运行但继续执行,因为 HPT 仍然具有更高的优先级。

4 - HPT 需要访问共享资源并尝试获取信号量。但是,由于信号量归 LPT 所有,HPT 无法继续执行,因此 RTOS 切换到 MPT。

5 - MPT 一直执行,直到它需要等待其事件再次发生,以便 RTOS 切换回 LPT。

6 - LPT 完成对共享资源的使用,因此它释放信号量。此时,RTOS 注意到 HPT 正在等待资源,因此将信号量提供给 HPT 并使其准备好运行。HPT 恢复执行并执行它需要对共享资源执行的任何操作。

7 - 一旦 HPT 完成对资源的访问,它就会释放信号量,然后等待其事件再次发生(在这种情况下,我们通过自挂起模拟了这一点)。

8 - LPT 恢复执行,因为其他两个任务都没有准备好运行。

9 -发生优先级反转是因为 LPT 拥有 HPT 需要的资源。但是,当中等优先级任务进一步延迟 LPT 释放信号量时,问题会变得更糟。

您可以通过使用称为 Mutex(互斥信号量)的特殊 RTOS 机制来解决上述优先级反转问题。下图显示了相同的场景,除了这里 LPT 和 HPT 都使用互斥锁而不是信号量来访问共享资源。

poYBAGK9BZSAZi-dAADndWCPgbg026.png

1 - LPT 是唯一可以运行的任务,因此它获取 CPU 并获取互斥体以访问共享资源。

2 - 为了模拟优先级反转的发生,LPT 使 HPT 准备好运行,因此 RTOS 上下文切换到 HPT。

3 - HPT 使 MPT 准备好运行但继续执行,因为 HPT 仍然具有更高的优先级。

4 - HPT 需要访问共享资源并尝试获取互斥锁。但是,由于互斥锁归 LPT 所有,因此 HPT 无法继续执行。但是,由于使用了互斥体,RTOS 会将 LPT 的优先级提高到 HPT 的优先级,以防止它被中等优先级抢占。

5 - 然后 RTOS 切换到 LPT,它现在以与 HPT 相同的优先级运行。

6 - LPT 完成对共享资源的使用,因此它释放互斥锁。RTOS 将 LPT 的优先级降低回其原始(较低)优先级,并将互斥锁分配给 HPT。

7 - RTOS 切换回 HPT,因为它正在等待释放互斥锁。一旦完成,HPT 就会释放互斥锁。

8 - 一旦 HPT 完成其工作的执行,它就会等待它正在等待的事件的再次发生。

9 - RTOS 切换到在就绪队列中等待的 MPT。

10 -当 MPT 完成它的工作时,它还挂起将导致该任务再次执行的事件。

11 - LPT 现在可以恢复执行。

优先级反转现在受限于 LPT 访问共享资源所需的时间量。如果没有像 SystemView 这样的工具,优先级反转将很难识别和纠正。

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

审核编辑:郭婷

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

    关注

    68

    文章

    10873

    浏览量

    212062
  • API
    API
    +关注

    关注

    2

    文章

    1502

    浏览量

    62125
  • RTOS
    +关注

    关注

    22

    文章

    815

    浏览量

    119705
收藏 人收藏

    评论

    相关推荐

    RTOS中的错误检查机制

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

    漏电开关使用误区及纠正

    :漏电开关可以代替过载保护 误区解释: 许多人认为漏电开关可以同时提供过载保护,但实际上漏电开关的主要功能是检测漏电并切断电源,而不是保护电路不受过载损害。 纠正方法: 应使用专门的过载保护装置,如熔断器或过载继
    的头像 发表于 12-30 17:18 290次阅读

    电子电器气密性检测仪使用方法:操作中的常见错误与纠正

    电子电器气密性检测仪是确保产品质量的关键设备,但在使用过程中,操作人员常犯一些错误,导致测试结果不准确或仪器损坏。以下是一些常见的操作错误及其纠正方法,旨在帮助操作人员正确使用气密性检测仪。常见错误
    的头像 发表于 11-29 11:20 174次阅读
    电子电器气密性<b class='flag-5'>检测</b>仪使用方法:操作中的常见错误与<b class='flag-5'>纠正</b>

    RTOS与Linux到底有什么区别

    很多做嵌入式开发的小伙伴都存在这样的疑惑:RTOS与Linux到底有什么区别?
    的头像 发表于 10-29 09:53 472次阅读

    深入解析Zephyr RTOS的技术细节

    Zephyr是一个针对资源受限设备优化的小型、可缩放、多体系架构实时操作系统(RTOS)。Zephyr由Linux基金会维护[1],是一个以构建业界最佳的RTOS为目标的开源合作项目。近年来
    的头像 发表于 10-22 16:47 565次阅读
    深入解析Zephyr <b class='flag-5'>RTOS</b>的技术细节

    RTOS正在缩小与Linux的差距

    RTOS与Linux的物联网设备操作系统之争已经持续了很多年。Linux以其强大的计算能力和丰富的软件生态,在需要复杂处理和软件支持的物联网设备上占据一席之地;RTOS凭借实时响应和资源节约的特性
    的头像 发表于 09-10 08:07 791次阅读
    <b class='flag-5'>RTOS</b>正在缩小与Linux的差距

    freertos和rtos区别是什么

    FreeRTOS 和 RTOS(实时操作系统)是两个不同的概念,但它们之间有紧密的联系。FreeRTOS 是一个特定的开源实时操作系统,而 RTOS 是实时操作系统的一般概念。 概念定义 RTOS
    的头像 发表于 09-02 14:18 1315次阅读

    RTOS与Linux有什么区别

    RTOS(Real-Time Operating System,实时操作系统)与Linux是两种在不同应用场景下发挥重要作用的操作系统,它们在设计理念、功能特性、应用场景以及性能表现等方面存在显著差异。以下是对RTOS与Linux区别的详细分析。
    的头像 发表于 08-20 16:05 3741次阅读

    RTOS的特性和类型

    实时操作系统(RTOS)是一种可运行实时计算应用程序的软件平台,用于处理具有明确时间约束的事件和数据。与通用操作系统(GPOS)不同,RTOS必须在有限的硬件资源上调度应用程序之间的处理和数据共享
    的头像 发表于 08-20 11:29 614次阅读

    RTOS开发最佳实践

    基于RTOS编写应用程序时,有一些要注意事项。在本节中,您将学习RTOS开发最佳实践,例如POSIX合规性、安全性和功能安全认证。
    的头像 发表于 08-20 11:24 467次阅读

    简单认识RTOS实时操作系统

    RTOS(Real Time Operating System,实时操作系统)是一种专门设计用于在严格时间限制内处理任务的操作系统。它以其高实时性、多任务处理能力和资源管理能力在工业自动化、医疗设备、航空航天、汽车电子等众多领域得到广泛应用。以下是对RTOS实时操作系统的
    的头像 发表于 08-20 11:20 2873次阅读

    ESP8266_RTOS_SDK编译错误的原因?

    我刚刚下载了 RTOS sdk 并按照以下步骤操作: https://github.com/espressif/esp8266_rtos_sdk 我可以在examples文件夹中编译应用程序。但是
    发表于 07-12 08:04

    基于RTOS的应用进程中的典型线程

    RTOS中的关键因素是最小的中断延迟和最小的线程切换延迟。RTOS的价值在于它的响应速度或可预测性,而不是它在给定时间段内可以执行的工作量。
    发表于 03-05 09:32 642次阅读
    基于<b class='flag-5'>RTOS</b>的应用进程中的典型线程

    基于纠正措施系统(FRACAS)的关键技术

    故障报告,分析和纠正措施系统是一种系统的方法,用于从一个或多个来源收集失效数据,针对根本原因对数据进行汇编和分析以及识别纠正措施。
    的头像 发表于 02-20 10:34 1664次阅读

    使用TSIP驱动程序(Azure RTOS)的TLS实现示例

    电子发烧友网站提供《使用TSIP驱动程序(Azure RTOS)的TLS实现示例.pdf》资料免费下载
    发表于 01-31 10:13 3次下载
    使用TSIP驱动程序(Azure <b class='flag-5'>RTOS</b>)的TLS实现示例