Using memory partitions
圖 F7.5 是一個演示如何使用 uC/OS-II 中的動態分配記憶體功能,以及利用它進行消息傳遞的例子。程式清單 L7.8 是這個例子中兩個 task 的 pseudo-code,其中一些重要程式的標號和圖 F7.5 中括弧內用數位標識的動作是相對應的。
第一個 task 讀取並檢查類比輸入量的值 (如氣壓、溫度、電壓等) ,如果其超過了一定的臨界值,就向第二個 task 發送一個消息。該消息中含有時間資訊、出錯的通道號和錯誤程式等可以想像的任何可能的資訊。
錯誤處理程式是該例子的中心。任何 task 、 ISR 都可以向該 task 發送出錯消息。錯誤處理程式則負責在顯示設備上顯示出錯資訊,在磁片上登記出錯記錄,或者啟動另一個 task 對錯誤進行糾正等
Figure 7.5 Using dynamic memory allocation
程式清單 L7.8 Scanning analog inputs and reporting errors
AnalogInputTask()
{
for (;;) {
for (所有的類比量都有輸入) {
讀入類比量輸入值; (1)
if (類比量超過臨界值) {
得到一個記憶體塊; (2)
得到當前系統時間 (以時鐘節拍為單位); (3)
將下列各項存入記憶體塊: (4)
系統時間 (時間戳記);
超過臨界值的通道號;
錯誤程式;
錯誤等級;
等.
向錯誤佇列發送錯誤消息; (5)
(一個指向包含上述各項的記憶體塊的指標)
}
}
延時 task, 直到要再次對類比量進行採樣時為止;
}
}
ErrorHandlerTask()
{
for (;;) {
等待錯誤佇列的消息; (6)
(得到指向包含有關錯誤資料的記憶體塊的指標)
讀入消息, 並根據消息的內容執行相應的操作; (7)
將記憶體塊放回到相應的記憶體分割區中; (8)
}
}
2009年6月12日 星期五
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言