Re: [問題] Embedded C&C++ 入門書或課程

看板C_and_CPP作者 (james732)時間3年前 (2020/09/23 18:26), 3年前編輯推噓4(402)
留言6則, 6人參與, 3年前最新討論串2/3 (看更多)
我覺得embedded看規模與需求,大概會有幾個層次 1.沒有任何os,可能只有一個 while (1) 循序處理與一些中斷處理 學生時代會寫的8051點亮LED之類的程式就是這種 我現在的工作也是這樣的 主要就是在RAM與ROM都極少的情況下 與外部的Hardware做一些不會非常複雜非常即時的交互 在這個架構下,最主要的挑戰應該是怎麼在有限資源達到需求 並且在沒有os幫忙調度的情況下,各功能要怎麼協調 另外就是要怎麼透過register與晶片的硬體做互動 但這個部份每個系列的晶片都不同 而且廠商通常會提供sample code使用 但不幸sample code不符合需求或有bug時 就會需要研究相關的datasheet 因為沒有OS或任何的軟體框架,基本上Code也很好寫,愛怎麼寫就怎麼寫 直接在邏輯裡存取硬體暫存器也沒人會阻止你 但如果有需要跨晶片的需求,就要考慮適當的切分軟硬體邏輯 2.有一個簡單的multi-task調度,或者使用一個RTOS Google Chomebook所使用的EC (Embedded Controller) 就是這樣的 https://chromium.googlesource.com/chromiumos/platform/ec/ 它雖然沒有使用現有的RTOS,但它也實作了相關的context switch機制 這種情況下就是要在現有的軟體架構下再去新增或修改 可能是與硬體有關,或者與硬體無關的部份,框架會切得比較明確 如果是硬體有關,就要去研讀硬體的datasheet,並實作相關的API 如果是硬體無關,就要看軟體的邏輯怎麼做,並呼叫已有的API 跟1比起來,這種就是會用在比較複雜、即時、需要類似multi-task的情況 第一個難點會是要先弄懂它所使用的軟體框架現有的規則與限制 然後就看你是要寫偏向軟體或者偏向硬體,或者一個全新貫穿軟硬體的東西 3.直接以Linux Kernel為基底 這個寫起來就會跟你拿台PC灌Linux寫程式的感覺有點像了 但如果使用的embedded硬體是現有Linux kernel不支援的話 就要自己看datasheet然後去實作相關的Kernel module 這個難點就是跟Linux相關的部份,要怎麼跟核心正確的互動等等 如果是寫應用端的話,跟PC寫的感覺應該會非常像了 我覺得embedded system非常看「應用」 同樣是點個紅綠燈,你可以寫個 while (1) 加上 sleep 就做到 你也可以弄個linux kernel然後從gpio driver寫到application (有人會這樣幹嗎) 但我覺得有幾個基本功應該都躲不掉 1.關於C語言本身,特別是指標的部份,不管哪種一定都會用 2.關於OS的基本概念,除了while (1) 型的以外都會很吃重 3.晶片硬體的基本概念,譬如register怎麼寫,你要把一根pin拉high要怎麼拉等等 4.中斷(interrupt)流程的概念與處理,這絕對是會用到的(感謝板友建議) 一般來說,不管是哪種架構,操作硬體的程式碼應該都會有C語言的API 如果不幸沒有,自己寫的話,讀寫暫存器大概也不一定要用到組合語言 除非是非常需要最佳化,或者一些C語言真的翻不出來的東西,才要用組語 因此我覺得學習好C語言會是非常重要的 如果是想練功的話,就可以買個開發板回來玩玩看 最簡單的LED、按鍵,到複雜的點亮螢幕、處理camera,能玩的東西非常多 基本概念有了,就算換個晶片,細節不同,大致上的道理還是互通的 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.212.152 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1600856804.A.056.html

09/23 18:49, 3年前 , 1F
09/23 18:49, 1F

09/23 21:06, 3年前 , 2F
簡單明瞭推
09/23 21:06, 2F

09/23 21:26, 3年前 , 3F
寫得很棒,建議基本功再加一個中斷
09/23 21:26, 3F
感謝建議,已加上 ※ 編輯: james732 (111.71.212.152 臺灣), 09/23/2020 22:11:42

09/24 08:46, 3年前 , 4F
GPIO完了之後就是I2C,SPI,UART等等的使用了吧
09/24 08:46, 4F

09/24 14:52, 3年前 , 5F
真的謝謝大大優秀的回文
09/24 14:52, 5F

09/27 17:33, 3年前 , 6F
寫51和 driver porting 或改kernel 深深認知是不同領域
09/27 17:33, 6F
文章代碼(AID): #1VQoBa1M (C_and_CPP)
文章代碼(AID): #1VQoBa1M (C_and_CPP)