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

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

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

3天內不再提示

如何利用FreeRTOS的多任務機制優化程序呢?

冬至子 ? 來源:月月望歸鳥 ? 作者:K.Fire ? 2023-11-13 11:12 ? 次閱讀

1

創建任務

創建任務時使用的函數如下:

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //函數指針,任務函數
const char * const pcName, //任務的名字
const configSTACK_DEPTH_TYPE usStackDepth,//棧大小,單位為word,10表示40字節
void * const pvParameters, //調用任務函數時傳入的參數
UBaseType_t uxPriority, //優先級
TaskHandle_t * const pxCreatedTask );//任務句柄,以后使用它來操作這個任務

參數說明:

  • pvTaskCode:函數指針,可以簡單地認為任務就是一個C函數。它稍微特殊一點:永遠不退出,或者退出時要調用"vTaskDelete(NULL)"
  • pcName:任務的名字,FreeRTOS內部不使用它,僅僅起調試作用。長度為:confifigMAX_TASK_NAME_LEN
  • usStackDepth:每個任務都有自己的棧,這里指定棧大小。單位是 word ,比如傳入 100 ,表示棧大小為 100 word ,也就是 400 字節。最大值為 uint16_t 的最大值。怎么確定棧的大小,并不容易,很多時候是估計。精確的辦法是看反匯編碼。
  • pvParameters:傳入參數,調用 pvTaskCode 函數指針時用到:pvTaskCode(pvParameters)
  • uxPriorit:優先級范圍:0~(confifigMAX_PRIORITIES – 1) 數值越小優先級越低, 如果傳入過大的值,xTaskCreate會把它調整為(confifigMAX_PRIORITIES – 1)
  • pxCreatedTask:用來保存 xTaskCreate 的輸出結果:task handle 。以后如果想操作這個任務,比如修改它的優先級,就需要這個 handle 。如果不想使用該 handle ,可以傳入 NULL 。
  • 返回值:成功:pdPASS ;失敗:errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY( 失敗原因只有內存不足 )
  • 注意:文檔里都說失敗時返回值是 pdFAIL ,這不對。pdFAIL 是 0 , errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 是 -1 。

實例:

void Task1Function(void * param)
{
  while (1)
  {
    printf("1");
  }
}
void Task2Function(void * param)
{
  while (1)
  {
    printf("2");
  }
}
xTaskCreate(Task1Function, "Task1", 100, NULL, 1, &xHandleTask1);
xTaskCreate(Task2Function, "Task2", 100, NULL, 1, NULL);

開啟任務調度:

vTaskStartScheduler();          //開啟任務調度

結果:

圖片

2

刪除任務

刪除任務使用的函數如下:

void vTaskDelete( TaskHandle_t xTaskToDelete );

參數說明:

  • xTaskToDelete:任務句柄,使用 xTaskCreate 創建任務時可以得到一個句柄,也可傳入NULL ,這表示刪除自己。
  • 句柄的實質就是這個任務結構體的指針,在FreeRTOS中任務的創建利用面向對象的思想,創建的一個個任務都是結構體,刪除任務的實質就類似于C語言中的free釋放內存

實例:

