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

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

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

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

RTOS任務(wù)的堆棧大小與代碼量有啥關(guān)系嗎?

strongerHuang ? 來(lái)源:strongerHuang ? 作者:strongerHuang ? 2021-05-26 09:34 ? 次閱讀

最近有小伙伴問(wèn)了這樣一個(gè)問(wèn)題:我有個(gè)任務(wù)中的代碼量很多,是不是這個(gè)任務(wù)的堆棧需要分配很大才行?

下面就圍繞任務(wù)代碼量,以及堆棧進(jìn)行描述相關(guān)內(nèi)容。

1RTOS任務(wù)堆棧分配

市面上很多RTOS的任務(wù)都是需要提前分配堆棧大小,也就是在創(chuàng)建任務(wù)的時(shí)候分配好堆棧的大小。 比如uCOS創(chuàng)建一個(gè)檢測(cè)(Check)任務(wù):

// 任務(wù)優(yōu)先級(jí)#define TASK_CHECK_PRIO 6 // 任務(wù)堆棧大小#define TASK_CHECK_STK_SIZE 128 // 堆棧OS_STK TaskCheckStk[TASK_CHECK_STK_SIZE]; // 創(chuàng)建任務(wù) - 信號(hào)檢測(cè)OSTaskCreateExt((void (*)(void *)) AppTaskCheck, (void *) 0, (OS_STK *)&TaskCheckStk[TASK_CHECK_STK_SIZE-1],

(INT8U ) TASK_CHECK_PRIO, (INT16U ) TASK_CHECK_PRIO, (OS_STK *)&TaskCheckStk[0], (INT32U ) TASK_CHECK_STK_SIZE, (void *) 0, (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR)); // 任務(wù)應(yīng)用實(shí)現(xiàn)void AppTaskCheck(void *p_arg){ // 代碼··· (void)p_arg; for(;;) { // 代碼··· }} FreeRRTOS創(chuàng)建一個(gè)任務(wù)類似,也是在創(chuàng)建時(shí)分配堆棧大?。?/p>

#define TASK_CHECK_PRIO 6#define TASK_CHECK_STK_SIZE 128 BaseType_t xReturn; xReturn = xTaskCreate(AppTaskCheck, “AppTaskCheck”, TASK_CHECK_STK_SIZE, NULL, TASK_CHECK_PRIO, NULL); 除了堆棧,其實(shí)還有像消息隊(duì)列、消息郵箱等也是需要提前分配堆棧。 比如FreeRTOS創(chuàng)建CLI消息隊(duì)列:

#define CLI_QUEUE_NUM 256 //CLI接收隊(duì)列數(shù)#define CLI_PACKAGE_LEN 2 //CLI數(shù)據(jù)包長(zhǎng)度 QueueHandle_t xCLIRcvQueue = NULL; /* 創(chuàng)建隊(duì)列 */if(xCLIRcvQueue == NULL){ xCLIRcvQueue = xQueueCreate(CLI_QUEUE_NUM, CLI_PACKAGE_LEN);}

這就是創(chuàng)建任務(wù)(或隊(duì)列)的分配堆棧,至于具體分配多少,與你實(shí)際情況有關(guān),下面章節(jié)我會(huì)描述。

2任務(wù)代碼量

一個(gè)任務(wù)的代碼量,就是你任務(wù)中調(diào)用的那些代碼。 比如上面例子中的代碼:

// 任務(wù)應(yīng)用實(shí)現(xiàn)void AppTaskCheck(void *p_arg){ // 代碼··· (void)p_arg; for(;;) { // 代碼··· }}

這里可能寫(xiě)了幾千行代碼,或者調(diào)用了上百個(gè)函數(shù),每個(gè)函數(shù)里面都有不少代碼。

這樣下來(lái),這一個(gè)任務(wù)的代碼量就很大了。

3任務(wù)代碼量和堆棧大小有關(guān)系嗎?

很多人就存在一個(gè)疑惑:任務(wù)掛起,要在堆棧中臨時(shí)保存任務(wù),如果這個(gè)任務(wù)的代碼量很大,是不需要很大堆棧空間才行?

答案:不一定需要很大堆??臻g,任務(wù)代碼量和堆棧也沒(méi)有直接關(guān)系。

可能很多初學(xué)者存在這么一個(gè)誤區(qū):保存一個(gè)任務(wù),就是把這個(gè)任務(wù)所有代碼都保存起來(lái)(在堆棧中)。

