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

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

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

專(zhuān)用工具為調(diào)試基于RTOS的系統(tǒng)設(shè)計(jì)

星星科技指導(dǎo)員 ? 來(lái)源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Jean Labrosse ? 2022-06-30 10:04 ? 次閱讀

死鎖:

死鎖(又名致命擁抱)是一種情況,其中(至少)兩個(gè)任務(wù)都在不知不覺(jué)中等待另一個(gè)擁有的資源。死鎖可能不會(huì)立即發(fā)生,因?yàn)楹艽蟪潭壬先Q于兩個(gè)任務(wù)何時(shí)需要彼此的資源。如下圖所示,μC/Probe 的內(nèi)核感知屏幕有一列顯示每個(gè)任務(wù)執(zhí)行的頻率(即任務(wù)由 RTOS 切換的頻率)。您可以通過(guò)監(jiān)視此列來(lái)檢測(cè)死鎖,并注意您期望運(yùn)行的任何任務(wù)是否實(shí)際上正在運(yùn)行。換句話(huà)說(shuō),如果計(jì)數(shù)停止(μC/Probe 在 CPU 運(yùn)行時(shí)更新這些計(jì)數(shù)器),那么您可能檢測(cè)到死鎖。但是,對(duì)于這種情況,您還會(huì)注意到至少有兩個(gè)任務(wù)停止計(jì)數(shù)。您可能不需要使用像 μC/Probe 這樣的工具來(lái)檢測(cè)死鎖,因?yàn)樵谌魏吻闆r下,您都應(yīng)該注意應(yīng)用程序中這些任務(wù)的鎖定行為。但是,該工具使其更加明顯。

poYBAGK9BMCAOxzlAAIkf9udrEY752.png

您可以通過(guò)以下方式避免死鎖:

總是獲取所有需要的資源,總是以相同的順序獲取它們并以相反的順序釋放它們。

在 RTOS API 調(diào)用上使用超時(shí)以避免永遠(yuǎn)等待資源可用。確保檢查來(lái)自 RTOS API 的返回錯(cuò)誤代碼,以確保您對(duì)所需資源的請(qǐng)求確實(shí)成功。

饑餓:

當(dāng)高優(yōu)先級(jí)任務(wù)消耗所有 CPU 的帶寬時(shí),就會(huì)發(fā)生饑餓,為低優(yōu)先級(jí)任務(wù)留下很少或沒(méi)有 CPU 時(shí)間。饑餓的影響的特點(diǎn)是響應(yīng)能力和產(chǎn)品功能的下降,例如嵌入式目標(biāo)的顯示更新緩慢、通信堆棧中的數(shù)據(jù)包丟失、操作員界面遲緩等。除了解決這些問(wèn)題之外,您幾乎無(wú)能為力至:

優(yōu)化占用大部分 CPU 帶寬的代碼。

提高 CPU 的時(shí)鐘速度。由于其他系統(tǒng)考慮,這很少是一種選擇。

選擇另一個(gè) CPU。這也很少是一種選擇,尤其是在開(kāi)發(fā)周期的后期。

pYYBAGK9BMiARRRcAAPKnYNbEXI309.png

監(jiān)控任務(wù)和 ISR 執(zhí)行時(shí)間

了解任務(wù)和 ISR 的執(zhí)行時(shí)間對(duì)于幫助基于 RTOS 的系統(tǒng)分析(例如速率單調(diào)分析 (RMA))通常很有用。具體來(lái)說(shuō),通過(guò)這些信息,您可以確定是否所有時(shí)間緊迫的任務(wù)都可以按時(shí)完成,并幫助您為任務(wù)分配優(yōu)先級(jí)。不幸的是,這些信息只有在系統(tǒng)設(shè)計(jì)和運(yùn)行后才真正準(zhǔn)確和可用。換句話(huà)說(shuō),代碼的實(shí)際執(zhí)行時(shí)間通常要在實(shí)際目標(biāo)上執(zhí)行時(shí)才能準(zhǔn)確知道。然而,一旦可用,任務(wù)和 ISR 執(zhí)行時(shí)間對(duì)于確認(rèn)系統(tǒng)設(shè)計(jì)期間所做的假設(shè)非常有用。

SystemView 提供任務(wù)和 ISR 的最小/最大執(zhí)行時(shí)間,如下面的屏幕截圖所示。

pYYBAGK9BNSASUkoAAMPHJBNBk8284.png

