驅(qū)動還好吧,我之前一直做通信上層軟件的(Linux平臺),后來轉(zhuǎn)到寫嵌入式,一開始不大適應(yīng),主要是思想沒有轉(zhuǎn)變,比如讀一個IO口的值,做上層應(yīng)用時我直接調(diào)API就ok了,但是做驅(qū)動是要讀多次,做消抖,防止硬件干擾導(dǎo)致的讀錯誤的。
因為一直沒有概念,在某個產(chǎn)品出貨2w套時,問題出現(xiàn)了,給我留下了深刻的印象。除此之外驅(qū)動沒有什么難寫的,除非你寫linux和windows驅(qū)動,需要學習相關(guān)知識外,假如是普通MCU,直接寫就ok了,最好買個邏輯分析儀,300塊左右就可以了,可顯著提高調(diào)試效率。覺得難可能還是MCU沒有用熟悉,另外C語言用得還不熟練。很多硬件背景的工程師喜歡用delay來延時,這種是不好的習慣,原因也是C語言用的還不熟練吧。自己調(diào)試一下單線或者軟件I2C接口,應(yīng)該很容易就有感覺了。另外要有時間片的概念,不要獨占CPU太長時間,可以通過設(shè)計中間狀態(tài)來讓出CPU時間,讓其他程序有執(zhí)行機會,下次輪到自己的驅(qū)動代碼執(zhí)行時再緊接上次運行。這個是很重要的一個點,由于很多人沒有這個概念,有可能出現(xiàn)驅(qū)動復(fù)雜的情況下占用CPU時間過多(因為用delay一條線運行下來),反過來影響到現(xiàn)有的業(yè)務(wù)處理過程(比如導(dǎo)致時間相關(guān)的功能不準了)。還有,你可以抄Arduino的相關(guān)器件的驅(qū)動,網(wǎng)上有很多,常見的器件基本都能找到。練手學習的話建議從手擼軟件I2C協(xié)議開始,這個寫好了其他驅(qū)動應(yīng)該都不大難了?;揪褪强炊甦atasheet,寫個狀態(tài)機的事情。嵌入式的驅(qū)動分兩種層次,一種是要你直接造出對于的時序波形,另外一種是基于SIP、I2C、單線等接口進行操作。第一種是最底層的,第二種是對通信進行了封裝。萬變不離其宗,掌握好狀態(tài)機實現(xiàn)方法,加上并行思想應(yīng)該就可以很好地寫出驅(qū)動了。這里的嵌入式驅(qū)動基本是指不跑嵌入式操作系統(tǒng)的驅(qū)動,如果是在操作系統(tǒng)下寫驅(qū)動,那還要學習操作系統(tǒng)相關(guān)的知識(比如linux是將設(shè)備抽象成文件進行讀寫的)。想到那寫到那,大概是這么些意思吧。