国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

摘要學過用過FreeRTOS的人都知道,在創建任務時候我們都要定義一個任務句柄,這個任務句柄有啥含義?書上的解釋是任務創建成功以后會返回此任務的任務句柄,這個句柄就是任務的堆棧此參數就用來保存這個任務句柄。其他API函數可能會使用到這個句柄。

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

1、創建一個任務

動態創建一個任務

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

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

參數:

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

返回值:

  • pdPASS:任務創建成功。pdPASS宏定義為1
  • errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY:任務創建失敗,因為堆內存不足!

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

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

要指定任務的優先級、任務的棧大小,以及任務的句柄。

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

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

創建任務是時傳入的是一個指針?

是一個指針嗎?

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

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

什么是指針的指針?

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

二、二級指針

正好前兩天看到了這樣一篇文章,里面有一道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;
}

按照我們一般人的的想法,結果應該是:

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

但是實際上結果是多少?

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

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

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

從這里可以看出來,在分配內存后,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;
}

編譯運行,發現沒問題。

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

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

如何解釋?

函數中參數都是傳值,傳指針本質上也是傳值,只不過它的值是指針類型罷了。如果想要改變入參內容,則需要傳該入參的地址,通過解引用修改其指向的內容

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

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

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

至于原因上面的例子已經非常清楚的講解了原因。

下面接著回到我們最開始的創建函數的任務句柄。在開始之前我們再把上面的函數封裝一下。

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

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

審核編輯 :李倩


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

    關注

    0

    文章

    183

    瀏覽量

    20525
  • FreeRTOS
    +關注

    關注

    14

    文章

    499

    瀏覽量

    66942
  • 變量
    +關注

    關注

    0

    文章

    616

    瀏覽量

    29506

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    AI代碼之爭忽略了什么

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

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

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

    pcb絲印是怎么一回事

    發表于 12-02 13:47

    請問Keil中的map文件到底是什么意思?

    Keil中的map文件到底是什么意思?里面是如何進行相關執行操作的
    發表于 11-25 06:59

    單片機和嵌入式,到底是什么關系?

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

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

    站式PCBA加工廠家今天為大家講講PCBA和SMT之間有什么區別和聯系?PCBA和SMT之間的區別和聯系。PCBA和SMT并非一回事,它們在電子制造領域中分別代表不同的概念和工藝階段,具體區別如下
    的頭像 發表于 11-03 09:51 ?795次閱讀

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

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

    用更簡便的方法構建強大邊緣 AI 應用

    作者: Stephen Evanczuk 設計款基于傳感器的簡單物聯網 (IoT) 設備并非難事,但要打造具備邊緣機器學習 (ML) 處理能力的聯網設備則完全是另一回事。NXP
    的頭像 發表于 10-04 18:30 ?1662次閱讀
    用更簡便的方法構建強大邊緣 AI 應用

    量子機器學習入門:三種數據編碼方法對比與應用

    在傳統機器學習中數據編碼確實相對直觀:獨熱編碼處理類別變量,標準化調整數值范圍,然后直接輸入模型訓練。整個過程更像是數據清洗,而非核心算法組件。量子機器學習的編碼完全是另一回事。傳統算法可以直接消化
    的頭像 發表于 09-15 10:27 ?774次閱讀
    量子機器學習入門:三種數據編碼方法對比與應用

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

    選錯個電容,可能毀掉整個產品 在日常的電源設計和EMC整改中,安規Y電容是我們再熟悉不過的元器件。但你是否曾經困惑過: datasheet上標注的125℃和Y5V到底有什么區別? 很多工程師容易將
    發表于 09-08 09:54

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

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

    用了 10 年網才明白!"帶寬”“寬帶”原來不是一回事!#帶寬 #寬帶 #數據采集卡 #模擬信號 #電路知識

    模擬信號
    西安阿爾泰電子科技發展有限公司
    發布于 :2025年07月23日 09:23:48

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

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

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

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

    讓人欲罷不能樹莓派貪吃蛇掌機!

    在RaspberryPi上玩復古游戲是一回事,但從零開始編程制作游戲則是另層面的挑戰。不過,創客兼開發者ArnovSharma的這個項目將兩者完美結合。他使用我們最愛的單板計算機,打造了款能運行
    的頭像 發表于 03-25 09:21 ?768次閱讀
    讓人欲罷不能樹莓派貪吃蛇掌機!