日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...

發(fā)布時間:2025/3/12 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

接著上一講

奔騰的心:FreeRTOS 從入門到精通5--詳解任務管理上?zhuanlan.zhihu.com

在這一講中我將要介紹任務的運行模式,同時與可編程控制器(PLC)以及安卓系統(tǒng)的運行模式進行比較。我在德國讀書時專業(yè)是嵌入式開發(fā),工作后從事的是西門子PCS7過程系統(tǒng)的編程,業(yè)余學習了安卓開發(fā)。在學習的過程中,我逐漸意識到單片機,PLC和智能手機本質上上都是一類控制器,很多對于系統(tǒng)開發(fā)的理念都是相近互通的,基于此便產生一種想法,想在介紹FreeRTOS的任務管理時,同時對比下PLC和安卓的任務管理機制。

首先,我們先看一下FreeRTOS的任務狀態(tài)的轉化圖

FreeRTOS的任務狀態(tài)轉化圖

其中每個狀態(tài)的含義如下

  • 阻塞狀態(tài)(Blocked)當任務等待某個事件或信號的時候處于此狀態(tài)
  • 掛起狀態(tài)(Suspended)當任務被vTaskSuspend()函數(shù)禁止運行的時候處于此狀態(tài)
  • 就緒狀態(tài)(Ready)當任務沒有被阻塞或者掛起等待運行的時候處于此狀態(tài)
  • 運行狀態(tài)(Running)當任務被內核調度執(zhí)行的時候處于此狀態(tài)

在系統(tǒng)初始化所有任務被創(chuàng)建的時候,任務一開始都處于就緒狀態(tài)(Ready),然后內核調度器開始調度首先選擇執(zhí)行優(yōu)先級最高的任務,此時被執(zhí)行的任務處于運行狀態(tài)(Running)。當任務執(zhí)行延時命令或者等待某個同步事件的時候便交出了自己的運行權,此時將處于阻塞狀態(tài)(Blocked)。在任務運行的時候,它可以通過vTaskSuspend()函數(shù)將其他任務或者自身掛起進入掛起狀態(tài)(Suspended)。被掛起的任務只有通過vTaskResume()函數(shù)恢復成就緒狀態(tài)(Ready)。

接下來,讓我們看看程序在可編程邏輯器(PLC)中的運行機制。

PLC程序的運行機制

在PLC中,一般任務都是寫好后順序執(zhí)行的。在讀取輸入階段,PLC掃描所有輸入端子,并將各輸入端的通/斷狀態(tài)存入相對應的輸入映像寄存器中,刷新輸入映像寄存器的值。CPU對用戶程序按順序進行掃描,逐條執(zhí)行程序指令。在用戶程序執(zhí)行完畢后,PLC將輸出映像寄存器中的通/斷狀態(tài)送到輸出鎖存器中,通過輸出端子驅動用戶輸出設備或帶動負載。在這里可以把PLC中運行的任務看作是優(yōu)先級相同的任務,任務之間不會互相搶占運行的權利,內核調度器類似合作式調度(Co-operative Scheduling)- 按照預設的順序先后執(zhí)行控制任務。因為PLC程序的運行都是可預測的,所以PLC更適合對穩(wěn)定性實時性要求更高的工業(yè)領域。

最后,讓我們看看安卓系統(tǒng)中任務的運行模式,有個專有名詞叫生命周期。在安卓編程中,每個活動(Activity)包含一個畫面和對應的程序,這里可以類比成一個任務。活動通過OnCreate()函數(shù)創(chuàng)建,通過OnStart()函數(shù)啟動,當被其他活動搶占之后會通過onPause()函數(shù)暫停并通過onStop()函數(shù)停止(此時活動將在手機屏幕上消失)。被停止的活動通過OnRestart()函數(shù)重新運行,或者通過onDestroy()函數(shù)被銷毀。

活動的生命周期

FreeRTOS中任務的運行狀態(tài)機制和安卓編程中活動的生命周期比較相似。FreeRTOS通過xTaskCreate()函數(shù)創(chuàng)建任務,相當于安卓的onCreate()函數(shù);FreeRTOS通過vTaskSuspend()函數(shù)掛起任務,相當于安卓的onPause()函數(shù);FreeRTOS通過vTaskResume()函數(shù)恢復任務到就緒狀態(tài),相當于安卓的onResume()函數(shù);FreeRTOS通過vTaskDelete()函數(shù)刪除任務,相當于安卓的onDestroy()函數(shù)。通過這些相似之處可以看到,學好FreeRTOS對于安卓開發(fā)也有裨益,而玩轉了嵌入式和安卓編程,融會貫通硬件和軟件開發(fā),你將立于紫禁城之巔,成為每個產品經理最缺的那個程序員大神。

FreeRTOS的調度算法及配置

搶占式時間片調度(Prioritized Pre-emptive Scheduling with Time Slicing)

這是比較通用的調度方式,上一篇提到的溫度檢測系統(tǒng)采用的就是這種方式。內核調度器在每個時間片結束的時候執(zhí)行一次,選擇處于就緒狀態(tài)的任務中優(yōu)先級最高的任務置于下一個時間片執(zhí)行。如果優(yōu)先級相同的話則交替執(zhí)行。此時,FreeRTOSConfig.h頭文件的設置如下:

configUSE_PREEMPTION(允許搶占) 1

configUSE_TIME_SLICING(采用時間片) 1

搶占式無時間片調度(Prioritized Pre-emptive Scheduling without Time Slicing)

在這種調度方式下,因為沒有采取時間片,所以調度器的執(zhí)行開銷會比較小。如果兩個任務的優(yōu)先級相同的話,在搶占式時間片調度下,兩個任務會交替運行;然而在搶占式無時間片調度下,當前運行的任務會一直運行,直到它進入阻塞或者掛起狀態(tài),另一個相同優(yōu)先級的任務才會運行。高優(yōu)先級的任務會搶占低優(yōu)先任務。此時,FreeRTOSConfig.h頭文件的設置如下:

configUSE_PREEMPTION(允許搶占) 1

configUSE_TIME_SLICING(采用時間片) 0

合作式調度(Co-operative Scheduling)

這種調度模式下,當前執(zhí)行任務將會一直運行,同時高優(yōu)先級的任務不會搶占低優(yōu)先級任務。內核調度只會在當前執(zhí)行任務進入阻塞狀態(tài)的時候才會執(zhí)行,選擇處于就緒狀態(tài)的任務中優(yōu)先級最高的任務進行執(zhí)行。此時,FreeRTOSConfig.h頭文件的設置如下:

configUSE_PREEMPTION(允許搶占) 0

configUSE_TIME_SLICING(采用時間片) 任意

在下一講中,我將介紹FreeRTOS中隊列管理的知識。隊列管理(Queue Management)提供了任務之間,任務和中斷之間的通訊機制。

奔騰的心:FreeRTOS 從入門到精通7--隊列管理?zhuanlan.zhihu.com

總結

以上是生活随笔為你收集整理的edtext 从右边开始输入 安卓_FreeRTOS 从入门到精通6--详解任务管理下(对比PLC,安卓)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。