91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

任務(wù)句柄是到底是怎么一回事

h1654155149.6853 ? 來(lái)源:電子工程世界 ? 作者:電子工程世界 ? 2022-05-07 11:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

摘要學(xué)過(guò)用過(guò)FreeRTOS的人都知道,在創(chuàng)建任務(wù)時(shí)候我們都要定義一個(gè)任務(wù)句柄,這個(gè)任務(wù)句柄有啥含義?書(shū)上的解釋是任務(wù)創(chuàng)建成功以后會(huì)返回此任務(wù)的任務(wù)句柄,這個(gè)句柄就是任務(wù)的堆棧。此參數(shù)就用來(lái)保存這個(gè)任務(wù)句柄。其他API函數(shù)可能會(huì)使用到這個(gè)句柄。

那么任務(wù)句柄是到底是怎么一回事,它保存的是任務(wù)控制塊的首地址。那么它又是如何來(lái)保存任務(wù)的首地址呢?這就是我們今天要討論的話(huà)題。我盡量寫(xiě)得通俗易懂,讓大家都能輕松理解

1、創(chuàng)建一個(gè)任務(wù)

動(dòng)態(tài)創(chuàng)建一個(gè)任務(wù)

#defineTASK1_TASK_PRIO1//任務(wù)優(yōu)先級(jí)
#defineTASK1_STK_SIZE128//任務(wù)棧大小
TaskHandle_tTask1Task_Handler;//任務(wù)句柄
//動(dòng)態(tài)創(chuàng)建一個(gè)任務(wù)1
xTaskCreate((TaskFunction_t)task1_task,//任務(wù)函數(shù)
(constchar*)"task1_task",//任務(wù)名稱(chēng)
(uint16_t)TASK1_STK_SIZE,//任務(wù)堆棧大小
(void*)NULL,//傳遞給任務(wù)函數(shù)的參數(shù)
(UBaseType_t)TASK1_TASK_PRIO,//任務(wù)優(yōu)先級(jí)
(TaskHandle_t*)&Task1Task_Handler);//任務(wù)句柄

//task1任務(wù)函數(shù)
voidtask1_task(void*pvParameters)
{
for(;;)
{
vTaskDelay(2000);
}
}
cc620efc-cd96-11ec-bce3-dac502259ad0.png

參數(shù):

  • pxTaskCode:任務(wù)函數(shù)。
  • pcName:任務(wù)名字,一般用于追蹤和調(diào)試,任務(wù)名字長(zhǎng)度不能超過(guò)。configMAX_TASK_NAME_LEN,在FreeRTOSConfig.h文件中宏定義為16。
  • usStackDepth:任務(wù)堆棧大小,實(shí)際申請(qǐng)到的堆棧是usStackDepth的4倍。其中空閑任務(wù)的任務(wù)堆棧大小為configMINIMAL_STACK_SIZE,在FreeRTOSConfig.h文件中宏定義為130(字)。
  • pvParameters:傳遞給任務(wù)函數(shù)的參數(shù)。
  • uxPriority:任務(wù)優(yōu)先級(jí),范圍0—configMAX_PRIORITIES-1,在FreeRTOSConfig.h文件中configMAX_PRIORITIES宏定義為32。
  • pxCreatedTask:任務(wù)句柄,任務(wù)創(chuàng)建成功以后會(huì)返回此任務(wù)的任務(wù)句柄,這個(gè)句柄其實(shí)就是任務(wù)的任務(wù)堆棧。此參數(shù)就用來(lái)保存這個(gè)任務(wù)句柄。其他API函數(shù)可能會(huì)使用到這個(gè)句柄。

返回值:

  • pdPASS:任務(wù)創(chuàng)建成功。pdPASS宏定義為1
  • errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY:任務(wù)創(chuàng)建失敗,因?yàn)?strong style="color:rgb(68,17,12);">堆內(nèi)存不足!

在創(chuàng)建一個(gè)任務(wù)時(shí)一般都會(huì)在程序開(kāi)頭都有這三個(gè)宏定義

cc7db382-cd96-11ec-bce3-dac502259ad0.png

要指定任務(wù)的優(yōu)先級(jí)、任務(wù)的棧大小,以及任務(wù)的句柄。

優(yōu)先級(jí)很好理解,它決定了多個(gè)任務(wù)之間執(zhí)行任務(wù)的先后順序,任務(wù)的棧大小也很理解,在創(chuàng)建任務(wù)時(shí),任務(wù)的局部變量以及任務(wù)切換時(shí)的數(shù)據(jù)都保存在棧里面。那么任務(wù)句柄是怎么一回事,它保存的是任務(wù)控制塊的首地址。那么它又是如何來(lái)保存任務(wù)的首地址呢?這就是我們今天要討論的話(huà)題

