關(guān)于驅(qū)動(dòng)最底層的硬件處理并沒有全篇展開,基于MCU打造一套驅(qū)動(dòng)都需要不斷地迭代測試慢慢的變?yōu)橐惶壮墒斓尿?qū)動(dòng),你不可能看完我的長篇廢話后就能去寫出一套完美的驅(qū)動(dòng),那么我們的驅(qū)動(dòng)工程師就太不值錢了,文章的目的是讓你了解驅(qū)動(dòng)的機(jī)制,驅(qū)動(dòng)的調(diào)用關(guān)系,框架如何完美的匹配驅(qū)動(dòng)程序,了解了這些以后,剛開始可能寫的驅(qū)動(dòng)有些蹩腳,但是你知知道驅(qū)動(dòng)和框架的服務(wù)關(guān)系,你只要不斷地嘗試慢慢它會(huì)越來越好。
那么你對(duì)注冊機(jī)制的了解有多少呢?你想要APP ——框架——驅(qū)動(dòng)完美的統(tǒng)一,就需要對(duì)注冊機(jī)制有清楚的了解,它實(shí)現(xiàn)了一套松耦合的調(diào)用關(guān)系的建立(我是這樣理解的)。
還記得我最初寫裸機(jī)程序的時(shí)候,程序內(nèi)部的藕合非常嚴(yán)重,那時(shí)候還分什么應(yīng)用程序、驅(qū)動(dòng)程序、框架還有啥存在的意義?一套函數(shù)嵌套的調(diào)用關(guān)系打天下~!當(dāng)然不是說邏輯不好或者是嵌套不好,不同的應(yīng)用場合作用不同,小的項(xiàng)目還是裸奔o(jì)r實(shí)時(shí)框架更舒坦。偏題了,我們先看下應(yīng)用到驅(qū)動(dòng)的調(diào)用關(guān)系,基于uart的serial層來完成框架關(guān)系的建立:
通過函數(shù)指針賦值的方式建立松耦合關(guān)系,而不是通過函數(shù)嵌套來實(shí)現(xiàn),嵌套是定死的,只能調(diào)用固定名稱的函數(shù),而函數(shù)指針的方式是通過變量的賦值來實(shí)現(xiàn)松耦合,你只需要調(diào)用函數(shù)指針,而不需要關(guān)系指針的函數(shù)名(或者這里講地址更精確):
serial層本質(zhì)是一個(gè)承上啟下的框架層,關(guān)于承上,上面的代碼說明了,APP通過device對(duì)象的相關(guān)操作就可以操控到serial層的函數(shù),那么serial層最終還要調(diào)用真實(shí)的uart驅(qū)動(dòng)才能實(shí)現(xiàn):
關(guān)于serial層如何實(shí)現(xiàn)底層驅(qū)動(dòng)的訪問,假如我們寫的是應(yīng)用那么它是怎么調(diào)用的呢?