嵌入式操作系統(tǒng)通常被認為有一定的學(xué)習(xí)門檻,為幫助嵌入式工程師降低RTOS的使用難度,RT-Thread提供了文檔教學(xué)中心、視頻中心、論壇交流等多種支持。然而在實際項目中,開發(fā)者們?nèi)钥赡軙龅礁鞣N挑戰(zhàn),尤其當(dāng)項目規(guī)模擴大、代碼復(fù)雜度增加時,各種“難以捉摸”的bug便會頻繁出現(xiàn),令工程師們一頭霧水,不知從何入手。這些問題可能涉及內(nèi)存管理、任務(wù)調(diào)度、棧溢出等復(fù)雜內(nèi)容。
這些問題是否也在你的項目中時常困擾著你?
系統(tǒng)莫名其妙進入Hardfault
系統(tǒng)運行過程線程異常掛起
不正確使用內(nèi)核API導(dǎo)致系統(tǒng)異常
系統(tǒng)運行過程發(fā)生斷言
不清楚某些系統(tǒng)組件或軟件包的使用方法
線程棧分配不合理導(dǎo)致系統(tǒng)異常
應(yīng)用代碼不規(guī)范導(dǎo)致系統(tǒng)異常
如何修改Scons腳本,Kconfig...
...
作為初學(xué)者非常容易遇到的一個問題是:線程棧分配不合理導(dǎo)致系統(tǒng)異常。
1
提出問題
剛開始接觸RT-Thread的小伙伴在創(chuàng)建線程時,常常會遇到下述問題:
2
分析問題
從終端輸出的信息我們可以獲取到的關(guān)鍵信息有
1) 在發(fā)生異常的線程為entry
2) 該線程的棧空間為0x100
3) SCB_CFSR_UFSR:0x01 UNDEFINSTR
UNDEFINSTR通常是PC指針指向非法地址執(zhí)行指令導(dǎo)致,通過1)點可以定位到問題發(fā)生在entry線程,第2)點可以看出entry線程的棧空間有點小,因此初步定位線程棧溢出。
3
解決問題
最終找到問題線程棧太小導(dǎo)致線程棧溢出,同時回到線程入口函數(shù)可以發(fā)現(xiàn)在線程中定義了一個很大的數(shù)組導(dǎo)致了線程棧的溢出,進一步證明了上述的問題。
解決問題就是依據(jù)經(jīng)驗和工具進行分析嘗試的一個過程。
1)將線程棧改大一些,entry線程正常運行。
2)使能內(nèi)核的堆棧溢出檢查,運行輸出msh >thread:entry stack overflow
最終找到問題線程棧太小導(dǎo)致線程棧溢出,同時回到線程入口函數(shù)可以發(fā)現(xiàn)在線程中定義了一個很大的數(shù)組導(dǎo)致了線程棧的溢出,進一步證明了上述的問題。
RT-Thread開班啦,技術(shù)專家團隊手把手帶您上手RT-Thread嵌入式操作系統(tǒng),我們開放了為期三天的嵌入式操作系統(tǒng)專業(yè)培訓(xùn)班!本次培訓(xùn)將會深入講解RT-Thread嵌入式實時操作系統(tǒng)的核心概念、實戰(zhàn)技巧、應(yīng)用場景、嵌入式開發(fā)疑難雜癥分析與答疑!
培訓(xùn)時間
2024/11/9-2024/11/11(3天時間)
本次培訓(xùn)是付費培訓(xùn),培訓(xùn)費用:2918元 - 含稅 (3日),提供培訓(xùn)手冊+硬件平臺。培訓(xùn)費用同時也包含午餐。
培訓(xùn)內(nèi)容
時間 | 培訓(xùn)內(nèi)容 |
2024/11/9 RTOS內(nèi)核 | 1. 內(nèi)核原理 1.1 RT-Thread系統(tǒng)啟動流程 1.2 RT-Thread線程與線程切換學(xué)習(xí) 1.3 RT-Thread線程與中斷切換學(xué)習(xí) 2. 應(yīng)用編程 2.1 RT-Thread多線程編程 (1)RT-Thread多線程搶占學(xué)習(xí) (2)RT-Thread多線程輪詢學(xué)習(xí) (3)RT-Thread多線程調(diào)試實踐 2.2 RT-Thread線程同步 (1)RT-Thread信號量原理,調(diào)試與應(yīng)用實踐 (2)RT-Thread互斥量原理,調(diào)試與應(yīng)用實踐 (3)RT-Thread事件集原理,調(diào)試與應(yīng)用實踐 2.3 RT-Thread線程通信 (1)RT-Thread消息郵箱原理,調(diào)試與應(yīng)用實踐 (2)RT-Thread消息隊列原理,調(diào)試與應(yīng)用實踐 3. RT-Thread動態(tài)內(nèi)存管理 3.1 RT-Thread動態(tài)內(nèi)存管理原理介紹 3.2 RT-Thread動態(tài)內(nèi)存應(yīng)用實踐 |
2024/11/10 RT-Thread I/O設(shè)備驅(qū)動 | 1. RT-Thread構(gòu)建與配置系統(tǒng) 1.1 Kconfig配置系統(tǒng) (1) Kconfig工作機制 (2) Kconfig語法介紹 1.2 Scons構(gòu)建系統(tǒng) (1) Scons語法介紹 (2) Scons使用示例 1.3 Env工具 (1) Env常用命令使用示例 2. RT-Thread I/O設(shè)備框架 2.1 I/O設(shè)備框架原理 (1) 原廠驅(qū)動庫、RTT HAL庫驅(qū)動、RTT驅(qū)動框架關(guān)系介紹 2.2 I/O設(shè)備框架應(yīng)用實踐 (1) 虛擬驅(qū)動移植實戰(zhàn) 3. RT-Thread 設(shè)備驅(qū)動框架 3.1 PIN設(shè)備 (1) PIN設(shè)備驅(qū)動框架原理 (2) PIN設(shè)備驅(qū)動應(yīng)用實踐 3.2 UART設(shè)備 (1) UART設(shè)備驅(qū)動框架原理 (2) UART設(shè)備驅(qū)動應(yīng)用實踐 3.3 I2C設(shè)備 (1) I2C設(shè)備驅(qū)動框架原理 (2) I2C設(shè)備驅(qū)動應(yīng)用實踐 4. RT-Thread設(shè)備驅(qū)動實戰(zhàn) 4.1 串口設(shè)備組件 (1) 串口類設(shè)備組件介紹 (2) 串口設(shè)備驅(qū)動應(yīng)用實踐 4.2 I2C設(shè)備驅(qū)動 (1) I2C Tools軟件包介紹 (2) I2C設(shè)備驅(qū)動應(yīng)用實踐 |
2024/11/11 RT-Thread組件與系統(tǒng)問題排查實踐 | 1. 系統(tǒng)常見問題排查 (1)基礎(chǔ)問題排查方法與實踐示例 (2)內(nèi)存泄漏問題排查方法與實踐示例 (3)棧溢出問題排查方法與實踐示例 (4)線程死鎖問題排查方法與實踐示例 (5)HardFault問題排查方法與實踐示例 2. 組件分析與實踐 (1)MQTT軟件包原理與應(yīng)用實踐 (2)SAL抽象層原理與應(yīng)用實踐 (3)傳感器軟件包應(yīng)用實踐 (4)其他相關(guān)軟件包應(yīng)用實踐 3. 綜合實踐 綜合所學(xué)內(nèi)容,手把手從零實現(xiàn)一個IoT設(shè)備。 |
培訓(xùn)地點
深圳福田區(qū)天安數(shù)碼城天吉大廈AB座7樓7B2知了會議中心M6會議室
地鐵:1、7、9、11號線到達車公廟地鐵站,可從G口出,右轉(zhuǎn)步行100米左右到達知了會議中心。
培訓(xùn)證書
培訓(xùn)結(jié)束后通過考核的將可以獲得RT-Thread出具的結(jié)業(yè)證書和中國電子學(xué)會出具的職業(yè)技能證書-RT-Thread操作系統(tǒng)應(yīng)用開發(fā)
-
嵌入式
+關(guān)注
關(guān)注
5082文章
19123瀏覽量
305150 -
線程
+關(guān)注
關(guān)注
0文章
504瀏覽量
19682 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1289瀏覽量
40124
發(fā)布評論請先 登錄
相關(guān)推薦
評論