或許看到本系列文章會產生的第一個疑問大概就是:「為什麼是 AVR?」。的確,現在潮潮都用 x86,不然就是 ARM,怎麼有人會想要講老掉牙的 AVR?
以下是筆者想要從 AVR 學習的原因:
AVR 的一大優勢在於 Arduino 的生態圈多數脫離不了 AVR,Arduino 提供了非常好的抽象,簡化了繁瑣的設定、編譯、上傳程式碼等步驟,透過 IDE 操作初學者也可以輕易將程式碼上傳。
儘管如此,背後運作的仍然是 AVR(這裡不討論以 ARM chip 的 Arduino 開發板),更棒的是 Arduino 是開源的,任何一個人都可以上 GitHub 查看原始碼。比起剛開始就直接挑戰 Linux 原始碼,從 AVR 開始除了程式碼規模較小之外,有任何問題都可以直接使用 Arduino 實機測試。
比起 intel 或是 ARM 指令集,AVR 的指令集相對少很多,打開 Attiny85 的 datasheet 也就 120 個指令,在學習上也就相對好上手。以 Attiny85 的 datasheet 為例,整個 datasheet 也才 234 頁,還算是相對好消化的範圍。
除了可以直接用 Arduino 來學習 AVR 之外,對於比較進階的學習者來說也可以直接買單顆 IC 來學習。以 Attiny85 為例,只有 8 隻腳而且可以直接插麵包板接線,想要測試程式碼運作時相對方便許多。Attiny85 只要 50 ~ 60 台幣就能入手,網路上隨便都買得到,比一杯飲料還便宜,燒掉也不會太心疼。
另外 AVR chip 常見的儲存機制都是內建在晶片當中,只要有電源,不用外接任何設備就可以直接運作
學這個又沒有實際用途,為什麼還要大費周章學?
的確,學習整個作業系統是完全不同的概念,儘管你把 AVR 的指令跟概念搞熟也不代表明天就能寫 linux kernel(請右轉 jserv),但這無關於有沒有實際用途,而是對於事物本質運作的好奇。
因此我認為有這個想法時心態就已經完全不正確了。如同本系列的說明文一樣,這是一段感謝電、感謝電晶體、感謝現代計算機組織發展的歷程。
回頭想想計算機的歷史,發現電的存在、電晶體、積體電路、CPU 架構、半導體產業,簡直就是奇蹟。能夠在 21 世紀學習人類最偉大的智慧結晶,這件事情本身就已經夠迷人了。
質數的存在,最剛開始也只侷限在數論而已,但多年以後質數成為了密碼學的重要基礎,我們仰賴的加密傳輸,就是以質數的性質構築而成的。這應該是那些著迷於質數的數學家們從來也沒想過的吧。
因此如果真要給答案的話,本系列文章對你的職涯、寫程式的功力、薪水沒有任何幫助。
要在 30 天內講完 AVR 的所有知識是非常困難的挑戰,因此可能省略部份概念或以較為精簡的文字帶過,也有可能無法達成連續 30 天發文。文章有必要時會貼出參考資源,有興趣的讀者可以另外參考。