版本 b9c6ff972fb6262fb88b0c014b6435a2ceef6710
User/school510587
Bo-Cheng Jhan
修課心得
很高興爭取到機會修習「進階嵌入式系統開發與實作」課程。我在課程內容裡見到「軟體」、「硬體」、「團隊合作」等三大概念,與實際打造一個電子產品雛形息息相關。這門課有許多地方迥異於系上其他課程,如作業、報告、演講等都有其特色,在這門課裡我們覺得自己更加接近畢業後要面對的職場環境。
一個能使用的電子產品內軟體不可或缺,就算如電子手錶那樣簡單的架構也要計較軟體的品質。一般軟體方面分成有或沒有作業系統,有作業系統就被視為較複雜的電子產品,如手機和許多控制系統,今年上半年 jserv 主持的大學部作業系統課程就針對「火星探測號」中作業系統的問題深入探討。作業系統提供排班、檔案系統以及 I/O 的管哩,我們在學期初體驗過 rtenv, 它展現了最基礎的排班和 I/O 管理方法,它有實作 task 的 running, ready, waiting 等執行狀態,也有 ready queue, waiting queue, 優先權等觀念。之後又接觸另一個 FreeRTOS, 它把 task 需要從作業系統取得支援的功能包裝成函式,軟體上看起來好讀許多,並且多了 semaphore, 讓各 task 間能同步交換資料、共享資源而不會因為執行順序不固定造成無法預期的錯誤。透過期初幾個作業的訓練,我們對作業系統有了較實際的概念,它不再只是活在恐龍本及考試卷上的理論,而是人手能創造與改善的軟體。
在我們研究作業系統同時,課程進度也朝 ARM 架構的介紹前進。課堂上鉅細靡遺的展示了 ARM 三種架構,還指出各具特色的地方,並安排作業練習讓我們修改 inline assembly 及 polling, interrupt-based I/O, 我們學習到如何在組合語言上針對硬體架構將軟體最佳化,以及中斷的適當使用能減少 CPU 的運算負擔。在 rtenv 裡有二個有趣的檔案 syscall.s 與 context_switch.s, 展示了 “system call” 和 “context switch” 在硬體中的實現,從 stack 中存取 user/kernel space 的狀態,以及當 task 發出 system call 時引發的軟體中斷,作業系統能透過特定暫存器與其進行溝通等運作方式。另外我們練習 malloc/free, 有機會接觸臨界的空間需求,進而了解硬體架構中的 BSS section, 並學會如何使用 linker script 操縱底層配置的細節。我們終於知道計算機組織這門課的價值何在,擺脫以往它就是背下一個 CPU 架構和特定元件的運作規則等著考試時默寫出來這樣的刻板印象。
這門課的期末專題希望大家真的打造出電子產品雛形,過程中一定牽涉以上軟體及硬體的概念,還有機會使用外接儀器如感測器、伺服馬達等,甚至如 LED 這樣簡單的設備有需要也必須外接解決,在這方面我們非常需要電機人才替我們處理。而產品必定有個應用領域,比如四軸飛行器的設計必須採用物理、機械、材料等理論以 model 出系統所面對的現實世界與應對之道。課堂一開始強調,現在是一個「打群架」的年代,大家必須懂得結合不同領域人才,發揮整合與創新的效果,而自己身邊的同學往往是最佳的合作對象,體認如何利用自己與他人的長才遠比互相比較功課、學歷、薪水來得重要。
這門課為了讓全體同學體會何謂「打群架」,特別將作業採取 open source 的開發方式,讓大家能互相觀摩與學習,這在以往的程式設計稱為「抄襲」而不被接受。我自認是個不太清楚如何靠自己的設備去摸索網路和文件取出有用的資料,但藉著此開發方式,我從多位同學的 code 中知道如何實現作業要求,並在無形中磨練自己閱讀 code 的能力,並透過多方比較得知哪種是較精簡有效率的做法,加入自己的分析之後實作在作業中並公開。我非常欣賞如此的開發方式,我能利用它打破身體先天缺陷帶來的限制,讓我有與大家共同成長的感覺,而且未來軟體開發將以此為主流,適應這樣的模式將使自己更早與世界街軌。
同學之間的觀摩有另一個途徑及報告。透過準備報告,我們對該主題更深入了解,如我這組選擇的 ADC, 就牽涉了奠基方面的採樣及轉換、資訊方面的 data alignment 及 DMA, 還有機械方面的外接應用,我和各位組員彼此交換自己的知識,吸取他人的專業,這是在別的課堂上難以見到的。並且今年創新規定禁用 PPT, 讓我知道原來報告也能不要用投影片,我身體的限制讓我無法讀寫投影片,我很希望找到有人支持報告不一定要用投影片才能為人接受。
最後,讓我感到遺憾的是,課堂上精采的業界演講我還是無法參與其中,因為演講大量倚賴圖片、影音等多媒體,對於只有文字世界的我而言造成和在場聽眾有極大的資訊落差,我只能靠結束後同學口述或閱讀參考文獻來彌補這方面的不足,永遠無法體會某些「實際」的印象,如我知道 3D 印表機能複製零件,但從未親自見過它如何複製,那 3D 印表機就只能在我心裡留下概念而沒有實際印象,當然包含之前其他演講與展示,我也不敢要求觸碰那些硬體以免損壞或受傷。
我期許這門課結束前真的能與夥伴做出電子產品雛型,因為這對我而言將是進入資訊系後的重大突破,代表我不再只侷限於寫給「助教」用的文字介面軟體,而是有形且替人服務的產品。我對目前盲用硬體有許多建議和看法,但苦無了解及修改的方法,希望我在課程結束後擁有摸索這方面資訊與技術的能力,進而改變我的周圍,影響整個世界。
期末提案
和 justin1534 合作,開發 opensource 的整合型低成本機械手臂。此專案的最大優勢在於業界所需,其他說明請見 justin1534 的 wiki: http://wiki.csie.ncku.edu.tw/User/justin1534
點字中文顯示器:目前中文在盲人點字中屬於極度弱勢語言,點字顯示器很多只支援英文。因此希望用點字零件組裝一個顯示器能夠處理中文。此專案對我更有用但更不可行,因為作品只有我一人受用,且視障者市場狹隘無短期經濟價值,找不到合作夥伴,而且補助 6000 只能購買我目前只用的點字顯示器上點字