一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

線程棧分配惹的禍?系統(tǒng)異常這樣解決!

RT-Thread官方賬號(hào) ? 2024-10-31 08:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式操作系統(tǒng)通常被認(rèn)為有一定的學(xué)習(xí)門檻,為幫助嵌入式工程師降低RTOS的使用難度,RT-Thread提供了文檔教學(xué)中心、視頻中心、論壇交流等多種支持。然而在實(shí)際項(xiàng)目中,開(kāi)發(fā)者們?nèi)钥赡軙?huì)遇到各種挑戰(zhàn),尤其當(dāng)項(xiàng)目規(guī)模擴(kuò)大、代碼復(fù)雜度增加時(shí),各種“難以捉摸”的bug便會(huì)頻繁出現(xiàn),令工程師們一頭霧水,不知從何入手。這些問(wèn)題可能涉及內(nèi)存管理、任務(wù)調(diào)度、棧溢出等復(fù)雜內(nèi)容。

這些問(wèn)題是否也在你的項(xiàng)目中時(shí)常困擾著你?

51ac409a-971c-11ef-8084-92fbcf53809c.png

系統(tǒng)莫名其妙進(jìn)入Hardfault

系統(tǒng)運(yùn)行過(guò)程線程異常掛起

不正確使用內(nèi)核API導(dǎo)致系統(tǒng)異常

系統(tǒng)運(yùn)行過(guò)程發(fā)生斷言

不清楚某些系統(tǒng)組件或軟件包的使用方法

線程棧分配不合理導(dǎo)致系統(tǒng)異常

應(yīng)用代碼不規(guī)范導(dǎo)致系統(tǒng)異常

如何修改Scons腳本,Kconfig...

...

作為初學(xué)者非常容易遇到的一個(gè)問(wèn)題是:線程棧分配不合理導(dǎo)致系統(tǒng)異常。

1

提出問(wèn)題

剛開(kāi)始接觸RT-Thread的小伙伴在創(chuàng)建線程時(shí),常常會(huì)遇到下述問(wèn)題:

51d1a9ac-971c-11ef-8084-92fbcf53809c.png

2

分析問(wèn)題

從終端輸出的信息我們可以獲取到的關(guān)鍵信息有

1) 在發(fā)生異常的線程為entry

51dd8970-971c-11ef-8084-92fbcf53809c.png

2) 該線程的??臻g為0x100

51eac478-971c-11ef-8084-92fbcf53809c.png

3) SCB_CFSR_UFSR:0x01 UNDEFINSTR

UNDEFINSTR通常是PC指針指向非法地址執(zhí)行指令導(dǎo)致,通過(guò)1)點(diǎn)可以定位到問(wèn)題發(fā)生在entry線程,第2)點(diǎn)可以看出entry線程的??臻g有點(diǎn)小,因此初步定位線程棧溢出。

3

解決問(wèn)題

最終找到問(wèn)題線程棧太小導(dǎo)致線程棧溢出,同時(shí)回到線程入口函數(shù)可以發(fā)現(xiàn)在線程中定義了一個(gè)很大的數(shù)組導(dǎo)致了線程棧的溢出,進(jìn)一步證明了上述的問(wèn)題。

解決問(wèn)題就是依據(jù)經(jīng)驗(yàn)和工具進(jìn)行分析嘗試的一個(gè)過(guò)程。

1)將線程棧改大一些,entry線程正常運(yùn)行。

2)使能內(nèi)核的堆棧溢出檢查,運(yùn)行輸出msh >thread:entry stack overflow

最終找到問(wèn)題線程棧太小導(dǎo)致線程棧溢出,同時(shí)回到線程入口函數(shù)可以發(fā)現(xiàn)在線程中定義了一個(gè)很大的數(shù)組導(dǎo)致了線程棧的溢出,進(jìn)一步證明了上述的問(wèn)題。

RT-Thread開(kāi)班啦,技術(shù)專家團(tuán)隊(duì)手把手帶您上手RT-Thread嵌入式操作系統(tǒng),我們開(kāi)放了為期三天的嵌入式操作系統(tǒng)專業(yè)培訓(xùn)班!本次培訓(xùn)將會(huì)深入講解RT-Thread嵌入式實(shí)時(shí)操作系統(tǒng)的核心概念、實(shí)戰(zhàn)技巧、應(yīng)用場(chǎng)景、嵌入式開(kāi)發(fā)疑難雜癥分析與答疑!

培訓(xùn)時(shí)間

2024/11/9-2024/11/11(3天時(shí)間)