1 -上下文窗格中 的Max Run Time列顯示所有任務(wù)和 ISR 的最大執(zhí)行時(shí)間。在SysTick(即tick ISR)的情況下,最長(zhǎng)的執(zhí)行時(shí)間是0.5488 ms。我們可以通過(guò)搜索事件 #4016155 來(lái)確定何時(shí)(及時(shí))發(fā)生了這個(gè)較長(zhǎng)的執(zhí)行時(shí)間。您只需從 Go 菜單中選擇 Go to event 。.. 并鍵入 4016155,然后按 Enter。

2 - 事件窗口顯示這對(duì)應(yīng)于 ISR 出口。事實(shí)上,這是有道理的,因?yàn)橹挥性?ISR 退出時(shí)才知道 ISR 的最大執(zhí)行時(shí)間。

3 - 雙擊事件窗口中顯示事件 #4016155 的行會(huì)強(qiáng)制時(shí)間軸窗口顯示該事件。可以看出,SysTick 的執(zhí)行時(shí)間比其他執(zhí)行時(shí)間要寬。

在大多數(shù)情況下,您不需要找到(及時(shí))任務(wù)或 ISR 的最大執(zhí)行時(shí)間發(fā)生在哪里,尤其是當(dāng)您僅將該信息用于 RMA 時(shí)。但是,在某些情況下,您可能需要找出執(zhí)行時(shí)間比預(yù)期或預(yù)期長(zhǎng)得多的原因。不幸的是,SystemView 可能無(wú)法提供關(guān)于發(fā)生這種情況的原因的額外線(xiàn)索。您可能希望在此處使用代碼執(zhí)行跟蹤工具(例如 Segger 的 J-Trace)并檢查 ISR 在事件 #4016155 之前執(zhí)行的代碼。

測(cè)量用戶(hù)代碼的執(zhí)行時(shí)間

有很多方法可以測(cè)量代碼執(zhí)行時(shí)間。一種方法是使用具有跟蹤功能的調(diào)試探針。您只需運(yùn)行代碼、查看跟蹤、計(jì)算增量時(shí)間(通常是手動(dòng))并將 CPU 周期轉(zhuǎn)換為微秒。不幸的是,跟蹤為您提供了一個(gè)執(zhí)行實(shí)例,您可能需要進(jìn)一步查看跟蹤捕獲以找到最壞情況下的執(zhí)行時(shí)間。這可能是一個(gè)乏味的過(guò)程。另一種方法是檢測(cè)您的代碼并在代碼的不同位置拍攝可用的自由運(yùn)行計(jì)數(shù)器的快照,并計(jì)算快照讀數(shù)之間的差異。這實(shí)際上在嵌入式計(jì)算設(shè)計(jì)[7]上發(fā)表的一篇論文中有所描述對(duì)于 Cortex-M MCU,但該概念同樣適用于其他目標(biāo)。該論文提供了 API 來(lái)測(cè)量經(jīng)過(guò)的時(shí)間。您只需將要測(cè)量的代碼包裝如下:

elapsed_time_start(n);

// 測(cè)量代碼

elapsed_time_stop(n);

其中“n”指定“n”個(gè) bin(0 到 n-1)之一,其中最小和最大執(zhí)行時(shí)間保存如下:

elapsed_time_tbl[n].min

elapsed_time_tbl[n].max

在 Cortex-M 的情況下,執(zhí)行時(shí)間以 CPU 時(shí)鐘頻率單位保存。

如下圖所示,您可以使用 Micrium 的 μC/Probe 輕松顯示以微秒為單位的結(jié)果。μC/Probe 允許對(duì)數(shù)字進(jìn)行縮放,在這種情況下,需要根據(jù)所用評(píng)估板的 CPU 時(shí)鐘頻率進(jìn)行調(diào)整。

files-aHViPTYzODY3JmNtZD1pdGVtZWRpdG9yaW1hZ2UmZmlsZW5hbWU9aXRlbWVkaXRvcmltYWdlXzVjZDlkYzU1MWMzYTQucG5nJnZlcnNpb249MDAwMCZzaWc9YjI3ZDQzYTI3YWE3NjkxMDJiOGExMmZiYTNlOWE4NzU253D

概括

IDE 中內(nèi)置的調(diào)試器通常不足以調(diào)試基于 RTOS 的實(shí)時(shí)系統(tǒng)。

