--- title: Lab12: RTOS Visualization toc: no ... Information ------------------- - Provided by: Zhean Lin * GIT repository/branch: https://gitcafe.com/embedded2013/Labs/tree/SOL-12 心得 ------- * 這個實作與 [Lab 8](/embedded/Lab8) 的差異除了圖形輸出,在於資料的蒐集是在程式裡,以及使用 semihost 來做輸出,僅僅因為想練習 * 不過開發與編譯的成本上升,而且到頭來還是得透過 server 輸出。唯一的好處大概是在有儲存裝置的環境中可以單獨運行。 * 這次實驗多半是單純的苦工,問題很少 * 其中一個是如何讓 semihost 的回傳值用 C 函數回傳 - 因為無法在 C 中直接 return r0,但不寫return的話,gcc 會在程式結尾補上mov r0, r3,造成結果錯誤 - 解決的方式是呼叫 bkpt 後直接 bx 跳回,並用 naked 屬性避免直接跳離而未還原新增的 stack frame 視覺化呈現 ---------------- * Git 裡的程式並未包含 Mutex Task、Semaphore 以及中斷追蹤 - 如有需要請打上 Lab-12 目錄下的 patch 以重現圖中的效果 ![](/embedded/Sol12/visual.png) * 灰色是正在執行的任務,而斜紋代表佔據 mutex * switch in 與 switch out 之間會有小間隔,代表 context switch,但是太細而幾乎看不見 * 最底下的小方框代表 semaphore,橘色是等待,綠色是釋出 * 右邊的視窗是系統中的佇列,裡頭的數字代表存入該資料的任務,對照任務名稱冒號前的數字