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

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

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

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

任務句柄是到底是怎么一回事

h1654155149.6853 ? 來源:電子工程世界 ? 作者:電子工程世界 ? 2022-05-07 11:19 ? 次閱讀
摘要學過用過FreeRTOS的人都知道,在創(chuàng)建任務時候我們都要定義一個任務句柄,這個任務句柄有啥含義?書上的解釋是任務創(chuàng)建成功以后會返回此任務的任務句柄,這個句柄就是任務的堆棧參數(shù)就用來保存這個任務句柄。其他API函數(shù)可能會使用到這個句柄。

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

1、創(chuàng)建一個任務

動態(tài)創(chuàng)建一個任務

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

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

參數(shù):

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

返回值:

  • pdPASS:任務創(chuàng)建成功。pdPASS宏定義為1
  • errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY:任務創(chuàng)建失敗,因為堆內(nèi)存不足!

在創(chuàng)建一個任務時一般都會在程序開頭都有這三個宏定義

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

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

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

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

創(chuàng)建任務是時傳入的是一個指針?

是一個指針嗎?

不是,是一個指針的指針。

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

什么是指針的指針?

這些問題都需要搞明白你才能解決這個問題?

二、二級指針

正好前兩天看到了這樣一篇文章,里面有一道C語言的題可以引用來解釋我們今天的問題,我們一起來看一下

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

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

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

很顯然是不可以的。

為了使大家看的更清楚,代碼簡單修改一下

#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é)果應該是:

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

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

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

完全沒有變化,為了徹底解決這個問題,畫了一個圖,希望大家能夠看的更加清楚一點。

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

從這里可以看出來,在分配內(nèi)存后,strp就分道揚鑣了,而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;
}

編譯運行,發(fā)現(xiàn)沒問題。

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

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

如何解釋?

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

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

這里面就涉及到了二級指針,首先str毫無疑問是一個指針變量對吧?那么&str是啥?理所當然就是一個指針的指針吧,就是地址的地址。

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

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

下面接著回到我們最開始的創(chuàng)建函數(shù)的任務句柄。在開始之前我們再把上面的函數(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;
}

沒啥大不了的,就是就是給char*起了一個別名而已,讓下面的代碼看起來更加順暢一寫。

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

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

審核編輯 :李倩


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

    關注

    0

    文章

    182

    瀏覽量

    19762
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62181
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28371

原文標題:干貨|FreeRTOS中的任務句柄到底是什么意思?

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

