欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

三分鐘搞定MCU內(nèi)存溢出

痞子衡嵌入式 ? 來源:痞子衡嵌入式 ? 2023-03-26 10:07 ? 次閱讀

今天我來講一講MCU開發(fā)中的一個(gè)棘手問題——內(nèi)存溢出,希望能幫到遇到該問題的同學(xué)們。

開發(fā)環(huán)境

SDK版本:SDK_2_6_13_FRDM-KW38

SDK下載地址:https://mcuxpresso.nxp.com

開發(fā)板:FRDM-KW38

IDE:IAR EmbeddedWorkbench for Arm version 8.50

演示代碼:https://github.com/N40E116/SDK_2_6_13_FRDM-KW38.git

本文總結(jié)了如下三類RAM使用情況的分析:

FreeRTOS RAM

CSTACK

動態(tài)內(nèi)存分配

FreeRTOS RAM分析

因?yàn)槲覀兪褂玫氖菐?a href="http://www.delux-kingway.cn/tags/RTOS/" target="_blank">RTOS的工程,所以這里先介紹一下FreeRTOS里stack和heap的管理和分析。

Task Stack分析

每個(gè)task的stack是獨(dú)立分配的,我們使用IAR的FreeRTOS分析插件對stack進(jìn)行分析,打開和使能方式如下:

543983e4-cac8-11ed-bfe3-dac502259ad0.png

54501172-cac8-11ed-bfe3-dac502259ad0.png

5465c684-cac8-11ed-bfe3-dac502259ad0.png

以上方式針對的是在線debug時(shí)的分析查看,該方式查看信息較全面,可以在開發(fā)階段根據(jù)多數(shù)場景分配合適的stack,但是對于debugger離線后的溢出檢測則需要使用FreeRTOS自帶的stack異常檢測工具,打開方式如下,詳細(xì)信息請參考FreeRTOS- stacks and stack overflow checking

#define configCHECK_FOR_STACK_OVERFLOW 2

#if (configCHECK_FOR_STACK_OVERFLOW !=  0)
void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName)
{
    panic(0,(uint32_t)vApplicationStackOverflowHook,0,0);
}
#endif

FreeRTOS Heap分析

FreeRTOS使用的heap通過如下宏定義,對于該Heap的溢出檢測可以使用FreeRTOS自帶的內(nèi)存分配失敗鉤子函數(shù)進(jìn)行檢測。

#define gTotalHeapSize_c        9000

#define configUSE_MALLOC_FAILED_HOOK 1

CSTACK分析

上面章節(jié)我們講了FreeRTOS中task占用stack的檢測方法,但是對于RTOS初始化前和中斷處理函數(shù)中用到的CSTACK該如何檢測呢?

IAR本身集成了CSTACK檢測功能,會顯示當(dāng)前棧的使用情況和最大棧深度,開發(fā)階段連接debugger,按如下方式設(shè)置后即可查看CSTACK信息。

5478bc8a-cac8-11ed-bfe3-dac502259ad0.png

54999c02-cac8-11ed-bfe3-dac502259ad0.png

如果系統(tǒng)產(chǎn)生了CSTACK溢出,我們該如何檢測哪里產(chǎn)生了這個(gè)溢出呢?這時(shí)我們可以使用IAR的數(shù)據(jù)斷點(diǎn)功能,將棧底位置寫入數(shù)據(jù)斷點(diǎn)的break位置,Access type改為Write,這樣只要棧底被修改了,即可產(chǎn)生斷點(diǎn),根據(jù)代碼break的位置,即可知道是哪里產(chǎn)生了CSTACK溢出。

54bab8ce-cac8-11ed-bfe3-dac502259ad0.png

一個(gè)快速獲得棧底位置的方法,如下圖所示,將鼠標(biāo)放到IAR的CSTACK的進(jìn)度條處即可顯示stack的使用范圍。

54d379ea-cac8-11ed-bfe3-dac502259ad0.png

對于debugger離線后的CSTACK溢出檢測,我們可以通過初始化棧空間為一個(gè)固定值,例如在線分析時(shí)為0xcd,定時(shí)檢測棧底上的該值是否有被修改來檢測。

如下所示為在idle任務(wù)中進(jìn)入低功耗前增加棧底數(shù)據(jù)的檢測。

void check_overflow_cstack()
{
    extern uint32_t CHECK_OVERFLOW_CSTACK_SIZE[];
    uint32_t CHECK_OVERFLOW_CSTACK_END = *((uint32_t*)0UL) - (uint32_t)CHECK_OVERFLOW_CSTACK_SIZE;
    if(*(uint32_t*)CHECK_OVERFLOW_CSTACK_END != 0xcdcdcdcd)
    {
        panic(0,(uint32_t)check_overflow_cstack,0,0);
    }
}

