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

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

3天内不再提示

RTOS中的错误检查机制

麦克泰技术 来源:麦克泰技术 2025-01-03 14:44 次阅读

嵌入式应用中,有可能发生各种各样的错误,系统必须能够检测到这些错误并作出适当的响应。RTOS通常内置了一些错误检查功能,用于检测错误并向应用提供响应错误的方法。

错误分类

开发和运行RTOS应用程序中的错误可以分为两类。第一类错误与RTOS的配置相关,这些错误可以在应用程序编译之前通过完整性检查检测到,称之为配置检查。

在使用RTOS时,通过修改配置值以满足应用程序的需要。应用程序开发人员可以在其约束范围修改这些值,约束限制包括硬件约束或实现约束。通过RTOS代码中的#ifdef或#error这样的预处理器指令可以实现配置检查。预处理检查在代码编译之前进行,检查是否存在配置错误。

第二类错误是在应用程序运行时发生,称为运行时错误。根据运行时错误发生的不同原因,有不同的错误检测策略。本文关注第二类错误检查。

运行时错误

运行时错误的原因包括传递给API函数的非法参数,如空指针而非有效的任务句柄,或超出给定范围的值,可以错误通过API函数使用之前的参数检查检测。

内存损坏导致的非法或错误行为是另一类运行时错误,可以使用内存检查算法如校验和或奇偶校验位检测这些错误。如果只需要检查几个非常重要的值,可以在不同的内存地址中存储这些值的备份(或按位翻转的值),并在访问该值时比较它们,这些值被称为镜像值。

RTOS堆栈

RTOS中的每个任务都有自己的堆栈,用于存储本地变量、返回地址、函数参数、返回值及其上下文。因此,内核必须检查每个堆栈是否驻留在自己内存地址,否则一个任务的堆栈内容可能被其他任务破坏。已使用堆栈的大小会随着应用的执行不断变化,例如函数调用深度的增加。由于物理内存空间有限,堆栈溢出可能导致内存损坏。为了防止这种错误,在存储任务上下文之前,RTOS内核必须检查堆栈的可用空间。

功能单元

RTOS应用程序中的每个任务都是一个独立的功能单元,拥有独立的内存空间。任务访问与另一项任务相关联内存也可能导致内存破坏,必须加以预防。可以使用内存保护单元为任务定义内存区域和访问权限。如果一个任务访问了未被授权的内存,MPU将生成一个异常,该异常将由应用程序处理。

错误处理

检测到错误后,必须以某种方式通过应用程序处理,如何通知应用程序取决于错误类型以及错误的严重程度。在API函数中发出错误信号的一种方法是通过其返回值中的状态码。应用代码应该检查所有API函数的返回值。根据错误代码,应用程序可以恢复某些错误。如果出现不可恢复错误,应用程序应将系统转换到安全状态。RTOS还可以调用应用定义的错误处理函数,在错误发生时实现相应处理,此方法通常用于不可恢复的错误,错误处理程序尾部是一个无限循环,该函数不会返回。

SAFERTOS中的错误检查

功能安全操作系统SAFERTOS对所有传递给API函数的参数执行错误检查。API函数返回类型为portBaseType的状态码,其中包含错误码。通过检查状态码可以确定调用是否成功。预定义错误代码的列表参见文件projdefs.h。

SAFERTOS通过调用vApplicationErrorHook实现错误处理,该函数由应用定义,在检测到错误而没有返回错误码时,内核将调用该函数。

SAFERTOS实现的一些错误检查示例如下:

•检查API函数参数是否包含有效句柄和值。

• SAFERTOS中的堆栈是预先分配的字节数组,包含正在使用的堆栈标记,防止其被多个任务访问。

•任务控制块包含有关堆栈限位信息,内核可以在存储任务上下文前检查可用的堆栈空间,防止堆栈溢出。

•使用镜像值检查重要的系统参数,如堆顶地址,堆栈限制,FPU使用标记和TCB中的MPU设置。滴答值和SVC处理程序地址也保存了其镜像值。

•如果硬件包含MPU,SAFERTOS默认启用该功能,使用它来管理多个任务可能访问的内存区域。

麦克泰技术是SAFERTOS在中国的代理商,具有超过20年嵌入式实时操作系统的市场、服务和培训经验,关于SAFERTOS的更多信息,欢迎咨询麦克泰。

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

    关注

    5086

    文章

    19140

    浏览量

    305860
  • RTOS
    +关注

    关注

    22

    文章

    815

    浏览量

    119702
  • 应用程序
    +关注

    关注

    37

    文章

    3277

    浏览量

    57738

原文标题:RTOS中的错误检查机制

