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

版本 b4b50d88d06cc2dbfbd3143a8b8cd65fe0989d6b

Lab5: RTOS modifications

預期目標

  • 複習第二周第三周,與第五周進度
  • 實際整合一個既有的程式碼到 FreeRTOS 環境中
  • 體驗系統整合的流程及技術挑戰
  • 為期末專題累積若干可重用的軟體元件

預先準備

  • 安裝 lcov
    • sudo apt-get install lcov
  • 取得最新 Labs 內容 (與之前 Lab3 操作相似):

.. code-block:: prettyprint

git clone git://gitcafe.com/embedded2012/Labs.git
cd Labs/Lab-5

Code Coverage

  • GNU code coverage tool gcov is generally used to dump the coverage data when the program exits
    • for some embedded systems or for server processes you need a means to dump coverage data of particular situations, i.e. when a client connects.
  • Code quality analysis for embedded systems
    • Memory management with Valgrind
    • Code coverage testing with Gcov
  • Code Quality Analysis Toolset for Embedded Systems
  • Using gcov and lcov
  • 新酷音輸入法系統的核心函式庫 (libchewing) 分析
    • http://kanru.info/chewing/lcov-check

執行時期輸出 gcov 資料

.. code-block:: prettyprint

cd Lab-5/coverage make make run gcov hello

  • Reference output

.. code-block:: prettyprint

File ’hello.c’ Lines executed:100.00% of 15 hello.c:creating ’hello.c.gcov’

  • Analyze gcov output

.. code-block:: prettyprint

tail hello.c.gcov
  • Reference output

.. code-block:: prettyprint

1:
34: new_action.sa_flags = 0;
-:
35:
1:
36: sigaction(SIGUSR1, NULL, &old_action);
1:
37: if (old_action.sa_handler != SIG_IGN)
1:
38:
sigaction (SIGUSR1, &new_action, NULL);
-:
39:
-:
40: /* infinite loop - to exemplify dumping coverage data while program runs */
186275468151:
41: for(n = 0; ; n++)
372550936302:
42:
i++;
-:
43:}

作業

  • 研讀檔案系統 (romfs) 的實做方法
    • Lab-5/filesys
  • 要求整合檔案系統到 FreeRTOS 中,並在 UART 顯示檔案系統 (romfs) 中 test.txt 的內容
  • 最終預期在 filesys 目錄下,當 make qemuauto 執行後,會自動啟動 QEMU + GDB + FreeRTOS,並在 5 秒後 kill QEMU/GDB,最終的終端機畫面為 test.txt 的檔案內容
    • 在 QEMU 啟動的參數可改為 -serial stdio,即可要求 QEMU 將 UART 導向到 Host 端的 stdio
  • 提示:
    • 可在 Host 端先行測試與驗證以下檔案:
      • romfs.c
      • hash-djb2.c
      • filesystem.c
      • fio.c
    • 會需要修改到 linker script 以及 SRAM 的配置
    • 會需要補充基本的標準 C 函式,讓系統得以運作