在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

如何設(shè)定RTOS中的任務(wù)棧(線程棧)大小呢?

冬至子 ? 來源:機(jī)器靈魂注入師 ? 作者:Eureka1024 ? 2023-12-01 16:40 ? 次閱讀

概述

首先說明的是,在 RT-Thread 中,將本文提及的 任務(wù) 稱之為 線程。在使用 RTOS 開發(fā)項(xiàng)目時(shí),一個(gè)任務(wù)會(huì)擁有自己獨(dú)立的線程棧,用來在任務(wù)調(diào)度時(shí)保存該任務(wù)的當(dāng)前上下文內(nèi)容,比如當(dāng)前 CPU 寄存器的值、函數(shù)的局部變量等。

不同的任務(wù)復(fù)雜程度不同,需要的棧大小也不同,給多了浪費(fèi)(畢竟單片機(jī)中的 RAM 貴的一匹),給少了更嚴(yán)重,棧溢出造成的后果會(huì)讓整個(gè)系統(tǒng)崩潰。所以,一個(gè)合適的棧大小便十分重要,本文就來聊聊這個(gè)棧大小如何配置的問題。

方法論

理論上來說,你是可以計(jì)算出任務(wù)所需要的大概的值,但是要考慮的因素比較多,比如寄存器的數(shù)量的不同等,不同類型的單片機(jī)亦有差別,所以這種方式比較費(fèi)腦,對(duì)底層知識(shí)的理解也要比較深刻,可能比較適合大佬吧(我不是大佬也不知道大佬們?cè)趺醋觯?/p>

比較普適的做法是,可以先設(shè)置較大的任務(wù)棧,比如 1KB2KB 的大小,確保不會(huì)出現(xiàn)棧溢出的情況,然后讓系統(tǒng)運(yùn)行一段比較長(zhǎng)的時(shí)間,同時(shí)要盡量觸發(fā)各種可能的工況,通過查看任務(wù)棧的被使用的最大深度值,一般將最終的任務(wù)棧大小設(shè)定為該值的 1.5~2 倍為比較合適的值。不斷地修改和檢查棧大小是否配置合適這個(gè)過程,是動(dòng)態(tài)調(diào)節(jié)的過程,最終會(huì)找到一個(gè)比較好的方案。

不同的 RTOS,如何檢測(cè)任務(wù)棧的使用情況呢?

RT-Thread

FinSH 中用 list_thread 命令查看線程運(yùn)行過程中線程所使用的棧的大小,這里的大小指的是從線程啟動(dòng)運(yùn)行時(shí)到當(dāng)前時(shí)刻點(diǎn),線程使用的最大棧深度,

FreeRTOS

使用 uxTaskGetStackHighWaterMark()``API 函數(shù)來查看實(shí)際使用了多少棧,如果分配的棧比需要的多,則可以減少棧大小,并且可以使用棧溢出檢測(cè)特性來確定棧是否太小。比如,在一個(gè)任務(wù)中使用如下調(diào)用:

printf(" the min free stack size is %d rn",(int32_t)uxTaskGetStackHighWaterMark(NULL));

ucos

ucos 提供了一個(gè)系統(tǒng)任務(wù):STATISTICS 任務(wù),可以統(tǒng)計(jì)各任務(wù)的CPU使用率,也就是任務(wù)棧使用情況,可以借用該統(tǒng)計(jì)任務(wù)的函數(shù)來統(tǒng)計(jì)各任務(wù)的棧使用情況。

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

    關(guān)注

    6063

    文章

    44929

    瀏覽量

    647215
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5423

    瀏覽量

    123431
  • RTOS
    +關(guān)注

    關(guān)注

    24

    文章

    842

    瀏覽量

    120791
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    490

    瀏覽量

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

    關(guān)注

    32

    文章

    1371

    瀏覽量

    41535
