• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

22.1-任務(wù)的狀態(tài)-FreeRTOS項目實戰(zhàn)-任務(wù)的創(chuàng)建與執(zhí)行

02/11 08:37
1602
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

聯(lián)系方式.txt

共1個文件

這個是全網(wǎng)最詳細的STM32項目教學視頻。
第一篇在這里:
視頻在這里


STM32智能小車V3-STM32入門教程-openmv與STM32循跡小車-stm32f103c8t6-電賽 嵌入式學習 PID控制算法 編碼器電機 跟隨

V3:HAL庫開發(fā)、手把手教學下面功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、openmv視覺控制、電磁循跡、FreeRTOS、K210視覺智能車(更新中)、K230視覺智能車(更新中)、MSPM0G3507視覺智能車(更新中)

在這里插入圖片描述

講解任務(wù)的常見幾種 狀態(tài)和如何切換的

單核CPU的多任務(wù)運行機制可以得到,任何時刻,只能有一個任務(wù)占用CPU并運行,這個任務(wù)的狀態(tài)稱為運行(running)狀態(tài),其他未占用CPU的任務(wù)狀態(tài)稱之為非運行(notruning)狀態(tài)。非運行態(tài)又可以細分為三個狀態(tài),任務(wù)的各個狀態(tài)及其狀態(tài)之間的轉(zhuǎn)化關(guān)系如何:
在這里插入圖片描述
freeRTOS任務(wù)調(diào)度有搶占式和合作式兩種方式,一般使用基于任務(wù)優(yōu)先級的搶占式任務(wù)調(diào)度方法。任務(wù)調(diào)度的各種方法在后面有詳細介紹,這里我們以搶占任務(wù)調(diào)度方法講解。

  • 就緒狀態(tài)

任務(wù)被創(chuàng)建后就處于就緒狀態(tài),freeRTOS的任務(wù)調(diào)度器在基礎(chǔ)時鐘每次中斷是進行一次任務(wù)調(diào)度申請,根據(jù)搶占式任務(wù)調(diào)度的特點,任務(wù)調(diào)度的結(jié)果。

如果當前沒有其他處于運行狀態(tài)的任務(wù),處于就緒狀態(tài)的任務(wù)進入運行狀態(tài)。

如果就緒任務(wù)的優(yōu)先級高于或者等于當前任務(wù)的優(yōu)先級,處于就緒狀態(tài)的任務(wù)進入運行狀態(tài)。

如果就緒任務(wù)的優(yōu)先級低于當前任務(wù)的優(yōu)先級,就緒狀態(tài)的任務(wù)無法獲得CPU使用權(quán),繼續(xù)處于就緒狀態(tài)。

  • 運行狀態(tài)

在單核處理器上,占有CPU并運行的任務(wù)就處于運行狀態(tài)。處于運行狀態(tài)的高優(yōu)先級任務(wù)如果一直運行,將一直占用CPU,在任務(wù)調(diào)度時,低優(yōu)先級的就緒任務(wù)就無法獲得CPU的使用權(quán),無法實現(xiàn)多任務(wù)的運行。因此,處于運行狀態(tài)的任務(wù),應(yīng)該在空閑的時候讓出CPU的使用權(quán)。

處于運行狀態(tài)的任務(wù),有兩種主動讓出CPU 使用權(quán)的方法,一種是執(zhí)行函數(shù) vTaskSuspend進入掛起狀態(tài),另一種是執(zhí)行阻塞式函數(shù)進入阻塞狀態(tài)。這兩種狀態(tài)都是非運行狀態(tài),運行的任務(wù)就交出了CPU的使用權(quán),任務(wù)調(diào)度器可以使其他就緒狀態(tài)的任務(wù)進入運行狀態(tài)。

  • 阻塞狀態(tài)

阻塞(blocked)狀態(tài)就是任務(wù)暫時讓出CPU的使用權(quán),處于等待的狀態(tài)。運行狀態(tài)的任務(wù)可以調(diào)用兩類函數(shù)進入阻塞狀態(tài)。

一類是時間延遲函數(shù),如vTaskDelay())或vTaskDelayUntil()。處于運行狀態(tài)的任務(wù)調(diào)用這類函數(shù)后,就進入阻塞狀態(tài),并延遲指定的時間。延遲時間到了后,又進入就緒狀態(tài),參與任務(wù)調(diào)度后,又可以進入運行狀態(tài)。

另一類是用于進程間通信的事件請求函數(shù),例如,請求信號量的函數(shù) xSemaphoreTake().處于運行狀態(tài)的任務(wù)執(zhí)行函數(shù)xSemaphoreTake()后,就進入阻塞狀態(tài),如果其他任務(wù)釋放了信號量,或等待的超時時間到了,任務(wù)就從阻塞狀態(tài)進入就緒狀態(tài)狀態(tài)

在運行狀態(tài)的任務(wù)中調(diào)用函數(shù)vTaskSuspend(),可以將一個處于阻塞狀態(tài)的任務(wù)轉(zhuǎn)入掛起。

  • 掛起狀態(tài)

掛起(suspended)狀態(tài)的任務(wù)就是暫停的任務(wù),不參與調(diào)度器的調(diào)度。其他 3 種狀態(tài)的任務(wù)都可以通過函數(shù)vTaskSuspend()進入掛起狀態(tài)。處于掛起狀態(tài)的任務(wù)不能自動退出掛起狀態(tài),需要在其他任務(wù)里調(diào)用函數(shù)vTaskResume(),才能使一個掛起的任務(wù)變?yōu)榫途w狀態(tài)。

 

  • 聯(lián)系方式.txt
    下載

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時響應(yīng)!