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

Week #5 (Oct 15) :: ARM: Toolchain and Peripherals

重大事項宣達

  • 從 Week #5 開始,課程的進度會加速,以便讓同學有更多時間接觸硬體,並且思考期末專題的相關事宜。考慮對繳交作業較慢的同學,安排「家庭訪問」,也就是到所屬學校實驗室或指定地點,陪同學寫程式,趕上進度
  • 稍候會發信件告知,各位同學繳交作業和程式開發的狀況,給予建議的同時,也會約時間討論,請同學不要覺得有困擾,既然都花時間來到課堂,不妨再多花一點時間,想辦法做出在大學生涯中,值得紀念的作品出來呢?無論日後是否會走嵌入式系統這個領域,相信有個完整的開發經驗,對人生事物經驗多少會有幫助
  • Week #6 將發放 STM32F4-Discovery 硬體並介紹 CNC: http://www.slideshare.net/nylon7/linux-cnc-overview
  • Week #7 進行期中報告分組
  • 硬體週邊
  • (飛行) 運動模式和演算法
  • CNC / 3D Printing

影片

  • Dale Dougherty: 我們都是製造家
  • 美國是製造家建立的 —— 好奇、熱情的業餘發明家因為改造物品的愛好而引領出全新的產業。《Make》雜誌發行人 Dale Dougherty 在 TED@ MotorCity 中說,所有人本質上都是製造家,並展示一些很酷的新工具,如 Arduino 開放源碼硬體平台、價格合理的 3D 印表機,甚至還有 DIY 衛星

  • MorpHex
  • Boca Bearing Company’s Innovation Contest Winner
  • blog: Zenta - Robotic Creations

  • Bringing the Incredible Bionic Man
  • 由全球 17 家廠商協力打造的「仿生人」(Bionic Man) 在美國登場,這具仿生人以蘇黎世大學社會心理學家 Bertolt Meyer 的臉孔為範本,擁有 60% 到 70% 的真實人體功能,包括人造腎臟、心臟、血液和循環系統
  • 身高185公分,可以在脊椎傷患輔助行走器具的幫助下行走、坐下和站立。它有一顆利用電子幫浦運作的心臟,會跳動並流通人工血液,而人工血液就像真正的血液一樣含有氧氣;一具可植入的人工腎臟則能取代當今洗腎設備的功能
  • source: 「仿生人」紐約亮相 185cm擁近7成人體功能

Code Review

  • justin1534
  • 嘗試修改qemu模擬器,實作出以下功能:
    • 增加額外的 GPIO 腳位
    • 顯示出每 200 次變化間的變化狀態: ^ 表示高電位; - 表示 0 電位; v 表示負電位
    • 顯示出 PWM 的 ratio,即 duty cycle
  • 修改 rtenv 之 shell 並設計一個 PWM 自走車之控制界面
  • 自走車硬體已在之前課堂展示過,而作業提案則是在 QEMU 模擬,這樣軟體和硬體可同時改進,甚至預先評估更多的硬體週邊和軟體控制技巧。
  • GitHub: https://github.com/justin1534/rtenv/commits/car_test

  • fongwh1
  • 實作 malloc, 並用 GDB 去追蹤執行效果。利用 malloc,搭配 GDB Script 自動執行 ps,hello
  • 稍早我們在 rtenv 實作了 shell,同學們可透過預先定義的指令去查詢系統狀態,但無從驗證軟體的品質,這是嵌入式系統的大忌,而 Will 提出一個簡單有效的方法:用 GDB script 自動執行特定的指令 (不過還沒寫完)。此外,他還做了一個初步的 malloc 實作,其原理是先提供 sbrk 系統呼叫,然後藉由安排 heap 空間,做出單純的 first-fit 演算法。
  • GitHub: https://github.com/fongwh1/rtenv/commits/master

  • school510587
  • 用 GDB script 實現 rtenv 的 unit test,透過 Makefile 與 -batch 參數完成自動化測試。
  • 在以往我們常不停地改寫程式,過程中,有意無意地會有東西被改壞掉還不知道,而我們檢查的方式,可能只是透過一直修改程式碼或輸入的資料來測試。但是當程式越來越大,我們測試往往只專注在一個地方,此時所要測試的程式越來越多,不小心出錯的可能也越來越多。
  • 每改寫一次就是一次昂貴的人力檢查,最後程式就像一艘漏水的船,補了這裡,那裡卻又多了一個洞,船員像無頭蒼蠅一樣四處補洞,這樣的情況就是 Unit Test 能解決的問題。透過 Unit Test,每次寫的程式碼都交給程式自動測試,一來測試的速度很快,不管是一百次還是一千次,總比人工測試來得快速、正確。
  • 提案中的「自動測試」基本上就是 Unit test 概念的實踐,可先閱讀程式碼中 “test-” 開頭的那些 GDB script,然後再來思考如何有效的改進整體軟體品質
  • 「測試向量」(Test Vector) 或者「測試案例」(Test Cases) 的概念,就是程式碼單元的一對輸入與預期的輸出。單元測試作業將比較預期結果與實際結果,以產生相關報表
  • GitHub: https://github.com/school510587/rtenv/commits/gdb_test_case

教材