cc931f38-cd96-11ec-bce3-dac502259ad0.png

創(chuàng)建任務(wù)是時(shí)傳入的是一個(gè)指針?

是一個(gè)指針嗎?

不是,是一個(gè)指針的指針。

為什么要傳入指針的指針?

什么是指針的指針?

這些問(wèn)題都需要搞明白你才能解決這個(gè)問(wèn)題?

二、二級(jí)指針

正好前兩天看到了這樣一篇文章,里面有一道C語(yǔ)言的題可以引用來(lái)解釋我們今天的問(wèn)題,我們一起來(lái)看一下

ccc85c2a-cd96-11ec-bce3-dac502259ad0.png

上面這個(gè)代碼有好幾處錯(cuò)誤,它的目的很簡(jiǎn)單,就是想把字符串hello world拷貝給str,但是它能拷貝成功嗎?

cce61c7e-cd96-11ec-bce3-dac502259ad0.png

很顯然是不可以的。

為了使大家看的更清楚,代碼簡(jiǎn)單修改一下

#include
#include
#include

voidgetmemory(char*p)
{
p=(char*)malloc(100);
strcpy(p,"www.zhiguoxin.cn");
printf("*p:%s&(*p):0x%x
",p,&p);
}
intmain()
{
char*str="www.baidu.cn";
getmemory(str);
printf("str:%s&str:0x%x
",str,&str);
free(str);
return0;
}

按照我們一般人的的想法,結(jié)果應(yīng)該是:

p:www.zhiguoxin.cn&p:xxxxxxx
str:www.zhiguoxin.cn&str:xxxxxxx

但是實(shí)際上結(jié)果是多少?

cd01f5f2-cd96-11ec-bce3-dac502259ad0.png

完全沒(méi)有變化,為了徹底解決這個(gè)問(wèn)題,畫(huà)了一個(gè)圖,希望大家能夠看的更加清楚一點(diǎn)。

cd224b22-cd96-11ec-bce3-dac502259ad0.png

從這里可以看出來(lái),在分配內(nèi)存后,strp就分道揚(yáng)鑣了,而str也還是指向www.baidu.cn。

如何修改呢?正確的是啥樣的?

#include
#include
#include

voidgetmemory(char**p)
{
*p=(char*)malloc(100);
strcpy(*p,"www.zhiguoxin.cn");
printf("*p:%s&(*p):0x%x
",*p,&(*p));
}
intmain()
{
char*str="www.baidu.cn";
getmemory(&str);
printf("str:%s&str:0x%x
",str,&str);
free(str);
return0;
}

編譯運(yùn)行,發(fā)現(xiàn)沒(méi)問(wèn)題。

cd3d40ee-cd96-11ec-bce3-dac502259ad0.png

達(dá)到了我們想要的目的,字符串也得到了正常的拷貝。

如何解釋?zhuān)?/span>

函數(shù)中參數(shù)都是傳值,傳指針本質(zhì)上也是傳值,只不過(guò)它的值是指針類(lèi)型罷了。如果想要改變?nèi)雲(yún)?nèi)容,則需要傳該入?yún)⒌牡刂?,通過(guò)解引用修改其指向的內(nèi)容。

這里的str的值就是*p的值,是多少?它們都是一個(gè)指針,就是保存的是一個(gè)地址,地址是多少?地址就是使用動(dòng)態(tài)分配內(nèi)存malloc函數(shù)分配的100字節(jié)的首地址。然后又使用strcpy()函數(shù)將hello world拷貝到*p里面。

這里面就涉及到了二級(jí)指針,首先str毫無(wú)疑問(wèn)是一個(gè)指針變量對(duì)吧?那么&str是啥?理所當(dāng)然就是一個(gè)指針的指針吧,就是地址的地址。

所以,我如果在某個(gè)地方申請(qǐng)了一塊內(nèi)存,如果想得到這塊內(nèi)存的首地址,而此時(shí)我們又定義了一個(gè)指針變量,想讓這個(gè)指針來(lái)保存我們申請(qǐng)內(nèi)存你的首地址,就必須要傳入這個(gè)指針的地址,即指針的指針(二級(jí)指針)而不是傳入這個(gè)指針。

至于原因上面的例子已經(jīng)非常清楚的講解了原因。

下面接著回到我們最開(kāi)始的創(chuàng)建函數(shù)的任務(wù)句柄。在開(kāi)始之前我們?cè)侔焉厦娴暮瘮?shù)封裝一下。

cd5b026e-cd96-11ec-bce3-dac502259ad0.png
#include
#include
#include