本次培訓(xùn)是付費(fèi)培訓(xùn),培訓(xùn)費(fèi)用:2918元 - 含稅 (3日),提供培訓(xùn)手冊(cè)+硬件平臺(tái)。培訓(xùn)費(fèi)用同時(shí)也包含午餐。

培訓(xùn)內(nèi)容

時(shí)間

培訓(xùn)內(nèi)容

2024/11/9

RTOS內(nèi)核

1. 內(nèi)核原理

1.1 RT-Thread系統(tǒng)啟動(dò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)試實(shí)踐

2.2 RT-Thread線程同步

(1)RT-Thread信號(hào)量原理,調(diào)試與應(yīng)用實(shí)踐

(2)RT-Thread互斥量原理,調(diào)試與應(yīng)用實(shí)踐

(3)RT-Thread事件集原理,調(diào)試與應(yīng)用實(shí)踐

2.3 RT-Thread線程通信

(1)RT-Thread消息郵箱原理,調(diào)試與應(yīng)用實(shí)踐

(2)RT-Thread消息隊(duì)列原理,調(diào)試與應(yīng)用實(shí)踐

3. RT-Thread動(dòng)態(tài)內(nèi)存管理

3.1 RT-Thread動(dòng)態(tài)內(nèi)存管理原理介紹

3.2 RT-Thread動(dòng)態(tài)內(nèi)存應(yīng)用實(shí)踐

2024/11/10

RT-Thread I/O設(shè)備驅(qū)動(dòng)

1. RT-Thread構(gòu)建與配置系統(tǒng)

1.1 Kconfig配置系統(tǒng)

(1) Kconfig工作機(jī)制

(2) Kconfig語(yǔ)法介紹

1.2 Scons構(gòu)建系統(tǒng)

(1) Scons語(yǔ)法介紹

(2) Scons使用示例

1.3 Env工具

(1) Env常用命令使用示例

2. RT-Thread I/O設(shè)備框架

2.1 I/O設(shè)備框架原理

(1) 原廠驅(qū)動(dòng)庫(kù)、RTT HAL庫(kù)驅(qū)動(dòng)、RTT驅(qū)動(dòng)框架關(guān)系介紹

2.2 I/O設(shè)備框架應(yīng)用實(shí)踐

(1) 虛擬驅(qū)動(dòng)移植實(shí)戰(zhàn)

3. RT-Thread 設(shè)備驅(qū)動(dòng)框架

3.1 PIN設(shè)備

(1) PIN設(shè)備驅(qū)動(dòng)框架原理

(2) PIN設(shè)備驅(qū)動(dòng)應(yīng)用實(shí)踐

3.2 UART設(shè)備

(1) UART設(shè)備驅(qū)動(dòng)框架原理

(2) UART設(shè)備驅(qū)動(dòng)應(yīng)用實(shí)踐

3.3 I2C設(shè)備

(1) I2C設(shè)備驅(qū)動(dòng)框架原理

(2) I2C設(shè)備驅(qū)動(dòng)應(yīng)用實(shí)踐

4. RT-Thread設(shè)備驅(qū)動(dòng)實(shí)戰(zhàn)

4.1 串口設(shè)備組件

(1) 串口類設(shè)備組件介紹

(2) 串口設(shè)備驅(qū)動(dòng)應(yīng)用實(shí)踐

4.2 I2C設(shè)備驅(qū)動(dòng)

(1) I2C Tools軟件包介紹

(2) I2C設(shè)備驅(qū)動(dòng)應(yīng)用實(shí)踐

2024/11/11

RT-Thread組件與系統(tǒng)問(wèn)題排查實(shí)踐

1. 系統(tǒng)常見(jiàn)問(wèn)題排查

(1)基礎(chǔ)問(wèn)題排查方法與實(shí)踐示例

(2)內(nèi)存泄漏問(wèn)題排查方法與實(shí)踐示例

(3)棧溢出問(wèn)題排查方法與實(shí)踐示例

(4)線程死鎖問(wèn)題排查方法與實(shí)踐示例

(5)HardFault問(wèn)題排查方法與實(shí)踐示例

2. 組件分析與實(shí)踐

(1)MQTT軟件包原理與應(yīng)用實(shí)踐

(2)SAL抽象層原理與應(yīng)用實(shí)踐

(3)傳感器軟件包應(yīng)用實(shí)踐

(4)其他相關(guān)軟件包應(yīng)用實(shí)踐

3. 綜合實(shí)踐

綜合所學(xué)內(nèi)容,手把手從零實(shí)現(xiàn)一個(gè)IoT設(shè)備。

