18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

冬至子 ? 來源:機器靈魂注入師 ? 作者:Eureka1024 ? 2023-12-01 16:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

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

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

方法論

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

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

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

RT-Thread

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

FreeRTOS

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

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

ucos

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

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

    關注

    6072

    文章

    45268

    瀏覽量

    661190
  • 寄存器
    +關注

    關注

    31

    文章

    5503

    瀏覽量

    128352
  • RTOS
    +關注

    關注

    24

    文章

    858

    瀏覽量

    122366
  • FreeRTOS
    +關注

    關注

    14

    文章

    496

    瀏覽量

    66003
  • RT-Thread
    +關注

    關注

    32

    文章

    1506

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    ucos_ii 每個任務具體定義大小

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

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

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

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

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

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

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

    FreeRTOS任務與系統(tǒng)的關系?

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

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

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

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

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

    如何確定ThreadX任務大小

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

    什么是堆?什么是

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

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

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

    LEDs狀態(tài)燈任務(線程)設計 (基于RTOS

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

    修改空間的大小

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

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

    大多數(shù)的處理器架構,都有實現(xiàn)硬件。有專門的指針寄存器,以及特定的硬件指令來完成 入/出 的操作。例如在 ARM 架構上,R13 (SP) 指針是堆棧指針寄存器,而 PUSH 是
    發(fā)表于 08-18 10:57 ?774次閱讀
    linux<b class='flag-5'>中</b>的進程<b class='flag-5'>棧</b>,<b class='flag-5'>線程</b><b class='flag-5'>棧</b>,內(nèi)核<b class='flag-5'>棧</b>的區(qū)別