[請益] 1~3年韌體工程師求前輩指點

看板Tech_Job作者 (brotherD)時間5年前 (2019/01/22 14:12), 5年前編輯推噓23(25232)
留言59則, 29人參與, 5年前最新討論串1/1
嗨,今天大家過的好嗎。 小弟寫FW已經有一兩年了,大概了解這個領域的工作內容以及涉及的範圍。目前技術能力 卡在一個瓶頸,想上來請教各位大大該如何精進自己。 先說說我已具備的能力。 1.有辦法讀懂OS手冊,並正確使用該API。 花了兩個月把uC/OS-III的手冊看完一遍,且成功使用semaphore與message queue。有辦法 融會貫通手冊想要表達的觀念以及kernel的實作細節。但僅止於此,就是會用而已。 2.有辦法快速上手新的硬體,並寫出該硬體的driver。 3.其他抓硬體bug,用示波器...blabla的基本能力就不贅述了 目前欠缺的能力 1.物件導向的觀念 我發現我之前寫的code在亂寫,很像是把一堆東西東湊西湊然後混著用。我希望自己能寫 出具有模組化的程式碼,且有辦法在未來需要擴充的時候不用牽一髮而動全身。 上網查,如果在C語言加入物件導向的觀念,可以改善這部分(請幫舉證?),所以我最近試 著想要用C語言的角度了解、寫出物件導向的程式碼 但我找不到一本好的入門書,請各位網友建議,謝謝。 2.欠缺讀code的能力 當coder把user用不到的資訊全部放在header file,會讓user越讀越混亂。好的code應該 具有information hiding的特色(我自己說的), 我沒辦法在一堆混亂的資訊中過濾出有用的資訊,並且了解對方在寫什麼。看到會讓人誤 會的變數命名、沒有註解的function prototype、沒有意義的檔名以及沒有把每個file分 層的project,我真的必須要一直問對方才有辦法了解對方的邏輯。 我知道可以要求對方多加點註解,或者是要求改善他的寫法。但我相信我更應該做的是提 升自己的閱讀能力,而不是去要求別人。想請問這部分需要如何提升自己呢? 3.程式組織能力 這部分有一點抽象。比如在寫一支application,我可能會自定義很多型別(struct),但我 發現我有時候會搞錯各個成員(member)該擺放的位置,比如A結構的成員我可能會放到B結 構裡去,導致在寫struct of struct的時候會卡住。 常常搞混type的命名與identifier的命名。 拿int number做比喻好了,我們很清楚知道number的型別是int,但我有時候就會命名成相 反。該怎麼說呢,就是有點還沒辦法明確地分清楚各個struct要擔任的角色,以及type的 定義嗎?(我自己也不知道問題出在哪) 這部分我目前不知道該怎麼辦,感覺搞懂物件導向後有辦法改善? 還是看資料結構?(我買 來但都沒時間翻) 4.無法明確掌握自己該精進的方向 比如最近看到一個網址: https://www.state-machine.com/ 它好像在提倡它的工具比RTOS好用,什麼framework還有state-machine的,還加上UML。 我腦袋就出現一堆問號,諸如: 什麼是UML? 在RTOS的環境下沒辦法寫state-machine嗎? RTOS跟它的framework不能共存嗎?感覺是同一種東西啊!...blablabla 這些問題我也有上網google過,但也只能懂表面,沒辦法了解他們在幹嘛 希望有位好心的大大可以跟我聊一聊Q_Q讓我知道我目前在roadmap的哪裡,以及該怎麼前 進,謝謝!(如果打的很亂請見諒) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.216.18 ※ 文章網址: https://www.ptt.cc/bbs/Tech_Job/M.1548137551.A.849.html ※ 編輯: zzss2003 (118.163.216.18), 01/22/2019 14:21:03

01/22 14:21, 5年前 , 1F
你完全搞錯方向= =
01/22 14:21, 1F