void vTask1( void *pvParameters )
{
const TickType_t xDelay100ms = pdMS_TO_TICKS( 100UL );
BaseType_t ret; 
/* 任務函數的主體一般都是無限循環 */
for( ;; ) 
{ 
/* 打印任務的信息 */ 
printf("Task1 is runningrn");
ret = xTaskCreate( vTask2, "Task 2", 1000, NULL, 2, &xTask2Handle ); 
if (ret != pdPASS) printf("Create Task2 Failedrn");
// 如果不休眠的話, Idle任務無法得到執行 
// Idel任務會清理任務2使用的內存
// 如果不休眠則Idle任務無法執行, 最后內存耗盡
vTaskDelay( xDelay100ms ); 
}

3

任務狀態

  • 當前正在進行的任務,是running狀態;其他所有任務都處于not running狀態
  • "not running"狀態還可以細分為:
    ready :就緒,隨時可以運行
    
      blocked :阻塞,該任務在等待某一事件發生
    
      suspended :掛起,該任務暫停休息
    

圖片

當創建任務并開始任務調度后,所有任務都處于Ready就緒狀態,系統隨機挑選一個任務Running,正在執行的任務可以使用vTaskSuspend函數使自己進入掛起狀態(傳入參數NULL或自己的句柄),也可以使其他任務進入掛起狀態(傳入參數為需要掛起任務的句柄),進入暫停狀態后,需要在別的任務執行過程中調用vTaskResume函數該任務才會重新進入Ready狀態;

在任務執行過程中,需要等待某個函數或事件的發生,則進入掛起狀態(Baocked),當等待的事件(可能是中斷或某個任務)發生后該任務才會恢復Ready狀態。

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

    關注

    180

    文章

    7614

    瀏覽量

    137714
  • FreeRTOS
    +關注

    關注

    12

    文章

    484

    瀏覽量

    62396
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27648
收藏 人收藏

    評論

    相關推薦

    RTOS的多任務機制應用演示

    的執行路徑。深入理解和實現RTOS深入理解和實現RTOS_連載5_多任務機制應用.pdf (247.18 KB )
    發表于 02-17 23:30

    基于 stm32 的 FreeRTOS 的詳細移植步驟及其多任務應用 精選資料分享

    目錄本文簡介:學習 FreeRTOS 原理,在 STM32 下完成一個基于 FreeRTOS多任務程序,執行 3 個周期性 task ,具體任務
    發表于 08-03 07:21

    在STM32下完成FreeRTOS多任務程序開發

    基于在STM32下完成FreeRTOS多任務程序開發 序言 二.項目說明三.實戰過程 1)實驗器材 2)開始實戰 3)任務實現 4)效果展示四. 結語 序言(一)
    發表于 08-09 07:27

    如何去實現基于stm32的FreeRTOS多任務程序

    基于 stm32 的 FreeRTOS多任務程序實現一、什么是FreeRTOS二、AHT20數據采集原理電路繪制三、FreeRTOS
    發表于 08-24 07:45

    FreeRTOS多任務系統的相關資料推薦

    目錄單片機各編程系統特點1、裸機系統(1)輪詢系統(2)前后臺系統2、多任務系統單片機各編程系統特點單片機編程中有裸機系統與多任務系統。裸機系統又分為輪詢系統和前后臺系統,FreeRTOS就是一種
    發表于 01-13 07:51

    如何在STM32下完成一個基于FreeRTOS多任務程序

    任務要求:在STM32下完成一個基于FreeRTOS多任務程序,執行3個周期性task;目錄一.介紹FreeRTOS二.
    發表于 01-17 07:10

    如何利用FreeRTOS程序完成多任務功能?

    如何利用FreeRTOS程序完成多任務功能?
    發表于 01-18 06:43

    如何在STM32下完成一個基于FreeRTOS多任務程序

    文章目錄前言一、添加溫濕度采集模塊二、基于FreeRTOS多任務程序總結前言此次,本菜鳥有兩個任務1.在菜鳥入門5的stm32最小系統中添加 AHT20數據采集原理電路(溫濕度傳感器
    發表于 02-10 08:02

    什么是多任務系統?FreeRTOS任務與協程簡析

    FreeRTOS學習之FreeRTOS任務基礎知識轉行小白一枚,通過博客記錄自我學習,望更多博友多多指點,感激不盡!RTOS系統的核心就是任務管理,學習RTOS系統主要是為了使用RTO
    發表于 02-18 06:38

    介紹一種基于FreeRTOS的STM32多任務程序

    基于FreeRTOS的STM32多任務程序一、材料準備二、 FreeRTOS移植FreeRTOS是什么F
    發表于 02-21 06:00

    keil下的FreeRtos多任務程序學習

    keil下的FreeRtos多任務程序學習目標手動移植FreeRtos(以STM32F103為例)直接使用野火的模板學習目標學習FreeRTOS
    發表于 02-21 06:14

    基于消息驅動的多任務操作機制

    本文對多任務操作機制與傳統的單任務操作機制進行了比較,分析了多任務系統中數據交換的方法,特別是目前最為流行的用消息驅動方式實現的系統。結合程
    發表于 05-14 16:56 ?0次下載

    51單片機多任務機制的實現策略研究

    從操作系統實現多任務機制的原理入手,分析了51單片機實現多任務機制的基本條件,論述了5l單片機實現多任務控制的二種方案。
    發表于 09-19 17:26 ?159次下載
    51單片機<b class='flag-5'>多任務</b><b class='flag-5'>機制</b>的實現策略研究

    stm32基于FreeRTOS多任務程序

    目錄實驗環境實驗目的實驗步驟代碼:實驗環境1.野火STM32MINI開發板2.keil5實驗目的在STM32下完成一個基于FreeRTOS多任務程序,執行3個周期性task,具體任務
    發表于 12-07 10:36 ?14次下載
    stm32基于<b class='flag-5'>FreeRTOS</b>的<b class='flag-5'>多任務</b><b class='flag-5'>程序</b>

    基于FreeRTOS的STM32多任務程序

    基于FreeRTOS的STM32多任務程序一、材料準備二、 FreeRTOS移植FreeRTOS是什么F
    發表于 12-27 18:38 ?28次下載
    基于<b class='flag-5'>FreeRTOS</b>的STM32<b class='flag-5'>多任務</b><b class='flag-5'>程序</b>
    主站蜘蛛池模板: 久久99爱爱| 最新国产精品视频免费看 | 奇米影视777四色米奇影院 | 天天色天天射综合网 | 特级黄色淫片 | 夜夜夜夜夜夜夜猛噜噜噜噜噜噜 | 亚色网站 | 六月丁香婷婷网 | 天天cao在线 | 亚洲成人在线电影 | 中文在线免费看影视 | 男人天堂资源站 | 四级毛片在线播放 | 一级三级黄色片 | 77788色淫网站女女免费视频 | 免费观看视频在线观看 | 国产自在自线午夜精品视频 | 九九热在线视频观看 | 日本一区二区三区视频在线 | 操碰视频在线观看 | 一区二区三区四区在线观看视频 | 成人亚洲综合 | 国产精品第九页 | 中文天堂在线www | 欧美人与动性视频在线观 | 毛片在线看免费版 | 草草影院私人免费入口 | 99干99| 色妞网| 天天综合网在线 | 午夜毛片视频高清不卡免费 | 无内丝袜透明在线播放 | 成人黄性视频 | 久久精品国产精品亚洲红杏 | 手机毛片在线 | 四虎4hu永久免费国产精品 | 在线免费色视频 | 国产紧缚jvid | 婷婷色综合久久 | 欧美一级欧美三级 | 国产老头和美女在线观看 |