不知道你說的韌體是指什麼? 嵌入系有很多種:
* embedded linux
* 使用 rtos, 例如: freertos/vxworks
* bare metal 程式
* 手機
* 其他:
每種都有自己需要修練的功課, 但大概都脫離不了 c 語言,
除了 bare metal 都需要一些 os 相關知識,
也不是 bare metal 不需要 os 相關知識,
而是在 bare metal 要打造 os 機制蠻難的,
選一個 os 來用會比較容易。
雖然 OS 觀念大同小異, 但大同之中的小異就足夠讓人傷透腦筋。
細節很多, 提一些大方向。
embedded linux:
device driver
porting 到新 chip
user mode 應用程式
這 3 個各有其功課要修練, porting 到新 chip 大概是最難的,
一般人也比較沒有機會練習到, 大概連第0手資料也沒有。
device driver 由於和硬體有關, 會和硬體打交道, 需要使用
一些硬體相關工具, 示波器之類的。也要熟悉 linux device driver
架構。這個要練習比較麻煩, 書籍大概都過時, 需要自己看第0手資料,
也就是自己要看 device driver souce code, 然後想辦法把
自己要 porting 的硬體寫出來。
user mode 應用程式有很多書籍可以學習, 要看懂他們並不容易,
需要花費不少時間。
尤其是 signal/fork/thread 議題都很難搞懂,
但這只是其中一部分而已。
signal 議題可以看看這篇, 知道 signal 有哪些複雜的議題。
rtos 則是看使用那一套, 就需要去學習其中的用法,
使用起來應該會和 linux 有點差異。
有 ice 會比較容易 debug, 一般大概也會需要用 ice。
bare metal 程式也是很難, 需要從開機程式開始撰寫,
如果 chip 廠商有給範例或是相關函式庫, 也許會簡單一些。
但如果 c 基礎不夠, 可能有 bug 時, 不太容易找到問題。
會需要使用 ice 的經驗。
至於課本的演算法, 資料結構, 不能說不重要,
但可以從基本先熟悉, 不用著急學比較難的,
例如 queue, linked list, 基本 tree,
avl tree, rbtree 可以先緩點。
另外大概都會需要一些反組譯的能力,
所以還需要略懂該 cpu 的組合語言。
在沒有 ice 下或是沒有開發版, 可以使用 qemu 來練習開發,
例如可以使用 qemu 模擬 raspberry pi 2/3,
因為通常沒有 ice 來連接 raspberry pi 2/3,
這樣就可以得到 ice 等級的 debugger,
使用 qemu + gdb 來除錯, 一開始應該會覺得很痛苦,
但取得這個能力是很重要的。
我甚至用 qemu + gdb 來 debug uefi 程式,
因為都是使用 gdb, 所以只要痛苦過一次,
很多平台都可以用。
: 走車相關的,目標大概是遠離機構設備做韌體/嵌入式系統(不太確定這兩個的詳細差別
: ),也不太清楚這個校名科系有沒有辦法
: 目前有修過資工系的資料結構了,不過是用python,現在在考量是該怎麼選擇
: 1. 接著繼續修演算法的課為主,碩班的課有餘力再修
: 2. 修碩班的課為主,把學分拿到,有餘力再修演算法
: 3. 買一塊板子來把C再好好的練熟,也用C練著寫基礎的資料結構,再多了解一些硬體的
: 知識
: 爬了文後目前的理解是 硬體的知識>C、C++ >資結、演算法、OS,但是演算法、OS也是蠻
: 重要的,不知道該先著重去了解哪一塊好?
: 也想請教修演算法的課是必要的嗎?或者是修作業系統會比演算法來的有效益呢?因為爬文
: 後發現提到作業系統的次數其實還比演算法多一些,但又怕直接讀作業系統會看不太懂。
: 如果要挑選一個先了解的話要選哪個好呢? 又或者其實都一起了解才最優?
: 最後想問是該多練C還是C++好,發現有的人說C,有的人說C++,似乎都各有各的說法
--
紙上得來終覺淺,絕知此事要躬行。
--