身為單片機(jī)開發(fā)領(lǐng)域小白的我也是在多年以后才深刻的理解,為什么說驅(qū)動(dòng)和應(yīng)用分離的方式是一種藝術(shù)。他是真的能夠提高生產(chǎn)力的發(fā)明,同樣的原以為只有應(yīng)用linux開發(fā)才會(huì)用到的東西,居然也也在RTOS上實(shí)現(xiàn)了。愿我們的牛馬之路從此遠(yuǎn)離在車身上車出一個(gè)輪子的操作。。。從今以后我們一人飾兩角(應(yīng)用工程師和驅(qū)動(dòng)工程師,可惜只能拿一份工資),利用強(qiáng)大的精神力將自己分裂成兩個(gè)人寫驅(qū)動(dòng)的專注寫驅(qū)動(dòng),寫應(yīng)用的專注寫應(yīng)用,千萬不要再合體了。(扯遠(yuǎn)了。。。進(jìn)入正題。。。)
程序要實(shí)現(xiàn)其功能要有四個(gè)部分組成:應(yīng)用(這個(gè)你來寫)、驅(qū)動(dòng)框架管理層和框架層(RTOS來實(shí)現(xiàn))、驅(qū)動(dòng)層(身為偉大無私奉獻(xiàn)的你或他)、硬件(單片機(jī),最終的執(zhí)行者)如下圖所示:
舉個(gè)栗子,基于上面的構(gòu)架,一個(gè)應(yīng)用程序需要通過串口發(fā)送一串?dāng)?shù)據(jù)出去是如何實(shí)現(xiàn)的呢。
應(yīng)用程序:兄弟(RTOS驅(qū)動(dòng)框架),UART5這個(gè)家伙在不在?
RTOS驅(qū)動(dòng)框架:在的,等下我把他的微信號(hào)(返回句柄)發(fā)給你。
應(yīng)用程序:添加UART5這個(gè)家伙的微信(根據(jù)返回的句柄,open這個(gè)外設(shè))。
應(yīng)用程序:兄弟幫我用115200、8、N、1的格式發(fā)送一段消息出去(通過control配置這個(gè)外設(shè))。
應(yīng)用程序:兄弟幫我發(fā)一條消息出去,內(nèi)容啥時(shí)候還我錢(通過write函數(shù)寫入數(shù)據(jù)操作)。
應(yīng)用回調(diào)函數(shù):再等等啊,一有錢馬上還你。。。(收到消息的應(yīng)用,松了一口氣,對(duì)方還活著。。。)
應(yīng)用程序:好了,兄弟,下次有需要我再聯(lián)系你,無情的刪除了UART5的聯(lián)系方式(通過close關(guān)閉了)。
應(yīng)用到此結(jié)束了,把應(yīng)用程序扔進(jìn)一個(gè)定時(shí)任務(wù)中,設(shè)定時(shí)間為一天,這樣他就可以每天幫你催一次款。
具體的原理流程如下:
你并不需要關(guān)注I/O管理器是如何實(shí)現(xiàn)的,也不需要關(guān)注設(shè)備驅(qū)動(dòng)程序是如何注冊(cè)到I/O設(shè)備管理器的,這個(gè)時(shí)候的你就當(dāng)自己只是一個(gè)應(yīng)用工程師,你只需要使用rt_device_xxx()類型的API就完成了應(yīng)用的功能的實(shí)現(xiàn)。
當(dāng)然后面我們會(huì)展開降設(shè)備驅(qū)動(dòng)是如何編寫的,如何注冊(cè)到I/O設(shè)備管理器的,I/O設(shè)備管理器又是個(gè)啥?到時(shí)候你只需要簡簡單單的精神分裂下就可以聽懂了。
欲知后事如何?且聽下回分解。