01/22 14:22, 5年前 , 2F
c的物件導向去看 linux碼, 一堆都是或是jserv有教學影片
01/22 14:22, 2F

01/22 14:23, 5年前 , 3F
問題1~3,可以看clean code/clean architecture
01/22 14:23, 3F

01/22 14:29, 5年前 , 4F
了解設計模式,及多看code 會有幫助
01/22 14:29, 4F

01/22 14:39, 5年前 , 5F
第1點怪怪的,uC/OS-III需要自己實做semaphore和message que
01/22 14:39, 5F

01/22 14:39, 5年前 , 6F
ue? OS本身就有這功能吧
01/22 14:39, 6F
打太快,以更正 ※ 編輯: zzss2003 (118.163.216.18), 01/22/2019 14:47:11

01/22 14:47, 5年前 , 7F
第一句聽到有點煩
01/22 14:47, 7F

01/22 14:54, 5年前 , 8F
你可以去問油土伯
01/22 14:54, 8F

01/22 14:54, 5年前 , 9F
讀code能力,除非自己有毅力去找open source的專案慢慢看裡
01/22 14:54, 9F

01/22 14:54, 5年前 , 10F
面code, 不然就是接一堆幫人擦屁股的解軟體bug的工作來做
01/22 14:54, 10F

01/22 15:07, 5年前 , 11F
韌體的話,建議你站穩一塊domain knowledge,ex:USB, TCP/IP,
01/22 15:07, 11F

01/22 15:07, 5年前 , 12F
File system....這是做韌體最核心的價值
01/22 15:07, 12F

01/22 15:27, 5年前 , 13F
吃飽太閒可以去trace Linux kernel啊
01/22 15:27, 13F

01/22 15:35, 5年前 , 14F
1.的話就是指標+strict,就差不多能用了
01/22 15:35, 14F

01/22 15:35, 5年前 , 15F
Struct
01/22 15:35, 15F

01/22 16:22, 5年前 , 16F
linux下面不同的subsystems很多都有搭物件導向寫法
01/22 16:22, 16F

01/22 16:25, 5年前 , 17F
C不是物件導向語言 不需要完全用物件導向
01/22 16:25, 17F

01/22 16:28, 5年前 , 18F
硬要用C寫OO 可讀性會很差
01/22 16:28, 18F

01/22 16:39, 5年前 , 19F
FW code 扯進 OO 就完了
01/22 16:39, 19F

01/22 16:44, 5年前 , 20F
youtube搜尋
01/22 16:44, 20F

01/22 16:44, 5年前 , 21F
你所不知道的c語言
01/22 16:44, 21F

01/22 17:22, 5年前 , 22F
寫FW談OO.. 是不是搞錯重點了
01/22 17:22, 22F

01/22 17:28, 5年前 , 23F
整個linux kernel都很OO 可以去看看如何用C寫OO的資訊
01/22 17:28, 23F

01/22 17:29, 5年前 , 24F
搭配kernel讀 認真看保證會有收穫
01/22 17:29, 24F
可以請問一下為何上面有人不推OO?好像存在著正反兩端的意見捏 ※ 編輯: zzss2003 (118.163.216.18), 01/22/2019 17:37:46

01/22 17:44, 5年前 , 25F
看你是信 linux kernel 還是信不認識的鄉民
01/22 17:44, 25F
謝謝GG鳥大大,嘻嘻 ※ 編輯: zzss2003 (118.163.216.18), 01/22/2019 18:13:10

01/22 18:23, 5年前 , 26F
你的問題1,建議你找一段自己寫的程式然後把他畫成流程圖,
01/22 18:23, 26F

01/22 18:23, 5年前 , 27F
看看這圖是不是很醜,是的話,請重畫出好看的圖,然後照圖
01/22 18:23, 27F

01/22 18:23, 5年前 , 28F
的步驟去寫code
01/22 18:23, 28F

01/22 18:24, 5年前 , 29F
問題1其實跟懂不懂物件導向關係不大
01/22 18:24, 29F