培訓(xùn)地點(diǎn)

深圳福田區(qū)天安數(shù)碼城天吉大廈AB座7樓7B2知了會(huì)議中心M6會(huì)議室

地鐵:1、7、9、11號(hào)線到達(dá)車公廟地鐵站,可從G口出,右轉(zhuǎn)步行100米左右到達(dá)知了會(huì)議中心。

培訓(xùn)證書

培訓(xùn)結(jié)束后通過(guò)考核的將可以獲得RT-Thread出具的結(jié)業(yè)證書和中國(guó)電子學(xué)會(huì)出具的職業(yè)技能證書-RT-Thread操作系統(tǒng)應(yīng)用開(kāi)發(fā)

5254a974-971c-11ef-8084-92fbcf53809c.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)注

    5145

    文章

    19597

    瀏覽量

    316124
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20130
  • RT-Thread
    +關(guān)注

    關(guān)注

    32

    文章

    1385

    瀏覽量

    41669
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    深度剖析 RT-Thread 線程調(diào)度流程

    rt_system_scheduler_start:調(diào)度系統(tǒng)第一個(gè)線程rt_hw_context_switch_to:初始化上下文切換環(huán)境,觸發(fā)PendSV異常first_thread:系統(tǒng)
    的頭像 發(fā)表于 06-25 18:24 ?364次閱讀
    深度剖析 RT-Thread <b class='flag-5'>線程</b>調(diào)度流程

    機(jī)器學(xué)習(xí)異常檢測(cè)實(shí)戰(zhàn):用Isolation Forest快速構(gòu)建無(wú)標(biāo)簽異常檢測(cè)系統(tǒng)

    算法進(jìn)行異常檢測(cè),并結(jié)合LightGBM作為主分類器,構(gòu)建完整的欺詐檢測(cè)系統(tǒng)。文章詳細(xì)闡述了從無(wú)監(jiān)督異常檢測(cè)到人工反饋循環(huán)的完整工作流程,為實(shí)際業(yè)務(wù)場(chǎng)景中的風(fēng)險(xiǎn)控
    的頭像 發(fā)表于 06-24 11:40 ?491次閱讀
    機(jī)器學(xué)習(xí)<b class='flag-5'>異常</b>檢測(cè)實(shí)戰(zhàn):用Isolation Forest快速構(gòu)建無(wú)標(biāo)簽<b class='flag-5'>異常</b>檢測(cè)<b class='flag-5'>系統(tǒng)</b>

    線程的安全注意事項(xiàng)

    和模塊需要支持多線程安全,否則可能會(huì)導(dǎo)致多線程數(shù)據(jù)競(jìng)爭(zhēng)問(wèn)題,造成應(yīng)用程序異常或崩潰。 在TaskPool或Worker的工作線程中支持使用以下模塊,其他模塊在使用時(shí)需要驗(yàn)證是否滿足
    發(fā)表于 06-20 07:49

    鴻蒙5開(kāi)發(fā)寶藏案例分享---跨線程性能優(yōu)化指南

    序列化為什么拖慢性能? 當(dāng)對(duì)象跨線程傳遞時(shí)(比如主線程→子線程),系統(tǒng)會(huì) 自動(dòng)序列化和反序列化 。如果對(duì)象結(jié)構(gòu)復(fù)雜(比如嵌套數(shù)組、類方法),耗時(shí)會(huì)暴增!舉個(gè)例子: // 未優(yōu)化的寫法:
    發(fā)表于 06-12 17:13

    main線程大小設(shè)置成2048的時(shí)候rt_memset導(dǎo)致hardfault,為什么?

    main線程大小設(shè)置成2048的時(shí)候rt_memset導(dǎo)致hardfault,改成512就不會(huì),這是為什么
    發(fā)表于 06-10 06:04

    ZLG嵌入式筆記(連載36) | 工業(yè)現(xiàn)場(chǎng)掉電,系統(tǒng)異常如何破解?

    在工業(yè)現(xiàn)場(chǎng),設(shè)備常因掉電導(dǎo)致文件系統(tǒng)損壞或數(shù)據(jù)丟失。本文將介紹如何通過(guò)硬件和系統(tǒng)設(shè)計(jì)優(yōu)化,解決這一問(wèn)題,提升設(shè)備穩(wěn)定性。前言在工業(yè)應(yīng)用現(xiàn)場(chǎng),不可避免會(huì)出現(xiàn)異常掉電或者一些偶發(fā)性頻繁上下電的情況,
    的頭像 發(fā)表于 04-30 18:24 ?172次閱讀
    ZLG嵌入式筆記(連載36) | 工業(yè)現(xiàn)場(chǎng)掉電,<b class='flag-5'>系統(tǒng)</b><b class='flag-5'>異常</b>如何破解?

    golang內(nèi)存分配

    內(nèi)存碎片. 線程擁有一定的 cache, 可用于無(wú)鎖分配. 同時(shí) Go 對(duì)于 GC 后回收的內(nèi)存頁(yè), 并不是馬上歸還給操作系統(tǒng), 而是會(huì)延遲歸還, 用于滿足未來(lái)的內(nèi)存需求. ?? ? 在 1.10
    的頭像 發(fā)表于 03-31 15:00 ?160次閱讀
    golang內(nèi)存<b class='flag-5'>分配</b>

    進(jìn)程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!

    是(每個(gè)進(jìn)程可以跑在不同CPU) 是(線程可以分配到不同核) 否(只能在一個(gè)核上蹦迪) 適用場(chǎng)景 銀行系統(tǒng)、docker容器 視頻渲染、實(shí)時(shí)音視頻 微信客服、高并發(fā)Web服務(wù)器 社死案例 進(jìn)程A崩了
    發(fā)表于 03-26 09:27

    socket 多線程編程實(shí)現(xiàn)方法

    在現(xiàn)代網(wǎng)絡(luò)編程中,多線程技術(shù)被廣泛應(yīng)用于提高服務(wù)器的并發(fā)處理能力。Socket編程是網(wǎng)絡(luò)通信的基礎(chǔ),而將多線程技術(shù)應(yīng)用于Socket編程,可以顯著提升服務(wù)器的性能。 多線程編程的基本概念 多
    的頭像 發(fā)表于 11-12 14:16 ?957次閱讀

    Linux網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)

    網(wǎng)絡(luò)協(xié)議是操作系統(tǒng)核心的一個(gè)重要組成部分,負(fù)責(zé)管理網(wǎng)絡(luò)通信中的數(shù)據(jù)包處理。在 Linux 操作系統(tǒng)中,網(wǎng)絡(luò)協(xié)議(Network Stack)負(fù)責(zé)實(shí)現(xiàn) TCP/IP 協(xié)議簇,處理應(yīng)用
    的頭像 發(fā)表于 09-10 09:51 ?644次閱讀
    Linux網(wǎng)絡(luò)協(xié)議<b class='flag-5'>棧</b>的實(shí)現(xiàn)

    轉(zhuǎn)載 golang內(nèi)存分配

    . 線程擁有一定的 cache, 可用于無(wú)鎖分配. 同時(shí) Go 對(duì)于 GC 后回收的內(nèi)存頁(yè), 并不是馬上歸還給操作系統(tǒng), 而是會(huì)延遲歸還, 用于滿足未來(lái)的內(nèi)存需求. ?? ? 在 1.10 以前 go
    的頭像 發(fā)表于 09-05 14:12 ?466次閱讀
    轉(zhuǎn)載 golang內(nèi)存<b class='flag-5'>分配</b>

    CPU線程和程序線程的區(qū)別

    CPU的線程與程序的線程在概念、作用、實(shí)現(xiàn)方式以及性能影響等方面存在顯著差異。以下是對(duì)兩者區(qū)別的詳細(xì)闡述,旨在深入探討這一技術(shù)話題。
    的頭像 發(fā)表于 09-02 11:18 ?2033次閱讀

    rtt工程移植后線程創(chuàng)建不成功怎么解決?

    之前用l431的板子跑10k的采樣后來(lái)要提高到100k,更換了f446的芯片,但是根據(jù)新的內(nèi)存地址從0x20000000開(kāi)始寫入數(shù)據(jù)后,兩個(gè)線程創(chuàng)建不成功了,不知道是否是線程的的大小不夠還是內(nèi)存分配不對(duì),求指點(diǎn)
    發(fā)表于 07-18 06:44

    STM32F072VBT6.icf文件堆棧分配異常的原因?

    STM32F072VBT6.icf文件堆棧分配異常
    發(fā)表于 07-05 08:10

    lvgl移植到RT-Thread Nano后進(jìn)入硬件錯(cuò)誤中斷的原因?

    使用的是RT-Thread Nano的最新版,第一次移植,不知道是不是因?yàn)檫@個(gè)lvgl只能移植到標(biāo)準(zhǔn)版里? 嘗試過(guò)給lvgl的線程分配更大的,但是依舊會(huì)卡死在硬件錯(cuò)誤中斷里。但只要把用戶的ui
    發(fā)表于 07-04 07:40