typedefchar*TaskHandle_t;

voidgetmemory(TaskHandle_t*p)
{
*p=(char*)malloc(100);
strcpy(*p,"www.zhiguoxin.cn");
printf("*p:%s&(*p):0x%x
",*p,&(*p));
}
intmain()
{
TaskHandle_tstr;
getmemory(&str);
printf("str:%s&str:0x%x
",str,&str);
free(str);
return0;
}

沒(méi)啥大不了的,就是就是給char*起了一個(gè)別名而已,讓下面的代碼看起來(lái)更加順暢一寫(xiě)。

cd6d9c9e-cd96-11ec-bce3-dac502259ad0.png

這樣對(duì)比一下是不是很清楚了呢?這樣一來(lái)我們創(chuàng)建任務(wù)時(shí)候這個(gè)任務(wù)句柄就保存的是我們TCB控制塊這個(gè)結(jié)構(gòu)體的首地址了,知道了一個(gè)任務(wù)的TCB控制塊首地址的話(huà),那么這個(gè)任務(wù)的所有信息我是不是都知道了。是的,就是這么奇妙。通過(guò)指針的指針,二級(jí)指針來(lái)轉(zhuǎn)換一下。

審核編輯 :李倩


聲明:本文內(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)注

    0

    文章

    183

    瀏覽量

    20525
  • FreeRTOS
    +關(guān)注

    關(guān)注

    14

    文章

    499

    瀏覽量

    66941
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    616

    瀏覽量

    29506

原文標(biāo)題:干貨|FreeRTOS中的任務(wù)句柄到底是什么意思?

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    AI代碼之爭(zhēng)忽略了什么

    人工智能的興起讓 COBOL 重新成為話(huà)題焦點(diǎn),市場(chǎng)上也涌現(xiàn)出不少號(hào)稱(chēng)能轉(zhuǎn)換遺留代碼、破解現(xiàn)代化難題的工具。但關(guān)鍵在于厘清這究竟意味著什么,以及它不包含什么。代碼轉(zhuǎn)換是一回事,平臺(tái)現(xiàn)代化則完全是另一碼事。這兩者并非同概念,而橫
    的頭像 發(fā)表于 03-02 15:20 ?322次閱讀

    燒錄芯片與IC復(fù)制是一回事嗎?深度解析芯片燒錄原理

    本文明確區(qū)分了“芯片燒錄”與“IC復(fù)制”的本質(zhì)差異。燒錄是為芯片寫(xiě)入程序的合法生產(chǎn)步驟,核心是通過(guò)物理高壓將數(shù)據(jù)寫(xiě)入芯片存儲(chǔ)單元。而IC復(fù)制則是未經(jīng)授權(quán)的逆向破解與克隆行為。文章著重解釋了現(xiàn)代芯片的加密機(jī)制(如熔斷熔絲),該機(jī)制允許授權(quán)寫(xiě)入但阻止非法讀取,從而保護(hù)知識(shí)產(chǎn)權(quán)。旨在為工程師在量產(chǎn)和選型時(shí)提供清晰的技術(shù)與法律邊界認(rèn)知。
    的頭像 發(fā)表于 01-06 13:12 ?338次閱讀

    pcb絲印是怎么一回事

    發(fā)表于 12-02 13:47

    請(qǐng)問(wèn)Keil中的map文件到底是什么意思?

    Keil中的map文件到底是什么意思?里面是如何進(jìn)行相關(guān)執(zhí)行操作的
    發(fā)表于 11-25 06:59

    單片機(jī)和嵌入式,到底是什么關(guān)系?

    的關(guān)系:什么是單片機(jī)?什么是嵌入式?它們到底是不是一回事?先說(shuō)說(shuō)大家最先聽(tīng)說(shuō)的那個(gè)詞——單片機(jī)(MCU)。單片機(jī),全稱(chēng)是MicrocontrollerUnit,顧名思
    的頭像 發(fā)表于 11-14 10:28 ?1512次閱讀
    單片機(jī)和嵌入式,<b class='flag-5'>到底是</b>什么關(guān)系?

    PCBA和SMT總混淆?文講透電子制造的“組裝”與“貼片”核心差異

    站式PCBA加工廠家今天為大家講講PCBA和SMT之間有什么區(qū)別和聯(lián)系?PCBA和SMT之間的區(qū)別和聯(lián)系。PCBA和SMT并非一回事,它們?cè)陔娮又圃祛I(lǐng)域中分別代表不同的概念和工藝階段,具體區(qū)別如下
    的頭像 發(fā)表于 11-03 09:51 ?795次閱讀

    ART-Pi中啟用外部flash是在哪里配置了qspi的引腳呢?

    ,于是我去查找QSPI的io是有復(fù)用引腳的,也就是說(shuō)不是絕對(duì)的像晶振連接那樣子的io固定就是那兩個(gè)。那么想請(qǐng)教下各位這個(gè)qspi的配置是怎么一回事呢。 提前謝謝各位佬!
    發(fā)表于 10-10 06:09

    用更簡(jiǎn)便的方法構(gòu)建強(qiáng)大邊緣 AI 應(yīng)用

    作者: Stephen Evanczuk 設(shè)計(jì)款基于傳感器的簡(jiǎn)單物聯(lián)網(wǎng) (IoT) 設(shè)備并非難事,但要打造具備邊緣機(jī)器學(xué)習(xí) (ML) 處理能力的聯(lián)網(wǎng)設(shè)備則完全是另一回事。NXP
    的頭像 發(fā)表于 10-04 18:30 ?1662次閱讀
    用更簡(jiǎn)便的方法構(gòu)建強(qiáng)大邊緣 AI 應(yīng)用

    量子機(jī)器學(xué)習(xí)入門(mén):三種數(shù)據(jù)編碼方法對(duì)比與應(yīng)用

    在傳統(tǒng)機(jī)器學(xué)習(xí)中數(shù)據(jù)編碼確實(shí)相對(duì)直觀:獨(dú)熱編碼處理類(lèi)別變量,標(biāo)準(zhǔn)化調(diào)整數(shù)值范圍,然后直接輸入模型訓(xùn)練。整個(gè)過(guò)程更像是數(shù)據(jù)清洗,而非核心算法組件。量子機(jī)器學(xué)習(xí)的編碼完全是另一回事。傳統(tǒng)算法可以直接消化
    的頭像 發(fā)表于 09-15 10:27 ?774次閱讀
    量子機(jī)器學(xué)習(xí)入門(mén):三種數(shù)據(jù)編碼方法對(duì)比與應(yīng)用

    別再搞混了!安規(guī)Y電容的「耐溫」和「溫度特性」根本不是一回事

    選錯(cuò)個(gè)電容,可能毀掉整個(gè)產(chǎn)品 在日常的電源設(shè)計(jì)和EMC整改中,安規(guī)Y電容是我們?cè)偈煜げ贿^(guò)的元器件。但你是否曾經(jīng)困惑過(guò): datasheet上標(biāo)注的125℃和Y5V到底有什么區(qū)別? 很多工程師容易將
    發(fā)表于 09-08 09:54

    IEC 到底是什么?為什么它能影響全球?

    IEC 到底是什么?為什么它能影響全球?
    的頭像 發(fā)表于 09-04 17:07 ?3567次閱讀

    今天帶你來(lái)看看防逆流是什么?光伏防逆流又是怎么一回事

    、什么是光伏防逆流 分布式光伏發(fā)電系統(tǒng)中,發(fā)電量超本地負(fù)載耗電量時(shí),多余電能可能逆向流入電網(wǎng),此為 “逆流”。光伏防逆流即借助技術(shù)手段與設(shè)備,防止或限制這種逆流。安科瑞+武陳燕
    的頭像 發(fā)表于 05-14 16:40 ?2578次閱讀
    今天帶你來(lái)看看防逆流是什么?光伏防逆流又是怎么<b class='flag-5'>一回事</b>?

    文給你講透!DA板卡到底是什么?它和主板又有哪些不同?

    大家好,我是老王,在電子行業(yè)干了十幾年,今天我就用“大白話(huà)”給大家講講DA板卡到底是啥,它和咱們常說(shuō)的“主板”有啥區(qū)別。文章里會(huì)穿插些表格和實(shí)際案例,保證你讀完不僅能懂,還能跟朋友吹牛!
    的頭像 發(fā)表于 04-24 16:48 ?2403次閱讀
    <b class='flag-5'>一</b>文給你講透!DA板卡<b class='flag-5'>到底是</b>什么?它和主板又有哪些不同?

    讓人欲罷不能樹(shù)莓派貪吃蛇掌機(jī)!

    在RaspberryPi上玩復(fù)古游戲是一回事,但從零開(kāi)始編程制作游戲則是另層面的挑戰(zhàn)。不過(guò),創(chuàng)客兼開(kāi)發(fā)者ArnovSharma的這個(gè)項(xiàng)目將兩者完美結(jié)合。他使用我們最?lèi)?ài)的單板計(jì)算機(jī),打造了款能運(yùn)行
    的頭像 發(fā)表于 03-25 09:21 ?768次閱讀
    讓人欲罷不能樹(shù)莓派貪吃蛇掌機(jī)!