01/22 18:42, 5年前 , 30F
其實韌體就只要做到,訊號進的來,資料出的去,工程師發大財
01/22 18:42, 30F

01/22 18:42, 5年前 , 31F
01/22 18:42, 31F

01/22 23:08, 5年前 , 32F
可以說說你寫過那些driver嗎?
01/22 23:08, 32F

01/22 23:11, 5年前 , 33F
你不是夜市學店那一位嗎?電池沒做了
01/22 23:11, 33F

01/22 23:11, 5年前 , 34F
01/22 23:11, 34F

01/22 23:21, 5年前 , 35F
來寫BIOS啊
01/22 23:21, 35F

01/22 23:22, 5年前 , 36F
你講的這些來寫UEFI bios都有
01/22 23:22, 36F

01/23 00:02, 5年前 , 37F
拿現成BIOS/bootloader精進coding能力喔......XD ! 怎麼跟
01/23 00:02, 37F

01/23 00:02, 5年前 , 38F
高級長官說的都不太一樣XD
01/23 00:02, 38F

01/23 00:12, 5年前 , 39F
UEFI程式比較簡單環境也較單純 作為學C的OO其實還可以
01/23 00:12, 39F

01/23 00:13, 5年前 , 40F
但是應用面很窄 還是直接學kernel或RTOS比較快
01/23 00:13, 40F

01/23 01:09, 5年前 , 41F
真的環境簡單XD OS BSOD,chip 莫名reset都算你的XD
01/23 01:09, 41F

01/23 02:21, 5年前 , 42F
1. 21世紀C語言 / OOP in C可以拿來翻
01/23 02:21, 42F

01/23 02:22, 5年前 , 43F
2. 資料流和領域知識可以輔助你更快進入狀況 就認真問吧
01/23 02:22, 43F

01/23 02:29, 5年前 , 44F
4. 目的是要做啥?好維護?那還是選比較多人用的比較好
01/23 02:29, 44F

01/23 03:05, 5年前 , 45F
其實不是OO不好 是每個人寫的OO都不一樣
01/23 03:05, 45F

01/23 03:05, 5年前 , 46F
寫久了就亂七八糟了
01/23 03:05, 46F

01/23 03:06, 5年前 , 47F
在C++上已經有IDE幫你統一寫法 在C上各自發揮
01/23 03:06, 47F

01/23 03:08, 5年前 , 48F
會用OO來寫code很好,但是如果四不像的OO簡直災難\
01/23 03:08, 48F

01/23 03:09, 5年前 , 49F
Kernel code是一群高手的集散地,也一群人一直在修改
01/23 03:09, 49F

01/23 03:10, 5年前 , 50F
公司的寫code 光是人力 時程問題就會讓你的code產生災難
01/23 03:10, 50F

01/23 08:52, 5年前 , 51F
推訊號進的來,資料出的去XD
01/23 08:52, 51F

01/23 10:03, 5年前 , 52F
Linux kernel的code漂亮又洗煉,OO精神無所不在,不是mcu
01/23 10:03, 52F

01/23 10:03, 5年前 , 53F
等級的code可以比的
01/23 10:03, 53F

01/23 12:22, 5年前 , 54F
Linux kernel 必看吧!
01/23 12:22, 54F

01/23 22:23, 5年前 , 55F
Linux kernel跟OO差的遠了 不是模組化就是OO勒
01/23 22:23, 55F

01/24 20:18, 5年前 , 56F
不用急,多做幾件案子,從經驗中學習
01/24 20:18, 56F

01/28 21:24, 5年前 , 57F
FW 有晶片容量限制......有時候你還得拋棄高階語言
01/28 21:24, 57F

01/28 21:26, 5年前 , 58F
然後RTOS跟State-machine 根本兩碼子事情...你那句
01/28 21:26, 58F

01/28 21:26, 5年前 , 59F
什麼意思我完全看不懂
01/28 21:26, 59F
文章代碼(AID): #1SHhHFX9 (Tech_Job)