分享到plurk 分享到twitter 分享到facebook

版本 cecc53b23fbf9c35ed927bf2d2c8319b926d9ee0

embedded/2015q1w7

Changes from cecc53b23fbf9c35ed927bf2d2c8319b926d9ee0 to e0cd1d98a3c64413967e889ca12d1704f77859d9

---
title: Week #6 (Mar 31) :: ARM and RTOS: Part II
toc: no
...

重大事項宣達
-------------------
* 分組

作業分析和反思
----------------------
* `Lab 39</embedded/Lab39>`_: Scheduling
  - `Adrian Huang<https://www.facebook.com/adrian.huang.10>`_ 的 `共筆<https://embedded2015.hackpad.com/Lab39-Cross-Development-2015Q1-Week3-DOv3d3rwi8b>`_ 與 `GitHub<https://github.com/AdrianHuang/freertos-basic/tree/new-task>`_
    + 建立每一Task所需要的資料結構  (使用heap_ww.c):
      - XBlockLink:此結構用來記錄每一個區塊 (Block) 大小、下一個未被佔用的區塊大小與下一個未被佔用的區塊實體記憶體位址,其大小為 12 個位元組。由於使用 ARM Cortex-M3 架構,其對齊位元組為 8 個位元組。所以經過調整,一律使用 16 個位元組配置記憶體。
      - TCB (Task Control Block):大小為 80 個位元組
      - Stack:呼叫 xTaskCreate() 時,usStackDepth 設定 128,所以 stack 大小為 512 bytes (128 * 4)
      - 每建立一個 task,需佔用 624 位元組。且記憶體大小為 17K,當剩下的記憶體空間低於 624 位元組時,就無法再建立 task
    + task 建立/刪除後,一直在追蹤記憶體的變化,意外發現 vPortFree() 有個 bug,請見`重現和修正的方式<https://github.com/AdrianHuang/freertos-basic/commit/320274ddfd42cf20377e6f0b4e38bf146db9c877>`_

  - 曾柏翔的 `共筆<https://embedded2015.hackpad.com/hw2-Ka5oXguvUje>`_
    + 針對優先序高的task執行太久而佔據 CPU,提出的改進方法:在 task 中加入 ``vTaskDelayUntil(&xLastWakeTime, xFrequency);``,當執行到一段時間後,就會主動釋出執行時間給別的 task 使用,從而避免因為一個 task 執行太久而造成 shell 來不及回應的問題