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

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

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

聯(lián)系方式.txt

共1個(gè)文件

這個(gè)是全網(wǎng)最詳細(xì)的STM32項(xiàng)目教學(xué)視頻。
第一篇在這里:
視頻在這里


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

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

在這里插入圖片描述

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

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

  • 就緒狀態(tài)

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

如果當(dāng)前沒(méi)有其他處于運(yùn)行狀態(tài)的任務(wù),處于就緒狀態(tài)的任務(wù)進(jìn)入運(yùn)行狀態(tài)。

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

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

  • 運(yùn)行狀態(tài)

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

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

  • 阻塞狀態(tài)

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

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

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

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

  • 掛起狀態(tài)

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

 

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

相關(guān)推薦

方案定制

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