0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RTOS中的錯(cuò)誤檢查機(jī)制

麥克泰技術(shù) ? 來(lái)源:麥克泰技術(shù) ? 2025-01-03 14:44 ? 次閱讀

嵌入式應(yīng)用中,有可能發(fā)生各種各樣的錯(cuò)誤,系統(tǒng)必須能夠檢測(cè)到這些錯(cuò)誤并作出適當(dāng)?shù)捻憫?yīng)。RTOS通常內(nèi)置了一些錯(cuò)誤檢查功能,用于檢測(cè)錯(cuò)誤并向應(yīng)用提供響應(yīng)錯(cuò)誤的方法。

錯(cuò)誤分類

開(kāi)發(fā)和運(yùn)行RTOS應(yīng)用程序中的錯(cuò)誤可以分為兩類。第一類錯(cuò)誤與RTOS的配置相關(guān),這些錯(cuò)誤可以在應(yīng)用程序編譯之前通過(guò)完整性檢查檢測(cè)到,稱之為配置檢查。

在使用RTOS時(shí),通過(guò)修改配置值以滿足應(yīng)用程序的需要。應(yīng)用程序開(kāi)發(fā)人員可以在其約束范圍修改這些值,約束限制包括硬件約束或?qū)崿F(xiàn)約束。通過(guò)RTOS代碼中的#ifdef或#error這樣的預(yù)處理器指令可以實(shí)現(xiàn)配置檢查。預(yù)處理檢查在代碼編譯之前進(jìn)行,檢查是否存在配置錯(cuò)誤。

第二類錯(cuò)誤是在應(yīng)用程序運(yùn)行時(shí)發(fā)生,稱為運(yùn)行時(shí)錯(cuò)誤。根據(jù)運(yùn)行時(shí)錯(cuò)誤發(fā)生的不同原因,有不同的錯(cuò)誤檢測(cè)策略。本文關(guān)注第二類錯(cuò)誤檢查。

運(yùn)行時(shí)錯(cuò)誤

運(yùn)行時(shí)錯(cuò)誤的原因包括傳遞給API函數(shù)的非法參數(shù),如空指針而非有效的任務(wù)句柄,或超出給定范圍的值,可以錯(cuò)誤通過(guò)API函數(shù)使用之前的參數(shù)檢查檢測(cè)。

內(nèi)存損壞導(dǎo)致的非法或錯(cuò)誤行為是另一類運(yùn)行時(shí)錯(cuò)誤,可以使用內(nèi)存檢查算法如校驗(yàn)和或奇偶校驗(yàn)位檢測(cè)這些錯(cuò)誤。如果只需要檢查幾個(gè)非常重要的值,可以在不同的內(nèi)存地址中存儲(chǔ)這些值的備份(或按位翻轉(zhuǎn)的值),并在訪問(wèn)該值時(shí)比較它們,這些值被稱為鏡像值。

RTOS堆棧

RTOS中的每個(gè)任務(wù)都有自己的堆棧,用于存儲(chǔ)本地變量、返回地址、函數(shù)參數(shù)、返回值及其上下文。因此,內(nèi)核必須檢查每個(gè)堆棧是否駐留在自己內(nèi)存地址,否則一個(gè)任務(wù)的堆棧內(nèi)容可能被其他任務(wù)破壞。已使用堆棧的大小會(huì)隨著應(yīng)用的執(zhí)行不斷變化,例如函數(shù)調(diào)用深度的增加。由于物理內(nèi)存空間有限,堆棧溢出可能導(dǎo)致內(nèi)存損壞。為了防止這種錯(cuò)誤,在存儲(chǔ)任務(wù)上下文之前,RTOS內(nèi)核必須檢查堆棧的可用空間。

功能單元

RTOS應(yīng)用程序中的每個(gè)任務(wù)都是一個(gè)獨(dú)立的功能單元,擁有獨(dú)立的內(nèi)存空間。任務(wù)訪問(wèn)與另一項(xiàng)任務(wù)相關(guān)聯(lián)內(nèi)存也可能導(dǎo)致內(nèi)存破壞,必須加以預(yù)防。可以使用內(nèi)存保護(hù)單元為任務(wù)定義內(nèi)存區(qū)域和訪問(wèn)權(quán)限。如果一個(gè)任務(wù)訪問(wèn)了未被授權(quán)的內(nèi)存,MPU將生成一個(gè)異常,該異常將由應(yīng)用程序處理。