文章出处:【微信号:麦克泰技术,微信公众号:麦克泰技术】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Rust语言中错误处理的机制

    可能的错误,实际运行仍然可能出现各种各样的错误,比如文件不存在、网络连接失败等等。对于这些不可预测的错误,我们必须使用错误处理机制来进行处
    的头像 发表于 09-19 14:54 1436次阅读

    RTOS的多任务机制应用演示

    的执行路径。深入理解和实现RTOS深入理解和实现RTOS_连载5_多任务机制应用.pdf (247.18 KB )
    发表于 02-17 23:30

    如何检查代码的潜在错误

    C:2012 和 MISRA C++ 2008 标准,以及 CWE 和 CERTC/C++涵盖的数百个问题的检查。使用方式简单,生成全面而详细的错误信息。C-RUN用于发现代码运行过程存在
    发表于 06-03 09:35

    INtime RTOS内部的关键处理机制是什么

    INtime RTOS内部的关键处理机制是什么?INtime RTOS内部的关键处理机制有哪些相关的应用案例?
    发表于 09-29 06:28

    汉明(Hamming)错误修正检查

    汉明(Hamming)错误修正检查码:在数位资料的传输难免会发生错误,以某些媒体来说(如无线电、网际网路上资料的传输、通讯资料的传输、及其它相关的资料传输),较容易产生突
    发表于 11-17 18:04 15次下载

    PCIe扫盲—PCIe错误检测机制的详细资料概述

    PCIe总线错误检测囊括了链路(Link)上的错误以及包传递过程错误,如下图所示。用户设计的应用程序层
    的头像 发表于 08-18 11:05 1.5w次阅读

    Altium显示DRC错误检查方法

    Altium有时候总是显示DRC错误,不知道哪里出了问题,下面小编带大家学习一下常见的DRC检查有哪些?
    的头像 发表于 09-23 12:27 3.4w次阅读

    Modbus协议的介绍和应用及错误检查方法的资料说明

    本文档的主要内容详细介绍的是Modbus协议的介绍和应用及错误检查方法的资料说明包括了:1.介绍 Modbus 协议介绍 2. 两种串行传输模式 3. 信息帧 4. 错误检查方法
    发表于 05-10 08:00 2次下载
    Modbus协议的介绍和应用及<b class='flag-5'>错误</b><b class='flag-5'>检查</b>方法的资料说明

    PCIe错误报告的两种机制详解

    机制是PCIe设备必需支持的一种错误报告机制,同时设备会定义最小的错误报告请求。应该是通过配置Device Control和Command寄存器做到通知其他设备产生了
    的头像 发表于 10-23 11:14 2.6w次阅读
    PCIe<b class='flag-5'>错误</b>报告的两种<b class='flag-5'>机制</b>详解

    通过各种指令的EN/ENO机制,可以检测运行错误

    为该块互连了 EN/ENO 机制。如果执行期间没有任何错误,则 ENO 使能输出的信号状态将为“1”。如果执行期间发生错误,则 ENO 使能输出的信号状态将为“0”。
    的头像 发表于 03-02 14:36 4831次阅读

    哪些工具可以可以发现基于RTOS的程序错误

    、饥饿、死锁、优先级反转等bug。 一些专门设计的工具,可以帮助基于RTOS的程序开发人员发现一些难以发现的错误RTOS是什么? 实时操作系统(RTOS或实时内核)是有效地管理CP
    的头像 发表于 04-12 10:46 1954次阅读
    哪些工具可以可以发现基于<b class='flag-5'>RTOS</b>的程序<b class='flag-5'>错误</b>?

    如何处理RTOS错误和超时

      在典型系统,许多路径流经 RTOS,因此它处于检测和处理错误的良好位置。一般来说,函数的返回值,尤其是 RTOS 服务,不应该在没有检查
    的头像 发表于 06-29 09:46 3229次阅读
    如何处理<b class='flag-5'>RTOS</b><b class='flag-5'>错误</b>和超时

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

    数值。包含内置 RTOS 感知功能的调试器也很常见,但通常需要您暂停应用程序以检查 RTOS 的状态(对于调试实时系统不太实用)。
    的头像 发表于 06-30 10:15 968次阅读
    使用专门的<b class='flag-5'>RTOS</b>工具发现实时<b class='flag-5'>错误</b>

    如何使用数据包错误检查来保护您的温度读数

    “数据包错误检查”(PEC)是一种在数据传输过程中广泛使用的错误检测机制。Maxim集成产品采用PEC模式,以提高数据传输的可靠性。本应用笔记讨论了PEC字节在具有1线和2线接口的温度
    的头像 发表于 02-13 10:48 1843次阅读
    如何使用数据包<b class='flag-5'>错误</b><b class='flag-5'>检查</b>来保护您的温度读数

    RTOS消息队列的应用

    基于RTOS的应用,通常使用队列机制实现任务间的数据交互,一个应用程序可以有任意数量的消息队列,每个消息队列都有自己的用途。
    发表于 05-29 10:49 638次阅读
    <b class='flag-5'>RTOS</b>消息队列的应用