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

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

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

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

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

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

概述

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

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

方法論

理論上來說,你是可以計算出任務(wù)所需要的大概的值,但是要考慮的因素比較多,比如寄存器的數(shù)量的不同等,不同類型的單片機亦有差別,所以這種方式比較費腦,對底層知識的理解也要比較深刻,可能比較適合大佬吧(我不是大佬也不知道大佬們怎么做)。

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

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

RT-Thread

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

FreeRTOS

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

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

ucos

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

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

    關(guān)注

    6044

    文章

    44631

    瀏覽量

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

    關(guān)注

    31

    文章

    5372

    瀏覽量

    121312
  • RTOS
    +關(guān)注

    關(guān)注

    22

    文章

    820

    瀏覽量

    119923
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

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

    關(guān)注

    31

    文章

    1306

    瀏覽量

    40437
收藏 人收藏

    評論

    相關(guān)推薦

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

    簡介明了帶你了解嵌入式RTOS任務(wù) 和 系統(tǒng)
    的頭像 發(fā)表于 05-16 09:57 ?3414次閱讀
    嵌入式<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 每個任務(wù)具體定義大小

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    什么是堆?什么是

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

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

    基于STM32的虛擬多線程,可以很好的用于裸機程序,用于模擬小型操作系統(tǒng)的多線程概念。本實例參考了參考TI_BLE協(xié)議_ZStack協(xié)議
    發(fā)表于 06-14 10:42 ?6970次閱讀
    基于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è)計 (基于RTOS

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

    修改空間的大小

    當(dāng)程序的局部變量太多時,可能會造成空間不夠用導(dǎo)致程序出錯,這個時候就需要修改空間的大小默認(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ù)據(jù)只能由當(dāng)前
    的頭像 發(fā)表于 02-21 13:54 ?1569次閱讀
    堆內(nèi)存和<b class='flag-5'>棧</b>內(nèi)存的區(qū)別是什么

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

    大多數(shù)的處理器架構(gòu),都有實現(xiàn)硬件。有專門的指針寄存器,以及特定的硬件指令來完成 入/出 的操作。例如在 ARM 架構(gòu)上,R13 (SP) 指針是堆棧指針寄存器,而 PUSH 是
    發(fā)表于 08-18 10:57 ?556次閱讀
    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ū)別