--- title: Week #5 (Oct 15) :: ARM: Toolchain and Peripherals toc: no ... 重大事項宣達 ------------------ * 從 Week #5 開始,課程的進度會加速,以便讓同學有更多時間接觸硬體,並且思考期末專題的相關事宜。考慮對繳交作業較慢的同學,安排「家庭訪問」,也就是到所屬學校實驗室或指定地點,陪同學寫程式,趕上進度 * 稍候會發信件告知,各位同學繳交作業和程式開發的狀況,給予建議的同時,也會約時間討論,請同學不要覺得有困擾,既然都花時間來到課堂,不妨再多花一點時間,想辦法做出在大學生涯中,值得紀念的作品出來呢?無論日後是否會走嵌入式系統這個領域,相信有個完整的開發經驗,對人生事物經驗多少會有幫助 * Week #6 將發放 STM32F4-Discovery 硬體並介紹 CNC: http://www.slideshare.net/nylon7/linux-cnc-overview * Week #7 進行期中報告分組 - 硬體週邊 - (飛行) 運動模式和演算法 - CNC / 3D Printing 影片 ------ * [Dale Dougherty: 我們都是製造家](http://www.ted.com/talks/lang/zh-tw/dale_dougherty_we_are_makers.html) - 美國是製造家建立的 —— 好奇、熱情的業餘發明家因為改造物品的愛好而引領出全新的產業。《Make》雜誌發行人 Dale Dougherty 在 TED@ MotorCity 中說,所有人本質上都是製造家,並展示一些很酷的新工具,如 Arduino 開放源碼硬體平台、價格合理的 3D 印表機,甚至還有 DIY 衛星 * [MorpHex](https://www.youtube.com/watch?v=HuC6q9kbryw) - Boca Bearing Company’s Innovation Contest Winner - blog: [Zenta - Robotic Creations](http://zentasrobots.com/) * [Bringing the Incredible Bionic Man](https://www.youtube.com/watch?v=2B7Iu15NPDM) - 由全球 17 家廠商協力打造的「仿生人」(Bionic Man) 在美國登場,這具仿生人以蘇黎世大學社會心理學家 Bertolt Meyer 的臉孔為範本,擁有 60% 到 70% 的真實人體功能,包括人造腎臟、心臟、血液和循環系統 - 身高185公分,可以在脊椎傷患輔助行走器具的幫助下行走、坐下和站立。它有一顆利用電子幫浦運作的心臟,會跳動並流通人工血液,而人工血液就像真正的血液一樣含有氧氣;一具可植入的人工腎臟則能取代當今洗腎設備的功能 - source: [「仿生人」紐約亮相 185cm擁近7成人體功能](http://www.ettoday.net/news/20131012/281281.htm) 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 ![](/embedded/unit-test.jpg) 教材 ------ * [ARM Architecture, Instructions, Toolchain/ABI](/embedded/arm-lecture-1.pdf) * [ARM Hardware and Interrupts](/embedded/arm-lecture-2.pdf)