對于設計嵌入式系統,其中一個步驟是調度。
我知道可以通過使用一些函式來測量執行時間。例如,我可以micro()在 Arduino 中使用來測量開始時間和結束時間之間的時間。
但是我有一個問題,如何定義被稱為截止日期的期限?我希望我的系統使用最早截止日期優先 (EDF)、速率單調調度 (RMS) 或兩者兼而有之。
我怎樣才能找到正確的號碼并證明這個系統是可調度的?給亂數似乎不是設計的好方法,我認為應該有一種方法來定義或計算周期數。
(我已經搜索了這個資訊1小時,但我找不到任何有用的資訊。任何提示或評論對我都有好處。)
*更新
所以目前我正在上課,嵌入式軟體系統。我的教授要求我們使用 Arduino 模擬 TinkerCAD 上的所有內容。我們必須創建佇列卡車并基于此系統實施部分行為。例如,一個排行駛的三輛卡車,如果卡車遇到人、停車標志或動物會怎樣?也許領先的卡車會向后面的卡車發送制動資訊,重新啟動發動機,然后繼續在排中行駛。
舉個書上的例子,我們已經知道了執行時間,那我們怎么知道現在我們應該把5作為任務1的周期,把7作為任務2的周期呢?當人們在設計一個系統時,他們如何知道該時期將放置什么數字?
所以我的問題是,當我設計一個系統時,我如何知道或計算可能用于制動、重新啟動發動機和保持排行的周期數?
uj5u.com熱心網友回復:
EDF 可調度性的數學在 https://en.wikipedia.org/wiki/Earliest_deadline_first_scheduling 中進行了描述,對于 RMS 的描述也在https://en.wikipedia.org/wiki/Rate-monotonic_scheduling中。這一切都是理論上的,而在現實世界中,它往往更具經驗性。
怎樣才能知道正確的號碼...
目前尚不清楚您指的是什么“數字”,但如果您的意思是如何計算特定任務的“截止日期”,那并不是可調度性測驗產生的真正結果。而是在給定任務的最大執行時間的情況下確定是否所有任務都將在截止日期前完成。
理論模型還做出了許多假設,例如周期性任務和可忽略的背景關系切換開銷。但是事件驅動系統通常很少或沒有周期性任務。以微秒級滿足回應期限不適合定期調度。在這種情況下,您必須同時使用最壞情況執行時間和最壞情況事件率。
uj5u.com熱心網友回復:
這似乎是一個非常廣泛的問題,因為您要問的問題很多,并且參考了多種調度演算法。我可以嘗試回答您的第一個問題:您必須了解系統的使用方式以及用戶期望什么,才能確定特定任務的截止日期或所需期限。
例如,對于監視人類手指按下的按鈕狀態的任務,每 10 毫秒(每秒 100 次)監視一次可能沒問題,因為人類不能很快地按下或松開按鈕。
我不知道您所指的那些花哨的調度演算法,但是對于許多應用程式來說,只處理主回圈中的每個任務就足夠了,然后嘗試設計您的主回圈,以便迭代總是在幾毫秒內完成。
不幸的是,我不知道如何證明主回圈將在特定時間運行。看起來這應該是你的編譯器的作業來幫助你證明這一點,但我不知道有任何流行的嵌入式編譯器甚至試圖這樣做。所以我們在實踐中能做的最好的事情就是測量運行時間。
對于任何需要快速運行或比主回圈運行更頻繁的任務,請考慮使用中斷,并仔細設定中斷優先級(如果您的系統支持)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/420352.html
標籤:
下一篇:如何生成二維陣列的逐行排列?