收藏 人收藏

    評(píng)論

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

    嵌入式RTOS任務(wù) 和 系統(tǒng)

    簡(jiǎn)介明了帶你了解嵌入式RTOS任務(wù) 和 系統(tǒng)
    的頭像 發(fā)表于 05-16 09:57 ?3861次閱讀
    嵌入式<b class='flag-5'>RTOS</b>的 <b class='flag-5'>任務(wù)</b><b class='flag-5'>棧</b> 和 系統(tǒng)<b class='flag-5'>棧</b>

    ucos_ii 每個(gè)任務(wù)具體定義大小

    在ucos_ii 系統(tǒng),針對(duì)每個(gè)任務(wù)怎么來分配其大小。我在程序對(duì)一個(gè)只是LED點(diǎn)亮的任務(wù)
    發(fā)表于 04-30 17:43

    轉(zhuǎn):第11章 FreeRTOS任務(wù)大小確定及其溢出檢測(cè)

    任務(wù)溢出檢測(cè)方式一)11.5 實(shí)驗(yàn)例程說明(任務(wù)溢出檢測(cè)方式二)11.6總結(jié)11.1 任務(wù)
    發(fā)表于 08-28 15:21

    請(qǐng)問uc/os任務(wù)優(yōu)先級(jí)和大小該怎樣設(shè)置?

    #defineTASK_LED2_STK_SIZE80#defineTASK_LED3_STK_SIZE80 #defineTASK_GUI_STK_SIZE500#defineTASK_GUI_Touch_STK_SIZE80 不知道怎樣設(shè)置大小
    發(fā)表于 04-08 08:35

    請(qǐng)問在IAR如何直接查看任務(wù)使用多少空間?

    在使用IAR調(diào)試freertos任務(wù),IAR自帶了一個(gè)調(diào)試插件,啟用這個(gè)插件會(huì)得到任務(wù)名、優(yōu)先級(jí)、起始空間和頂位置,但是如何計(jì)算出每個(gè)
    發(fā)表于 06-10 09:25

    FreeRTOS任務(wù)與系統(tǒng)的關(guān)系?

    configTOTAL_HEAP_SIZE((size_t)(55*1024))的作用?三個(gè)設(shè)置大小的地方之間又有何種聯(lián)系?4、任務(wù)與系統(tǒng)
    發(fā)表于 07-15 00:17

    ThreadX任務(wù)大小的確定方法以及溢出檢測(cè)方法

    第10章 ThreadX任務(wù)大小確定及其溢出檢測(cè)本章節(jié)為大家講解ThreadX任務(wù)大小的確定
    發(fā)表于 08-04 08:59

    講解ThreadX任務(wù)大小的確定方法以及溢出檢測(cè)方法

    第10章 ThreadX任務(wù)大小確定及其溢出檢測(cè)本章節(jié)為大家講解ThreadX任務(wù)大小的確定
    發(fā)表于 08-09 06:30

    如何確定ThreadX任務(wù)大小

    如何確定ThreadX任務(wù)大小?什么是溢出?怎樣去檢測(cè)ThreadX的
    發(fā)表于 10-14 07:42

    什么是堆?什么是

    ,程序執(zhí)行過程溢出,極大可能的影響程序、系統(tǒng)的穩(wěn)定,嚴(yán)重時(shí)會(huì)造成程序、系統(tǒng)的崩潰,所以堆棧溢出檢測(cè)十分重要且必要。什么是堆,什么是堆和都是指預(yù)先分配的空間,有
    發(fā)表于 12-22 06:09

    基于STM32的虛擬多線程(TI_BLE協(xié)議_ZStack協(xié)議)

    基于STM32的虛擬多線程,可以很好的用于裸機(jī)程序,用于模擬小型操作系統(tǒng)的多線程概念。本實(shí)例參考了參考TI_BLE協(xié)議_ZStack協(xié)議
    發(fā)表于 06-14 10:42 ?7065次閱讀
    基于STM32的虛擬多<b class='flag-5'>線程</b>(TI_BLE協(xié)議<b class='flag-5'>棧</b>_ZStack協(xié)議<b class='flag-5'>棧</b>)

    LEDs狀態(tài)燈任務(wù)(線程)設(shè)計(jì) (基于RTOS

    LEDs狀態(tài)燈任務(wù)(線程)設(shè)計(jì)(基于RTOS
    的頭像 發(fā)表于 03-12 11:30 ?2599次閱讀

    修改空間的大小

    當(dāng)程序的局部變量太多時(shí),可能會(huì)造成空間不夠用導(dǎo)致程序出錯(cuò),這個(gè)時(shí)候就需要修改空間的大小默認(rèn)的空間
    發(fā)表于 12-20 18:53 ?1次下載
    修改<b class='flag-5'>棧</b>空間的<b class='flag-5'>大小</b>

    堆內(nèi)存和內(nèi)存的區(qū)別是什么

    內(nèi)存是為線程留出的臨時(shí)空間,每個(gè)線程都有一個(gè)固定大小空間,而且空間存儲(chǔ)的數(shù)據(jù)只能由當(dāng)前
    的頭像 發(fā)表于 02-21 13:54 ?1758次閱讀
    堆內(nèi)存和<b class='flag-5'>棧</b>內(nèi)存的區(qū)別是什么

    linux的進(jìn)程,線程,內(nèi)核的區(qū)別

    大多數(shù)的處理器架構(gòu),都有實(shí)現(xiàn)硬件。有專門的指針寄存器,以及特定的硬件指令來完成 入/出 的操作。例如在 ARM 架構(gòu)上,R13 (SP) 指針是堆棧指針寄存器,而 PUSH 是
    發(fā)表于 08-18 10:57 ?666次閱讀
    linux<b class='flag-5'>中</b>的進(jìn)程<b class='flag-5'>棧</b>,<b class='flag-5'>線程</b><b class='flag-5'>棧</b>,內(nèi)核<b class='flag-5'>棧</b>的區(qū)別
    主站蜘蛛池模板: 人人艹人人插 | 波多野结衣一级特黄毛片 | 四大名著成人高h肉版 | 亚洲人成伊人成综合网久久 | 欧美一级片在线免费观看 | 日本三级视频 | yy6080理aa级伦大片一级 | 欧美黑人性受xxxx精品 | xx肥妇人爽妇网 | 色婷婷综合在线 | 女同毛片 | 在线观看三级网站 | 人人干人人玩 | 九九福利 | 欧美日本俄罗斯一级毛片 | 欧美福利二区 | 艹逼视频免费 | 99久久免费精品国产免费高清 | 在线免费日韩 | 免费澳门一级毛片 | 日韩成人午夜 | 手机看片中文字幕 | 国产黄色大片网站 | 日本三级香港三级人妇 m | 日本三级香港三级三级人!妇久 | 亚洲日本在线观看 | 国产又黄又爽又猛的免费视频播放 | 欧美无遮挡一区二区三区 | 久久婷婷色 | 高清配种视频xxxxx | 亚洲爱婷婷色婷婷五月 | 男女在线免费视频 | 激情有码 | 欧美黑人巨大xxx猛交 | 午夜在线视频 | 国产在线精品美女观看 | 调教双性学霸美人 | 久久久综合视频 | 夜夜se | 狠狠色丁香久久综合五月 | 国产精品国产三级国快看 |