幸運(yùn)的是,有專(zhuān)門(mén)為調(diào)試基于 RTOS 的系統(tǒng)而設(shè)計(jì)的專(zhuān)用工具,但開(kāi)發(fā)人員通常不知道這些工具。這些工具之一是 Segger 的 SystemView ,它在時(shí)間線(xiàn)上顯示 ISR 和任務(wù),并收集運(yùn)行時(shí)統(tǒng)計(jì)信息,例如最小和最大執(zhí)行時(shí)間、ISR 和任務(wù)之間的關(guān)系、CPU 負(fù)載等等。

另一個(gè)可以補(bǔ)充 SystemView 的工具是 Micrium 的 μC/Probe ,它是一種通用工具,允許開(kāi)發(fā)人員在不干擾 CPU 的情況下可視化和更改正在運(yùn)行的嵌入式目標(biāo)的行為。μC/Probe 在裸機(jī)或基于 RTOS 的應(yīng)用中同樣適用。對(duì)于基于 RTOS 的應(yīng)用程序,μC/Probe 包括非侵入式實(shí)時(shí)內(nèi)核感知以及 TCP/IP 堆棧感知。兩種類(lèi)型的工具(SystemView 和 μC/Probe)都應(yīng)該在早期和整個(gè)開(kāi)發(fā)周期中使用,以提供有關(guān)嵌入式目標(biāo)運(yùn)行時(shí)行為的反饋。

審核編輯:郭婷