堆棧主要保存是這個(gè)任務(wù)自身的變量(控制塊),還有臨時(shí)變量等這些關(guān)鍵變量信息,而并非要保存所有代碼。

4堆棧分配多大才合適?

任務(wù)堆棧大小,主要取決于你任務(wù)中【臨時(shí)變量】的多少。 注意:臨時(shí)變量包含你代碼中所有嵌套函數(shù)中的臨時(shí)變量。 對(duì)于RAM資源相對(duì)較大的處理器,你可以盡量分配多一點(diǎn)堆棧資源。 但是,很多時(shí)候,我們的RAM資源都是相對(duì)比較緊張的。這個(gè)時(shí)候,就需要你綜合平衡。 比如靜態(tài)局部變量:

void AppTaskCheck(void *p_arg){ static uint8_t aaa; //靜態(tài)局部變量 (void)p_arg; for(;;) { // 代碼··· }} 這里的aaa變量就不會(huì)占用該任務(wù)的堆??臻g,但是它會(huì)占用全局變量(RAM)空間。 用靜態(tài)局部變量,還是臨時(shí)變量,要牽涉到你項(xiàng)目具體情況,比如:RAM資源、代碼運(yùn)行效率等。(臨時(shí)變量還會(huì)有一個(gè)數(shù)據(jù)拷貝過(guò)程) 所以,該如何分配堆棧,該用靜態(tài)還是臨時(shí)變量,需要綜合考慮你項(xiàng)目的情況而定。

編輯:jq

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

    68

    文章

    19440

    瀏覽量

    231327
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1369

    瀏覽量

    115070
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4838

    瀏覽量

    69139

原文標(biāo)題:RTOS任務(wù)的堆棧大小與代碼量有關(guān)嗎?

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用任務(wù)通知提高RTOS應(yīng)用的效率

    在實(shí)時(shí)嵌入式系統(tǒng)中,性能和資源效率是決定設(shè)計(jì)成敗的關(guān)鍵因素。傳統(tǒng)的實(shí)時(shí)操作系統(tǒng)(RTOS)提供了如隊(duì)列、信號(hào)和事件組機(jī)制,實(shí)現(xiàn)任務(wù)之間的同步和通信。FreeRTOS/SAFERTOS還提供一種方法可以使這些過(guò)程更快、更輕量化,
    的頭像 發(fā)表于 12-27 14:54 ?351次閱讀

    RTOS與Linux到底什么區(qū)別

    很多做嵌入式開(kāi)發(fā)的小伙伴都存在這樣的疑惑:RTOS與Linux到底什么區(qū)別?
    的頭像 發(fā)表于 10-29 09:53 ?608次閱讀

    C2000?MCU的運(yùn)行時(shí)堆棧大小監(jiān)測(cè)

    電子發(fā)燒友網(wǎng)站提供《C2000?MCU的運(yùn)行時(shí)堆棧大小監(jiān)測(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-11 09:30 ?0次下載
    C2000?MCU的運(yùn)行時(shí)<b class='flag-5'>堆棧</b><b class='flag-5'>大小</b>監(jiān)測(cè)

    freertos最多支持多少個(gè)任務(wù)

    以下幾個(gè)因素: 系統(tǒng)資源 :FreeRTOS能夠支持的任務(wù)數(shù)量受到系統(tǒng)硬件資源的限制,特別是處理器的RAM大小和性能。RAM用于存儲(chǔ)任務(wù)的控制塊(TCB)和任務(wù)
    的頭像 發(fā)表于 09-02 14:21 ?1228次閱讀

    freertos和rtos區(qū)別是什么

    FreeRTOS 和 RTOS(實(shí)時(shí)操作系統(tǒng))是兩個(gè)不同的概念,但它們之間緊密的聯(lián)系。FreeRTOS 是一個(gè)特定的開(kāi)源實(shí)時(shí)操作系統(tǒng),而 RTOS 是實(shí)時(shí)操作系統(tǒng)的一般概念。 概念定義 RT
    的頭像 發(fā)表于 09-02 14:18 ?1598次閱讀

    數(shù)字量與模擬關(guān)系如何算

    數(shù)字量與模擬之間的關(guān)系主要體現(xiàn)在它們之間的轉(zhuǎn)換上,這種轉(zhuǎn)換通常通過(guò)模數(shù)轉(zhuǎn)換器(ADC)和數(shù)模轉(zhuǎn)換器(DAC)來(lái)實(shí)現(xiàn)。以下是對(duì)兩者關(guān)系的介紹: 一、定義與基本關(guān)系 模擬
    的頭像 發(fā)表于 08-30 09:16 ?962次閱讀

    電容大小與濾波頻率的關(guān)系是什么

    電容大小與濾波頻率的關(guān)系是一個(gè)非常重要的電子學(xué)問(wèn)題,它涉及到電路設(shè)計(jì)、信號(hào)處理、電源管理等多個(gè)領(lǐng)域。 一、電容的基本特性 定義:電容是一種電子元件,能夠存儲(chǔ)電荷。它的單位是法拉(F),通常用微法
    的頭像 發(fā)表于 07-29 09:13 ?4236次閱讀

    xTaskCreate能否把堆棧上限調(diào)整為2K或者1k?

    RTOS SDK 的系統(tǒng)任務(wù)優(yōu)先級(jí)為 15 ,創(chuàng)建任務(wù)的接?口 xTaskCreate 為 freeRTOS ?自帶接?口,使 ?用 xTaskCreate 創(chuàng)建任務(wù)時(shí),
    發(fā)表于 07-22 06:31

    請(qǐng)問(wèn)est_printf為什么要使用堆棧空間?

    - 它應(yīng)該只是減慢你的代碼,因?yàn)樗诘却敵稣{(diào)試消息時(shí)什么都不做 - 不會(huì)占用堆棧空間。 我用 ets_printf 儀器化了 malloc 和 free。 發(fā)生這種情況時(shí),會(huì)生成一個(gè)異常,即在
    發(fā)表于 07-09 07:47

    esp32S2創(chuàng)建任務(wù)時(shí),若任務(wù)堆棧大小配置超過(guò) 4096*6 ,該任務(wù)會(huì)創(chuàng)建失敗,如何解決?

    esp32S2創(chuàng)建任務(wù)時(shí),若任務(wù)堆棧大小配置超過(guò) 4096*6 ,該任務(wù)會(huì)創(chuàng)建失敗, xTaskCreat 返回 xReturn = fff
    發(fā)表于 06-20 08:26

    請(qǐng)問(wèn)CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里?

    請(qǐng)問(wèn)一下,CMSIS-RTOS RTX的任務(wù)調(diào)度鎖在哪里?謝謝!
    發(fā)表于 05-13 08:28

    求助,關(guān)于stm32f1使用freeRTOS和Fatfs時(shí)任務(wù)堆棧大小問(wèn)題求解

    哪位使用過(guò)freeRTOS和Fatfs時(shí),使用Fatfs系統(tǒng)的函數(shù)如f_open()等等時(shí),此任務(wù)堆棧大小大致需要多大,當(dāng)前MAX_SS 定義為4096,我分配12K軟件都跑飛了,請(qǐng)哪位使用分享一下經(jīng)驗(yàn),謝謝!~~?
    發(fā)表于 05-09 06:50

    IAR中調(diào)試freertos系統(tǒng)怎樣才能方便的獲得任務(wù)堆棧情況?

    在IAR中將freertos移植到STM32中,在進(jìn)行任務(wù)堆棧分配時(shí)分配多大的堆棧時(shí)一個(gè)問(wèn)題,如何比較方便的獲得任務(wù)堆棧呢?利用IAR這個(gè)平
    發(fā)表于 05-07 08:15

    使用STM32CubeIDE修改堆棧大小后,生成的BIN文件內(nèi)容沒(méi)變化是怎么回事?

    大家好!我在使用STM32CubeIDE V1.6.1版本修改工程的堆棧后,在ld文件里已經(jīng)看到堆棧對(duì)應(yīng)的變量改變了,但是為什么生成出來(lái)的bin文件沒(méi)變化呢? 上傳了的兩個(gè)工程文件,希望大家可以
    發(fā)表于 04-07 06:11

    電阻大小與導(dǎo)體的什么有關(guān)系

    電阻大小與導(dǎo)體的幾個(gè)相關(guān)因素有密切的關(guān)系,其中包括材料的電阻率、尺寸、形狀、溫度以及其他外界條件。 首先,材料的電阻率是決定導(dǎo)體電阻大小的關(guān)鍵因素之一。電阻率是材料本身對(duì)電流流動(dòng)的阻礙程度的度量
    的頭像 發(fā)表于 02-26 13:39 ?2660次閱讀