錯(cuò)誤處理

檢測(cè)到錯(cuò)誤后,必須以某種方式通過(guò)應(yīng)用程序處理,如何通知應(yīng)用程序取決于錯(cuò)誤類型以及錯(cuò)誤的嚴(yán)重程度。在API函數(shù)中發(fā)出錯(cuò)誤信號(hào)的一種方法是通過(guò)其返回值中的狀態(tài)碼。應(yīng)用代碼應(yīng)該檢查所有API函數(shù)的返回值。根據(jù)錯(cuò)誤代碼,應(yīng)用程序可以恢復(fù)某些錯(cuò)誤。如果出現(xiàn)不可恢復(fù)錯(cuò)誤,應(yīng)用程序應(yīng)將系統(tǒng)轉(zhuǎn)換到安全狀態(tài)。RTOS還可以調(diào)用應(yīng)用定義的錯(cuò)誤處理函數(shù),在錯(cuò)誤發(fā)生時(shí)實(shí)現(xiàn)相應(yīng)處理,此方法通常用于不可恢復(fù)的錯(cuò)誤,錯(cuò)誤處理程序尾部是一個(gè)無(wú)限循環(huán),該函數(shù)不會(huì)返回。

SAFERTOS中的錯(cuò)誤檢查

功能安全操作系統(tǒng)SAFERTOS對(duì)所有傳遞給API函數(shù)的參數(shù)執(zhí)行錯(cuò)誤檢查。API函數(shù)返回類型為portBaseType的狀態(tài)碼,其中包含錯(cuò)誤碼。通過(guò)檢查狀態(tài)碼可以確定調(diào)用是否成功。預(yù)定義錯(cuò)誤代碼的列表參見(jiàn)文件projdefs.h。

SAFERTOS通過(guò)調(diào)用vApplicationErrorHook實(shí)現(xiàn)錯(cuò)誤處理,該函數(shù)由應(yīng)用定義,在檢測(cè)到錯(cuò)誤而沒(méi)有返回錯(cuò)誤碼時(shí),內(nèi)核將調(diào)用該函數(shù)。

SAFERTOS實(shí)現(xiàn)的一些錯(cuò)誤檢查示例如下:

?檢查API函數(shù)參數(shù)是否包含有效句柄和值。

? SAFERTOS中的堆棧是預(yù)先分配的字節(jié)數(shù)組,包含正在使用的堆棧標(biāo)記,防止其被多個(gè)任務(wù)訪問(wèn)。

?任務(wù)控制塊包含有關(guān)堆棧限位信息,內(nèi)核可以在存儲(chǔ)任務(wù)上下文前檢查可用的堆??臻g,防止堆棧溢出。

?使用鏡像值檢查重要的系統(tǒng)參數(shù),如堆頂?shù)刂罚褩O拗?,F(xiàn)PU使用標(biāo)記和TCB中的MPU設(shè)置。滴答值和SVC處理程序地址也保存了其鏡像值。

?如果硬件包含MPU,SAFERTOS默認(rèn)啟用該功能,使用它來(lái)管理多個(gè)任務(wù)可能訪問(wèn)的內(nèi)存區(qū)域。

麥克泰技術(shù)是SAFERTOS在中國(guó)的代理商,具有超過(guò)20年嵌入式實(shí)時(shí)操作系統(tǒng)的市場(chǎng)、服務(wù)和培訓(xùn)經(jīng)驗(yàn),關(guān)于SAFERTOS的更多信息,歡迎咨詢麥克泰。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5089

    文章

    19168

    瀏覽量

    306736
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    819

    瀏覽量

    119792
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3287

    瀏覽量

    57812

原文標(biāo)題:RTOS中的錯(cuò)誤檢查機(jī)制

