版本 bc957daf657050227de1972ee45490664732f867
Changes from bc957daf657050227de1972ee45490664732f867 to current
---
title: Lab23: RTOS
toc: no
...
預期目標
-------
* 在 QEMU 模擬的 STM32 環境中,嘗試執行 `FreeRTOS<http://www.freertos.org/>`_ 並且學習相關的操作
* 在 QEMU 模擬的 STM32 環境中,嘗試執行 rtenv 並且學習相關的操作
- 熟悉 Interrupt 處理機制
Interrupt Service Routine
-------------------------------------------
.. code-block:: prettyprint
git clone git://github.com/beckus/stm32_p103_demos.git
cd stm32_p103_demos
make
make uart_repeat_write_int_QEMURUN
* 注意 LED 和 USART 的變化
* 注意 LED 和 USART 的變化 (對照 Host 端和 QEMU serial0 輸出)
* 程式碼: demos/uart_repeat_write_int/main.c
* `FreeRTOS Tick<http://www.freertos.org/implementation/a00011.html>`_
* [FreeRTOS Tick](http://www.freertos.org/implementation/a00011.html)
SysTick
-------------
* context switch 的時間單位為 1 個 tick
* 讀取 SysTick 中 current & reload 的數值,用來計算更精確的時間單位 (小於tick)
- http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0179b/ar01s02s08.html
* 參考資訊: `Lab-8</embedded/Lab8>`_
* 參考資訊: [Lab-8](/embedded/Lab8)
- https://gitcafe.com/embedded2013/Labs/blob/SOL-8/Lab-8/freertos/gdbscript
參考作業要求
------------------
* 將 Lab22 的 FreeRTOS 程式碼中,替換所有 polling I/O 成 interrupt-based handling
* 將 rtenv 程式碼中,替換所有 polling I/O 成 nested interrupt-based handling
- 提示:檢查 shell 下字元輸入 / 輸出的正確性
- 提示:是否沒有修改的必要?
* 透過 SysTick,計算 USART Interrupt 處理之時間成本,並輸出於 Host 端
- 利用 semihost + GDB script
作業繳交方式
-------------------
* 更新作業提案到共筆網站: `Lab 23 / 作業共筆<https://embedded2013.hackpad.com/Lab23-RTOS-mxRAhTfjcJh>`_,需要標注自己的 ID,可參考 `Lab 20 / 作業共筆<https://embedded2013.hackpad.com/Lab20-GNU-Toolchain-zI6gzN3uv1c>`_ 格式
* 更新作業提案到共筆網站: [Lab 23 / 作業共筆](https://embedded2013.hackpad.com/Lab23-RTOS-mxRAhTfjcJh),需要標注自己的 ID,可參考 [Lab 20 / 作業共筆](https://embedded2013.hackpad.com/Lab20-GNU-Toolchain-zI6gzN3uv1c) 格式
* 在 Nov 1, 2013 前,將符合作業提案的程式碼,提交到自行 fork 的 repository
https://github.com/embedded2013/freertos
- https://github.com/embedded2013/rtenv