void BOARD_EnterLowPowerCb(void)
{
    check_overflow_cstack();
…
}

另外鏈接文件MKW38A512xxx4_PD_connectivity_lp.icf需要增加如下定義:

define exported symbol  CHECK_OVERFLOW_CSTACK_SIZE = __size_cstack__;

動態(tài)內(nèi)存分配

SDK沒有使用標(biāo)準(zhǔn)庫的malloc函數(shù),定義__heap_size__為0,所以用戶不能使用malloc和free函數(shù)。但如果需要?jiǎng)討B(tài)申請內(nèi)存該如何操作呢?SDK的Framework里定義了一套簡化的內(nèi)存管理函數(shù)MEM_BufferAlloc()和MEM_BufferFree()。

配置文件中需要預(yù)先定義需要的數(shù)據(jù)塊大小和數(shù)量,內(nèi)存申請單元會從這些內(nèi)存塊中選取滿足大小要求的最小的數(shù)據(jù)塊作為MEM_BufferAlloc()的返回結(jié)果。

#define AppPoolsDetails_c 
         _block_size_  80  _number_of_blocks_    7 _eol_  
         _block_size_ 248   _number_of_blocks_   2 _eol_  
         _block_size_ 312  _number_of_blocks_    1 _eol_  
         _block_size_ 392  _number_of_blocks_    1 _eol_

當(dāng)然如果用戶使用了該內(nèi)存分配方法,則需要根據(jù)應(yīng)用情況,對應(yīng)地增加內(nèi)存池中的系數(shù)。另外可以使能如下宏定義,查看分析內(nèi)存分配是否合理,具體用法請參考應(yīng)用筆記:

MemoryPool Optimizer on MKW3xA/KW3xZ (nxp.com.cn)。

MEM_DEBUG,MEM_TRACKING,MEM_DEBUG_OUT_OF_MEMORY

以上是我總結(jié)的一些overflow的應(yīng)對策略,強(qiáng)烈建議大家在開發(fā)階段加上這些檢測措施,因?yàn)閮?nèi)存溢出會導(dǎo)致各種意想不到的結(jié)果,如果只跟著看到的異?,F(xiàn)象分析,往往會浪費(fèi)很多不必要的時(shí)間和精力,如果大家有其它應(yīng)對內(nèi)存溢出的方法,歡迎一起討論學(xué)習(xí)。

審核編輯:湯梓紅

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

    關(guān)注

    146

    文章

    17349

    瀏覽量

    352758
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3060

    瀏覽量

    74369
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    819

    瀏覽量

    119906
  • SDK
    SDK
    +關(guān)注

    關(guān)注

    3

    文章

    1045

    瀏覽量

    46304
  • 內(nèi)存溢出
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    1245

原文標(biāo)題:三分鐘搞定MCU內(nèi)存溢出

