版本 27d4c5d75a5e30bb92ff447fee367e1045fd4f44
Changes from 27d4c5d75a5e30bb92ff447fee367e1045fd4f44 to current
---
title: Veck(蕭奕凱)
categories: User
...
veck 蕭奕凱
------------------
**自我介紹 Introduction**
- 政治大學資訊科學系碩士班 102 級 (National ChengChi University, Department of Compter Science)
- LinkedIn:https://tw.linkedin.com/in/veckhsiao
- GitHub:https://github.com/fbukevin
- LinkedIn:[https://tw.linkedin.com/in/veckhsiao ](https://tw.linkedin.com/in/veckhsiao)
- GitHub:[https://github.com/fbukevin ](https://github.com/fbukevin)
- Email:fbukevin@gmail.com
- 通勤方式:(高鐵學生方案:NT. 740)
- ↓ 09:36 629 HSR Taipei Kingdom to Tainan City
- ↑ 21:15 756 HSR Tainan City to Taipei Kingdom
作業 Lab
============
- Lab38:ARM Cross-Development Environment
- 驗證 `Introduction to ARM Architecture <https://docs.google.com/presentation/d/1cFBRICktpVQAOLzE5eDKD-OM4ckJuncFsn39Wg8aLZI/edit#slide=id.p14>`_ 簡報內容
- 驗證 [Introduction to ARM Architecture ](https://docs.google.com/presentation/d/1cFBRICktpVQAOLzE5eDKD-OM4ckJuncFsn39Wg8aLZI/edit#slide=id.p14) 簡報內容
- 學習 GNU Toolchain
- 使用 QEMU 作為指令集模擬器
- `Hackpad <https://embedded2014.hackpad.com/Week2-Lab38-goDHyn1QVA5>`_/`GitHub <https://github.com/fbukevin/arm-lecture>`_
- [Hackpad ](https://embedded2014.hackpad.com/Week2-Lab38-goDHyn1QVA5)/[GitHub ](https://github.com/fbukevin/arm-lecture)
- 作業狀況: 完成基本作業要求,並於此次作業中練習了 GCC 的相關用法(例如怎麼下 GCC Tag),並且學習了 ARM 基本語法以及 AMR 與計算機組織學過的 MIPS 有何差異
- Lab39:FreeRTOS
- 體驗一個具體而微的 MCU 程式開發過程,使用 GNU Toolchain
- 藉由 QEMU 模擬環境,嘗試控制週邊 (STM32 USART) 並觀察其行為
- 接觸 `FreeRTOS </embedded/freertos>`_
- `Hackpad <https://embedded2015.hackpad.com/Week3-Lab39-ni3tzoIax7Y>`_/`GitHub <https://github.com/fbukevin/freertos-basic>`_
- 接觸 [FreeRTOS ](/embedded/freertos)
- [Hackpad ](https://embedded2015.hackpad.com/Week3-Lab39-ni3tzoIax7Y)/[GitHub ](https://github.com/fbukevin/freertos-basic)
- 作業狀況:學習使用 QEMU 模擬 STM32,成功將 FreeRTOS 以 QEMU 模擬器啟動,實現將一個作業系統移植到嵌入式開發版上的目標,並且完成作業要求,能夠新建立 task 以及了解 shell 的運作和擴增功能, 還有就是學習到裸機(bare-metal machine)的實際概念,即便是採用 C 語言開發出來的 FreeRTOS 也不具備 I/O,需要自己處理,認識到輕量化的 C 標準函式庫 newlib,可以達到前述目的,另外學習到了 semihosting 的概念(用模擬器時沒很有感覺,後來真的 porting 才知道就是一直以來覺得很酷的『用電腦連線到裝置去操作裝置』)
.. image:: /veckLab39.png
![](/veckLab39.png)
- Lab40:Scheduling
- 分析 `FreeRTOS </embedded/freertos>`_ 排程行為
- 學習 ARM Cortex-M3 架構並且理解 `SysTick <http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0179b/ar01s02s08.html>`_
- 分析 [FreeRTOS ](/embedded/freertos) 排程行為
- 學習 ARM Cortex-M3 架構並且理解 [SysTick ](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0179b/ar01s02s08.html)
- 設計出一個具體而微的 FreeRTOS 視覺化機制
- `Hackpad <https://embedded2015.hackpad.com/Week4-Lab40-jZmJ9A1pfYD>`_/`GitHub <https://github.com/fbukevin/visualizer>`_
- [Hackpad ](https://embedded2015.hackpad.com/Week4-Lab40-jZmJ9A1pfYD)/[GitHub ](https://github.com/fbukevin/visualizer)
- 作業狀況:因為大一的邏輯設計沒有學很深,所以等於是複習了 tick 的概念,了解到電腦機械的計時方式,在這個作業中研究了 tick 轉換為 human-readable 時間的作法,並且延續 Lab 40,進一步研究了 task scheduling 的議題,以及採用 grasp 進行 scheduling 的視覺化
.. image:: /veckLab40-1.png
![](/veckLab40-1.png)
但是 grasp 的使用上我覺得有點不便,因為之前在學習資料分析上使用過 Python 的 matplotlib 這個繪圖套件,加上這個 lab 的 log 資料集轉換程式就是用 Python 寫的,我就嘗試改寫該程式,加入這個套件,以下是 context switch 的成果
.. image:: /veckLab40-2.png
![](/veckLab40-2.png)
- Lab41:
- 善用春假,好好補強基礎觀念
- 你問我答:請利用共筆提問
- `Hackpad <https://embedded2015.hackpad.com/Week5-Lab41-1NfMvKE38g8>`_
- [Hackpad ](https://embedded2015.hackpad.com/Week5-Lab41-1NfMvKE38g8)
- 作業狀況:這個作業主要是讓我們利用春假時間,複習作業系統與計算機組織的重要觀念
- Lab42:
- 研究一個具體而微的作業系統
- 專案整合與程式碼移植
- 學習 GNU Toolchain,驗證 `Week #6 </embedded/2015q1w6>`_, `Week #7 </embedded/2015q1w7>`_, `Week #8 </embedded/2015q1w8>`_ 所學
- 學習 GNU Toolchain,驗證 [Week #6 ](/embedded/2015q1w6), [Week #7 ](/embedded/2015q1w7), [Week #8 ](/embedded/2015q1w8) 所學
- 實做 OS scheduler
- `Hackpad <https://embedded2015.hackpad.com/Week7-Lab42-yhKpwgmegwz>`_/`GitHub <https://github.com/fbukevin/mini-arm-os>`_
- [Hackpad ](https://embedded2015.hackpad.com/Week7-Lab42-yhKpwgmegwz)/[GitHub ](https://github.com/fbukevin/mini-arm-os)
- 作業狀況:這個作業我感覺到最大的學習點是了解 context switch 的最底層指令是如操作,然後就是這份作業完整的使用 ARM 組合語言來實作一個微型作業系統
.. image:: /veckLab42.png
![](/veckLab42.png)
期末專題 Final Project
======================
- 主題 Topic:FreeRTOS
- 工作 Work:延續 2014 年同學的成果,繼續延伸研究這個作業系統,並更新、補充與改善內容
- 成果 Presentation:
- `Wiki <http://wiki.csie.ncku.edu.tw/embedded/freertos>`_
- `GitHub <https://ggthub.com/Justinsanity/freertos-basic>`_
- [Wiki ](http://wiki.csie.ncku.edu.tw/embedded/freertos)
- [GitHub ](https://ggthub.com/Justinsanity/freertos-basic)
- 更新 FreeRTOS Kernel Version 到 8.2.1 (2014 年採用 8.0.0)
- 補充、修正 Wiki 原文內容,將原文不太通順,或是描述不清楚的敘述弄清楚,添加圖例或程式碼片段
- 增加研讀 Wiki 原文並輔以實驗 FreeRTOS 程式的問題集(問題討論二)
- 增加 FreeRTOS 移植到 STM32 的描述
- 設計新的 Profiling 方法
.. image:: /FreeRTOS_porting.jpg
![](/FreeRTOS_porting.jpg)
自我評量 (1 ~ 10) Self-assessment
=================================
我覺得我需要針對期中前與期中後的兩個階段進行評價:
- 期中前:9 分:我每週花了很多時間做作業與閱讀教材和查找相關資料,而我在期初考、作業、課程教材與期中報告的表現上是值得佳獎的,但是我認為我的表現是有缺陷的,因為我的作業都只是點到為止,其實我是有心去進一步實驗或做挑戰題,但時間有限,因此沒有辦法在學期間完成,至於專題的部份,我在期中報告中先是閱讀並且同步修改原文,協助增加與修正了不少內容,因此我覺得在其中報告的表現有達到我自己預期的要求,但其實我更希望的是能夠去實際 trace code 並且提早開始實驗程式,總結期中前的表現,我給自己不完美的 9 分
- 期中後:6 分:期中之後,我在論文上實作的部份開始加緊腳步,這導致我花的時間相對期中前少了許多,最重要的是專題的部份,我相信我在我們這組的專題進度上不論是繼續完成 wiki 的增修,或是最後 porting FreeRTOS 的部份,還有統整問題與整理討論結果都是貢獻最多的,然而也許是投入的時間不夠多,或是沒有掌控好組員能力與負擔,導致期末報告進度很差,沒有很完整的一個應用,只有勉強的討論出測量 context switch 的時間、porting 新版 FreeRTOS 與應用到 STM32F429 Discovery 如此而已,我對於期末報告的表現感到失望,因此我給自己勉強及格的 6 分
所以整體來說,我覺得我應得的分數是 (9 + 6)/2 = 7 分
心得 Review
=============
帶著一股熱誠,我年前知道 jserv 要在成大開課,就決定好要把握學生生涯最後一個學期,選擇來成大選修我很有興趣的嵌入式系統課程,這學期在論文與修課作業之間切換,我覺得我能夠花時間去思考問題與解決問題,我感到非常充實,我幾乎是早上七點出門,九點的高鐵,到成大時已經中午,這麼早起有時候會很疲憊,但是上課聽到老師口沫橫飛的講課,總是可以激起我對於學習程式技術,以及計算機科學研究的熱情。
期初考完的那一週,學弟李奇霖跟我說到他對我期初考答題方式感到很驚訝,這讓我對自己的學習成果有所肯定(我還欠一個期初考筆記一定會給,已在工程中),老師時常在課堂上強調的很多事情,我都很認同,期中有一個問題是我很待改善的,也就是你的實力有沒有辦法解決問題的能力?jserv 說如果你說你會 C 語言,但是一點『工程強度』都沒有,你就等於是不會,最直接體驗到這兩點是在期中報告時老師提點到應該要深入去 trace code 與思考為什麼要這樣設計程式,我覺得分析和思考設計方法很有趣。
我得承認有點虎頭蛇尾,但我不想讓我來成大的這十幾次車票浪費,因此即便期中後沒有像期中前投入那麼多的時間,我卻也是盡量設定好目標並持續學習,我未來會繼續研讀 FreeRTOS、STM32F4、ARM-CM4,持續更新 wiki 資料與 GitHub 實驗,畢竟這是相較於 Linux、Windows、Minix 等作業系統來說,我已經有投入時間並且相較起來 kernel 較小的 RTOS,雖然跌跌撞撞,但持續前進。