收藏 人收藏

    評論

    相關推薦

    Laird Eccosorb吸波材料的應用案例

    抑制Retimer芯片在22GHz的雜訊是一回事,準確提供所需解決方案的理想特征參數(shù)又是另外一回事。閱讀下文,了解家全球網(wǎng)絡技術制造商如何在對比九種不同的仿真結(jié)果后,最終選擇Laird Eccosorb GDS(經(jīng)過萊爾德實驗
    的頭像 發(fā)表于 10-24 09:55 ?348次閱讀
    Laird Eccosorb吸波材料的應用案例

    功放和運放到底是什么區(qū)別?

    想請問下功放和運放到底是什么區(qū)別,感覺只要接個小負載,運放的輸出電流也可以很大啊?到底有什么區(qū)別啊
    發(fā)表于 09-10 07:00

    運放的輸入電容到底是什么?

    我想請問下運放的輸入電容到底是什么?
    發(fā)表于 09-04 06:52

    使用Tina ti仿真ths3201時,發(fā)生源兩路輸入則輸出不對是怎么回事

    使用Tina ti仿真ths3201時,發(fā)生源兩路輸入則輸出不對,單路輸入結(jié)果卻正確。另外,我下載該仿真模型時,模型沒有更新,因為更新之后,ths3201無效,無法正常仿真。請問這是怎么一回事呢?
    發(fā)表于 08-14 06:21

    塊板子上,摘取焊接了四次不同的比較器,比較器型號都是tlv3702,相同測試條件但結(jié)果卻不同,為什么?

    測試,在該板上摘取焊接了四個同型號比較器,四次測試結(jié)果偏差很大,且我自己排除了焊接問題,求問這是怎么一回事;個人猜測這幾個比較器的功耗不同,只有功耗極低的比較器才能達到電路的理論輸出,輸出電壓低的,功耗大,如果是我猜測的這個原因,那是不是我買的是假貨;如果不是,請問有別的什么原因嗎?
    發(fā)表于 08-06 06:14

    傳感器和變送器是一回事?變送器和傳感器有什么差異

    變送器和傳感器有什么差異 變送器和傳感器在測量與控制系統(tǒng)中的角色不同,各自有其特定的功能和應用場景。下面是詳細的對比 1. 定義 傳感器: 傳感器是種檢測裝置,能感受到被測量的信息,并能將檢測
    的頭像 發(fā)表于 06-20 08:46 ?1270次閱讀

    數(shù)字工廠與智能工廠是一回事

    本文旨在探討數(shù)字工廠與智能工廠的概念、特點、技術應用及其在現(xiàn)代制造業(yè)中的作用。 、引言 隨著科技的不斷進步,制造業(yè)正經(jīng)歷著前所未有的變革。數(shù)字工廠和智能工廠作為現(xiàn)代制造業(yè)的兩個重要概念,正逐漸
    的頭像 發(fā)表于 06-07 15:10 ?665次閱讀

    用STM8L152使用個矩陣鍵盤,信號直處于低電平狀態(tài)的原因?

    想用STM8L152 使用個矩陣鍵盤,根據(jù)的是行列掃描的方法,但是代碼調(diào)試過程中只能檢測到列的信號(高低電平)的變化,信號直處于低電平狀態(tài),這是怎么一回事?哪里出問題了?
    發(fā)表于 05-15 08:31

    電機驅(qū)動芯片和電機控制芯片是一回事

    電機驅(qū)動芯片和電機控制芯片在電機系統(tǒng)中各自扮演著重要的角色,但它們并不是一回事
    的頭像 發(fā)表于 04-08 11:15 ?1650次閱讀

    電機和馬達是一回事嗎 馬達和電機有什么區(qū)別

    電機和馬達是一回事嗎 馬達和電機有什么區(qū)別 電機和馬達是一回事嗎? 電機和馬達是同個名詞的不同表達方式。在些地區(qū),特別是中國,人們更傾向于使用“電機”來指代電動機,而在其他地區(qū)則更
    的頭像 發(fā)表于 02-03 09:19 ?1w次閱讀

    SMT生產(chǎn)過程中拋料是怎么一回事呢?具體需要怎么解決?

    在SMT工廠,生產(chǎn)過程中經(jīng)常會遇到拋料的情況,甚至有時候拋料會非常嚴重,影響到生產(chǎn)效率,那么拋料是怎么一回事呢?具體需要怎么解決?
    的頭像 發(fā)表于 01-24 10:42 ?2914次閱讀

    M453VG6AE中ISP Flash和LDROM是不是一回事?它們基地址分別是什么?

    M453VG6AE芯片中 ISP Flash 和 LDROM 是不是一回事?它們基地址分別是什么?
    發(fā)表于 01-17 06:31

    密封性和氣密性:并非同一回事

    在工程和制造領域,我們經(jīng)常聽到“密封性”和“氣密性”這兩個詞匯,它們似乎有著相似的含義,但實際上并不是同一回事。為了更好地理解這兩個概念,我們需要對它們進行些區(qū)分。圖片來源于網(wǎng)絡,侵權可刪首先
    的頭像 發(fā)表于 01-12 11:05 ?1142次閱讀
    密封性和氣密性:并非同<b class='flag-5'>一回事</b>

    開關磁阻電機和交流磁阻同步電機是一回事嗎?

    大家好,最近項目中遇到款德國的KAISER無勵磁磁阻同步電機,花了段時間研究后,還是有幾個基本的概念沒有搞明白: 1.開關磁阻電機和交流磁阻同步電機是一回事嗎? 2.各自的控制器是什么呢?普通的變頻器能實現(xiàn)嗎?
    發(fā)表于 01-10 06:35

    java本身自帶的SPI擴展機制是怎么一回事

    八股文背多了,相信大家都聽說過個詞,SPI 擴展 。
    的頭像 發(fā)表于 01-02 10:32 ?689次閱讀
    java本身自帶的SPI擴展機制是怎么<b class='flag-5'>一回事</b>?
    主站蜘蛛池模板: xxxx日本在线播放免费不卡| 日本一区视频在线观看| 国产激情三级| 日本日b视频| 2022第二三四天堂网| 337p欧洲亚洲大胆艺术| 在线播放一区二区精品产| 欧美激欧美啪啪片免费看| 天天谢天天干| 韩国视频在线播放| 国产人免费人成免费视频| 久久国产乱子伦精品免费午夜| 国产美女视频黄a视频免费全过程 国产美女视频黄a视频全免费网站 | 天天干天天操天天做| 亚洲视频在线一区二区三区| 刺激一区| 久久手机视频| 国产小视频网站| 亚洲精品视频区| 第四色男人天堂| 九色综合网| 亚洲欧美精品成人久久91| 韩剧天堂| 在线欧美三级| 色多多视频在线观看| 天天射天天搞| 种子在线搜索| 日本黄色大片免费观看| 天天干天天草天天射| 最好看的2019中文字幕1 | 日本xxxⅹ69xxxx护士| 日韩天堂| 免费一级片在线观看| 亚洲成人自拍| 午夜影院毛片| 99热这里精品| 99视频网站| 精品国产柚木在线观看| 丁香激情综合网| 亚欧乱色束缚一区二区三区| 久久e|