文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    免費(fèi)三分鐘

    免費(fèi)三分鐘回?fù)茈娫?,綠色的,對號碼有次數(shù)限制.有三分鐘通話時(shí)長,,反其道而行不就又是三分鐘,請各位靈活運(yùn)用(見例)假如我的電話是1301309****,而我要打的電話是1386551****.把
    發(fā)表于 03-02 17:27

    三分鐘搞定NFC

    種方式。沒有規(guī)定數(shù)據(jù)的加密處理方式。NFC標(biāo)準(zhǔn)與索尼開發(fā)的“FeliCa”以及荷蘭恩智浦半導(dǎo)體(NXP Semiconductors)的“Mifare”所采用的非接觸式IC卡技術(shù),在物理層上具有兼容性
    發(fā)表于 07-13 15:11

    職場啟示: 三分鐘碎片化

    也無法寫好。 明白這一點(diǎn),你就會意識到,有些工作的確需要大塊的時(shí)間,但如果不是提前做夠鋪墊,這些大塊的時(shí)間并不會有效率。 所以我自己的習(xí)慣是“五分鐘方案法”。也就是說: 一份完整的方案=5分鐘構(gòu)思
    發(fā)表于 08-07 14:06

    讓程序運(yùn)行三分鐘,停一分鐘,循環(huán)下去,直到設(shè)置停止循環(huán)的位置

    本帖最后由 我想看看太陽 于 2022-6-9 11:52 編輯 讓這個(gè)程序運(yùn)行三分鐘,停一分鐘,循環(huán)下去,直到設(shè)置停止循環(huán)的位置,需要添加什么模塊才能實(shí)現(xiàn)呢
    發(fā)表于 06-08 15:03

    三分鐘讓你明白電池為什么會鼓包

    三分鐘讓你明白電
    發(fā)表于 11-12 08:18 ?7.1w次閱讀

    三分鐘能做什么?三分鐘能讓我的iPhone6s重啟N次!

    蘋果系統(tǒng)是以穩(wěn)定著稱,不過這位網(wǎng)友發(fā)來求助,稱自己的iPhone6s三分鐘時(shí)間重啟了N次。并且拍了視頻,系統(tǒng)為IOS10.2.1。
    發(fā)表于 02-25 10:18 ?2594次閱讀

    小米掃地機(jī)器人臺灣開售 三分鐘售罄

    首批小米掃地機(jī)器人于4月6日如約在臺灣地區(qū)開售,售價(jià)8895臺幣(約合1915元人民幣),開售三分鐘,5000臺掃地機(jī)器人在小米臺灣官網(wǎng)即告售罄。
    發(fā)表于 04-07 10:45 ?1248次閱讀

    三分鐘概述8類常用元器件資料下載

    電子發(fā)燒友網(wǎng)為你提供三分鐘概述8類常用元器件資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 03-28 08:40 ?6次下載
    <b class='flag-5'>三分鐘</b>概述8類常用元器件資料下載

    三分鐘看懂工字型功率電感外觀破損的常見原因gujing

    三分鐘看懂工字型功率電感外觀破損的常見原因gujing? 編輯:谷景電子 關(guān)于功率電感的相關(guān)問題最近給大家做了一些小科普,有關(guān)注選型的、有關(guān)于性能特點(diǎn)方面、以及有關(guān)于如何解決功率電感使用中溫升高
    發(fā)表于 11-09 13:54 ?872次閱讀
    <b class='flag-5'>三分鐘</b>看懂工字型功率電感外觀破損的常見原因gujing

    Brocade幫助Netzlink實(shí)現(xiàn)三分鐘云服務(wù)供應(yīng)

    電子發(fā)燒友網(wǎng)站提供《Brocade幫助Netzlink實(shí)現(xiàn)三分鐘云服務(wù)供應(yīng).pdf》資料免費(fèi)下載
    發(fā)表于 08-29 10:12 ?0次下載
    Brocade幫助Netzlink實(shí)現(xiàn)<b class='flag-5'>三分鐘</b>云服務(wù)供應(yīng)

    快樂解說MCU三分鐘,帶你了解低功耗MCU

    快樂解說MCU三分鐘,帶你了解低功耗MCU
    的頭像 發(fā)表于 09-18 10:56 ?1429次閱讀

    三分鐘實(shí)現(xiàn)MQTT協(xié)議網(wǎng)關(guān)串口連接菱FX3UPLC上傳騰訊云

    三分鐘實(shí)現(xiàn)MQTT協(xié)議網(wǎng)關(guān)串口連接菱FX3UPLC上傳騰訊云
    的頭像 發(fā)表于 10-23 16:23 ?1096次閱讀
    <b class='flag-5'>三分鐘</b>實(shí)現(xiàn)MQTT協(xié)議網(wǎng)關(guān)串口連接<b class='flag-5'>三</b>菱FX3UPLC上傳騰訊云

    三分鐘看懂雪崩光電二極管

    三分鐘看懂雪崩光電二極管
    的頭像 發(fā)表于 11-23 09:09 ?2077次閱讀
    <b class='flag-5'>三分鐘</b>看懂雪崩光電二極管

    三分鐘了解飛創(chuàng)直線電機(jī)運(yùn)動模組特點(diǎn)、選型及應(yīng)用-FCL系列

    三分鐘了解飛創(chuàng)直線電機(jī)運(yùn)動模組特點(diǎn)、選型及應(yīng)用-FCL系列
    的頭像 發(fā)表于 02-05 16:28 ?677次閱讀
    <b class='flag-5'>三分鐘</b>了解飛創(chuàng)直線電機(jī)運(yùn)動模組特點(diǎn)、選型及應(yīng)用-FCL系列

    Node-RED初學(xué)者教程-三分鐘學(xué)習(xí)

    通過這短短三分鐘的教程,你已經(jīng)掌握了Node-RED的基本操作。你可以利用Node-RED的強(qiáng)大功能來創(chuàng)建更復(fù)雜的數(shù)據(jù)流和自動化任務(wù),無論是物聯(lián)網(wǎng)應(yīng)用、API集成還是數(shù)據(jù)處理。Node-RED簡化了編程過程,讓開發(fā)更直觀、更高效。繼續(xù)探索Node-RED,你會發(fā)現(xiàn)更多強(qiáng)大且有趣的功能。
    的頭像 發(fā)表于 06-27 17:09 ?3217次閱讀
    Node-RED初學(xué)者教程-<b class='flag-5'>三分鐘</b>學(xué)習(xí)