--- title: Lab40: Scheduling (2015q1 Week #4) toc: no ... 預期目標 ------------ - 分析 `FreeRTOS`_ 排程行為 - 學習 ARM Cortex-M3 架構並且理解 `SysTick`_ - 設計出一個具體而微的 FreeRTOS 視覺化機制 Grasp ------- .. image:: /embedded/Lab40/grasp-n-os.png * `Grasp`_ 是個能夠追蹤、視覺化,以及測量即時系統中執行時期行為的工具,很容易擴充。 - 使用案例: mutex 視覺化輸出 .. image:: /embedded/Lab12/mutex.png - 使用案例: RTOS scheduling 視覺化輸出 .. image:: /embedded/Lab12/hsf.png Grasp 安裝 ---------------- * 抓取預先編譯的程式碼 (x86/linux): 假設和 `Lab-39`_ 的工作目錄一樣是 ``workspace`` .. code-block:: prettyprint sudo apt-get install zip wget http://www.win.tue.nl/san/grasp/grasp_linux.zip unzip grasp_linux.zip * 如果你的系統是 x86_64,需要額外安裝 i386 版本的 ``libxft2`` 和 ``libxss1`` 套件才能執行 Grasp,方法如下: .. code-block:: prettyprint sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install libxft2:i386 libxss1:i386 * 執行 Grasp、點選 ``examples`` 目錄並且挑選副檔名為 ``.grasp`` 的檔案,之後觀察視覺化輸出 .. image:: /embedded/Lab40/grasp.png 取得 Visualizer 並測試 ------------------------------ * Visualizer 需要 GDB,所以需要事先準備好 .. code-block:: prettyprint sudo apt-get install gdb-arm-none-eabi * 假設 `Lab-39`_ 的 ``freertos-basic`` 和 ``qemu_stm32`` 都放在 ``workspace`` 目錄 - ``cd worksapce`` * 取得原始程式碼並且執行 .. code-block:: prettyprint git clone git://github.com:embedded2015/visualizer.git || git clone https://github.com/embedded2015/visualizer.git cd visualizer make qemuauto * 可以見到 idle task 和相關圖例 * 運作原理 - 讀取 `SysTick`_ 中 current & reload 的數值,用來計算更精確的時間單位 - 增加追蹤執行狀態的 break point,藉以了解程式目前運作的位置 + 增加程式 context switch 的 Hook + 將程式在 idle 時的 function 也列入追蹤 檢查清單 -------------- * 是否理解 ARM Cortex-M 的 interrupt 處理機制? - 檔案 `main.c`_ 的 ``USART2_IRQHandler`` - 檔案 `startup_stm32f10x_md.s`_ 的 ``g_pfnVectors`` * 是否清楚 system register 的作用? - 檔案 `main.c`_ 中,位址開頭為 0xe0 的常數或巨集: ``NVIC_INTERRUPTx_PRIORITY``, ``get_reload()`` / ``get_current()`` / ``get_time()`` (與 SysTick 相關) 參考作業要求 ------------------ * 改寫 ``main.c`` 並且引入兩個週期性 Task,使其得以使用 CPU 資源,並且讓 grasp 予以視覺化 * 試著用程式碼自動計算出 context switch 的時間成本 挑戰題 ---------- * 說明為何視覺化系統得以運作,以及目前實做的限制與改進方案 * 自動測試 `USART`_ 的中斷處理 (對應於 ``USART2_IRQHandler``),並且透過 grasp 視覺化 繳交作業 ------------ - 截止日期: * Mar 28, 2015 (含) 之前 - 更新開發過程到共筆網站: `Lab 40 / 作業共筆`_,需要標注自己的 ID * 將符合作業提案的程式碼,提交到自行 fork 的 repository: https://github.com/embedded2015/visualizer * 注意: 要記得 fork `visualizer`_ 參考資料 --------------- * `Grasp: Tracing, Visualizing and Measuring the Behavior of Real-Time Systems`_ * `RTOS Visualization`_ * `RTOS context switch`_ * `Context switching time`_ * Cortex M3 SysTick Explained - `Part I`_, `Part II`_