文章出處:【微信號(hào):麥克泰技術(shù),微信公眾號(hào):麥克泰技術(shù)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Rust語(yǔ)言中錯(cuò)誤處理的機(jī)制

    可能的錯(cuò)誤,實(shí)際運(yùn)行仍然可能出現(xiàn)各種各樣的錯(cuò)誤,比如文件不存在、網(wǎng)絡(luò)連接失敗等等。對(duì)于這些不可預(yù)測(cè)的錯(cuò)誤,我們必須使用錯(cuò)誤處理機(jī)制來(lái)進(jìn)行處
    的頭像 發(fā)表于 09-19 14:54 ?1465次閱讀

    RTOS的多任務(wù)機(jī)制應(yīng)用演示

    的執(zhí)行路徑。深入理解和實(shí)現(xiàn)RTOS深入理解和實(shí)現(xiàn)RTOS_連載5_多任務(wù)機(jī)制應(yīng)用.pdf (247.18 KB )
    發(fā)表于 02-17 23:30

    如何檢查代碼的潛在錯(cuò)誤

    C:2012 和 MISRA C++ 2008 標(biāo)準(zhǔn),以及 CWE 和 CERTC/C++涵蓋的數(shù)百個(gè)問(wèn)題的檢查。使用方式簡(jiǎn)單,生成全面而詳細(xì)的錯(cuò)誤信息。C-RUN用于發(fā)現(xiàn)代碼運(yùn)行過(guò)程存在
    發(fā)表于 06-03 09:35

    INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制是什么

    INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制是什么?INtime RTOS內(nèi)部的關(guān)鍵處理機(jī)制有哪些相關(guān)的應(yīng)用案例?
    發(fā)表于 09-29 06:28

    漢明(Hamming)錯(cuò)誤修正檢查

    漢明(Hamming)錯(cuò)誤修正檢查碼:在數(shù)位資料的傳輸難免會(huì)發(fā)生錯(cuò)誤,以某些媒體來(lái)說(shuō)(如無(wú)線電、網(wǎng)際網(wǎng)路上資料的傳輸、通訊資料的傳輸、及其它相關(guān)的資料傳輸),較容易產(chǎn)生突
    發(fā)表于 11-17 18:04 ?15次下載

    PCIe掃盲—PCIe錯(cuò)誤檢測(cè)機(jī)制的詳細(xì)資料概述

    PCIe總線錯(cuò)誤檢測(cè)囊括了鏈路(Link)上的錯(cuò)誤以及包傳遞過(guò)程錯(cuò)誤,如下圖所示。用戶設(shè)計(jì)的應(yīng)用程序?qū)?b class='flag-5'>中的
    的頭像 發(fā)表于 08-18 11:05 ?1.5w次閱讀

    Altium顯示DRC錯(cuò)誤檢查方法

    Altium有時(shí)候總是顯示DRC錯(cuò)誤,不知道哪里出了問(wèn)題,下面小編帶大家學(xué)習(xí)一下常見(jiàn)的DRC檢查有哪些?
    的頭像 發(fā)表于 09-23 12:27 ?3.4w次閱讀

    Modbus協(xié)議的介紹和應(yīng)用及錯(cuò)誤檢查方法的資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Modbus協(xié)議的介紹和應(yīng)用及錯(cuò)誤檢查方法的資料說(shuō)明包括了:1.介紹 Modbus 協(xié)議介紹 2. 兩種串行傳輸模式 3. 信息幀 4. 錯(cuò)誤檢查方法
    發(fā)表于 05-10 08:00 ?2次下載
    Modbus協(xié)議的介紹和應(yīng)用及<b class='flag-5'>錯(cuò)誤</b><b class='flag-5'>檢查</b>方法的資料說(shuō)明

    PCIe錯(cuò)誤報(bào)告的兩種機(jī)制詳解

    機(jī)制是PCIe設(shè)備必需支持的一種錯(cuò)誤報(bào)告機(jī)制,同時(shí)設(shè)備會(huì)定義最小的錯(cuò)誤報(bào)告請(qǐng)求。應(yīng)該是通過(guò)配置Device Control和Command寄存器做到通知其他設(shè)備產(chǎn)生了
    的頭像 發(fā)表于 10-23 11:14 ?2.6w次閱讀
    PCIe<b class='flag-5'>錯(cuò)誤</b>報(bào)告的兩種<b class='flag-5'>機(jī)制</b>詳解

    通過(guò)各種指令的EN/ENO機(jī)制,可以檢測(cè)運(yùn)行錯(cuò)誤

    為該塊互連了 EN/ENO 機(jī)制。如果執(zhí)行期間沒(méi)有任何錯(cuò)誤,則 ENO 使能輸出的信號(hào)狀態(tài)將為“1”。如果執(zhí)行期間發(fā)生錯(cuò)誤,則 ENO 使能輸出的信號(hào)狀態(tài)將為“0”。
    的頭像 發(fā)表于 03-02 14:36 ?4876次閱讀

    哪些工具可以可以發(fā)現(xiàn)基于RTOS的程序錯(cuò)誤?

    、饑餓、死鎖、優(yōu)先級(jí)反轉(zhuǎn)等bug。 一些專門(mén)設(shè)計(jì)的工具,可以幫助基于RTOS的程序開(kāi)發(fā)人員發(fā)現(xiàn)一些難以發(fā)現(xiàn)的錯(cuò)誤RTOS是什么? 實(shí)時(shí)操作系統(tǒng)(RTOS或?qū)崟r(shí)內(nèi)核)是有效地管理CP
    的頭像 發(fā)表于 04-12 10:46 ?1974次閱讀
    哪些工具可以可以發(fā)現(xiàn)基于<b class='flag-5'>RTOS</b>的程序<b class='flag-5'>錯(cuò)誤</b>?

    如何處理RTOS錯(cuò)誤和超時(shí)

      在典型系統(tǒng),許多路徑流經(jīng) RTOS,因此它處于檢測(cè)和處理錯(cuò)誤的良好位置。一般來(lái)說(shuō),函數(shù)的返回值,尤其是 RTOS 服務(wù),不應(yīng)該在沒(méi)有檢查
    的頭像 發(fā)表于 06-29 09:46 ?3267次閱讀
    如何處理<b class='flag-5'>RTOS</b><b class='flag-5'>錯(cuò)誤</b>和超時(shí)

    使用專門(mén)的RTOS工具發(fā)現(xiàn)實(shí)時(shí)錯(cuò)誤

    數(shù)值。包含內(nèi)置 RTOS 感知功能的調(diào)試器也很常見(jiàn),但通常需要您暫停應(yīng)用程序以檢查 RTOS 的狀態(tài)(對(duì)于調(diào)試實(shí)時(shí)系統(tǒng)不太實(shí)用)。
    的頭像 發(fā)表于 06-30 10:15 ?989次閱讀
    使用專門(mén)的<b class='flag-5'>RTOS</b>工具發(fā)現(xiàn)實(shí)時(shí)<b class='flag-5'>錯(cuò)誤</b>

    如何使用數(shù)據(jù)包錯(cuò)誤檢查來(lái)保護(hù)您的溫度讀數(shù)

    “數(shù)據(jù)包錯(cuò)誤檢查”(PEC)是一種在數(shù)據(jù)傳輸過(guò)程中廣泛使用的錯(cuò)誤檢測(cè)機(jī)制。Maxim集成產(chǎn)品采用PEC模式,以提高數(shù)據(jù)傳輸?shù)目煽啃?。本?yīng)用筆記討論了PEC字節(jié)在具有1線和2線接口的溫度
    的頭像 發(fā)表于 02-13 10:48 ?1870次閱讀
    如何使用數(shù)據(jù)包<b class='flag-5'>錯(cuò)誤</b><b class='flag-5'>檢查</b>來(lái)保護(hù)您的溫度讀數(shù)

    RTOS消息隊(duì)列的應(yīng)用

    基于RTOS的應(yīng)用,通常使用隊(duì)列機(jī)制實(shí)現(xiàn)任務(wù)間的數(shù)據(jù)交互,一個(gè)應(yīng)用程序可以有任意數(shù)量的消息隊(duì)列,每個(gè)消息隊(duì)列都有自己的用途。
    發(fā)表于 05-29 10:49 ?650次閱讀
    <b class='flag-5'>RTOS</b>消息隊(duì)列的應(yīng)用