聲明:本文內(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)注

    5104

    文章

    19278

    瀏覽量

    310121
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10949

    瀏覽量

    213921
  • RTOS
    +關(guān)注

    關(guān)注

    23

    文章

    829

    瀏覽量

    120138
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ADC的靜態(tài)指標(biāo)有專(zhuān)用的分析工具嗎?

    請(qǐng)問(wèn):ADC的靜態(tài)指標(biāo)有專(zhuān)用的分析工具嗎?該指標(biāo)很少在評(píng)估ADC指標(biāo)時(shí)使用,是否該指標(biāo)不重要,應(yīng)用中什么情況下需要評(píng)估該指標(biāo)? 另外ADC的SNR = 6.02*N + 1.76 +10*log10(fs/2BW) 當(dāng)被采樣信號(hào)為單音時(shí) 該BW
    發(fā)表于 02-08 08:13

    調(diào)試TCP協(xié)議連接的常用工具

    在網(wǎng)絡(luò)通信中,TCP(傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。調(diào)試TCP連接問(wèn)題對(duì)于網(wǎng)絡(luò)工程師和開(kāi)發(fā)者來(lái)說(shuō)是一項(xiàng)必備技能。 1. 網(wǎng)絡(luò)抓包工具 1.1 Wireshark
    的頭像 發(fā)表于 01-22 09:59 ?1543次閱讀

    Kali Linux常用工具介紹

    Kali Linux 虛擬機(jī)中自帶了大量滲透測(cè)試工具,涵蓋了信息收集、漏洞利用、口令破解、漏洞掃描等多個(gè)方面。 以下是按分類(lèi)簡(jiǎn)要介紹一部分常用工具的使用方法: 使用方法只能當(dāng)做參考,**詳細(xì)
    的頭像 發(fā)表于 11-11 09:29 ?843次閱讀

    TCP&UDP調(diào)試工具

    TCP&UDP調(diào)試工具
    發(fā)表于 10-30 10:41 ?1次下載

    MODBUS調(diào)試工具(modscan32)

    MODBUS調(diào)試工具(modscan32)
    發(fā)表于 10-24 10:39 ?2次下載

    SEGGERJ-Link和Flasher提供Device Provisioner工具

    日前,SEGGER宣布其Flasher系列編程器以及J-Link和J-Trace系列調(diào)試跟蹤工具提供Device Provisioner工具。
    的頭像 發(fā)表于 10-22 15:12 ?597次閱讀

    freertos和rtos區(qū)別是什么

    FreeRTOS 和 RTOS(實(shí)時(shí)操作系統(tǒng))是兩個(gè)不同的概念,但它們之間有緊密的聯(lián)系。FreeRTOS 是一個(gè)特定的開(kāi)源實(shí)時(shí)操作系統(tǒng),而 RTOS 是實(shí)時(shí)操作
    的頭像 發(fā)表于 09-02 14:18 ?1954次閱讀

    RTOS的特性和類(lèi)型

    實(shí)時(shí)操作系統(tǒng)RTOS)是一種可運(yùn)行實(shí)時(shí)計(jì)算應(yīng)用程序的軟件平臺(tái),用于處理具有明確時(shí)間約束的事件和數(shù)據(jù)。與通用操作系統(tǒng)(GPOS)不同,RTOS必須在有限的硬件資源上調(diào)度應(yīng)用程序之間的處
    的頭像 發(fā)表于 08-20 11:29 ?852次閱讀

    簡(jiǎn)單認(rèn)識(shí)RTOS實(shí)時(shí)操作系統(tǒng)

    RTOS(Real Time Operating System,實(shí)時(shí)操作系統(tǒng))是一種專(zhuān)門(mén)設(shè)計(jì)用于在嚴(yán)格時(shí)間限制內(nèi)處理任務(wù)的操作系統(tǒng)。它以其高實(shí)時(shí)性、多任務(wù)處理能力和資源管理能力在工業(yè)自動(dòng)化、醫(yī)療設(shè)備、航空航天、汽車(chē)電子等眾多領(lǐng)域
    的頭像 發(fā)表于 08-20 11:20 ?3639次閱讀

    使用cmsis-dap燒錄器對(duì)芯片cy8c4148azi-s455進(jìn)行燒錄,一直失敗的原因?

    我使用的燒錄器是通用型的cmsis-dap燒錄器,可以對(duì)6系芯片進(jìn)行燒寫(xiě),但是這個(gè)芯片為什么一直出錯(cuò),是工具必須專(zhuān)用工具么?
    發(fā)表于 07-24 06:07

    遠(yuǎn)程抄表及能耗管理系統(tǒng)

    準(zhǔn)確性和質(zhì)量,更為環(huán)保節(jié)能戰(zhàn)略的制訂提供了強(qiáng)大的專(zhuān)用工具。2.功能特點(diǎn)2.1實(shí)時(shí)監(jiān)控系統(tǒng)遠(yuǎn)程抄表系統(tǒng)能實(shí)時(shí)獲取能源應(yīng)用情況,不論是電力工程、水、氣或是供熱,都可以具體
    的頭像 發(fā)表于 06-15 15:00 ?422次閱讀
    遠(yuǎn)程抄表及能耗管理<b class='flag-5'>系統(tǒng)</b>

    請(qǐng)問(wèn)CMSIS-RTOS怎么調(diào)試

    如果用的是MDK的RTX組件,調(diào)試倒是很簡(jiǎn)單,問(wèn)題是用CUBEMX生成的CMSIS-RTOS就不知道有什么好辦法調(diào)試了。 各位有什么好的方法
    發(fā)表于 05-14 06:40

    HarmonyOS開(kāi)發(fā)案例:【生活健康app之編寫(xiě)通用工具類(lèi)】(5)

    本節(jié)將介紹日志打印、時(shí)間換算等通用工具類(lèi)的編寫(xiě)和使用,工具類(lèi)可以簡(jiǎn)化應(yīng)用代碼編寫(xiě)和業(yè)務(wù)流程處理。
    的頭像 發(fā)表于 05-11 09:58 ?641次閱讀
    HarmonyOS開(kāi)發(fā)案例:【生活健康app之編寫(xiě)通<b class='flag-5'>用工具</b>類(lèi)】(5)

    如何正確安裝精密M8航空插頭3芯

    德索工程師說(shuō)道在開(kāi)始安裝之前,需要準(zhǔn)備一些專(zhuān)用工具和原材料,如電源插頭、屏蔽電纜、助焊膏、醫(yī)用鑷子、錫線(xiàn)、剝線(xiàn)鉗、電鉻鐵、熱縮管、熱風(fēng)焊槍等。此外,還需要確保工作環(huán)境干凈、整潔,避免灰塵和雜質(zhì)進(jìn)入連接器內(nèi)部。
    的頭像 發(fā)表于 04-08 10:52 ?1398次閱讀
    如何正確安裝精密M8航空插頭3芯

    什么是CAN總線(xiàn)調(diào)試工具?調(diào)試的內(nèi)容主要包括哪幾個(gè)方面?

    CAN總線(xiàn)調(diào)試工具是用于對(duì)CAN總線(xiàn)進(jìn)行調(diào)試和故障排除的設(shè)備或軟件工具,它們具有高速數(shù)據(jù)捕獲能力、數(shù)據(jù)過(guò)濾和觸發(fā)功能,以及用于解析和顯示CAN幀的軟件界面。
    的頭像 發(fā)表于 04-03 11:23 ?1231次閱讀