欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

模仿RT_Thread的設(shè)備驅(qū)動模型,使用C++實現(xiàn)

冬至子 ? 來源:哈嘍你好啊 ? 作者:哈嘍你好啊 ? 2023-10-24 14:47 ? 次閱讀

現(xiàn)狀

由于目前本人就職的公司不允許自由使用操作系統(tǒng)開發(fā),且公司一般為C/C++混合開發(fā)的模式,驅(qū)動的開發(fā)也十分的草率,驅(qū)動代碼與應(yīng)用代碼雜糅在一起,十分的不清晰。個人又十分喜愛RT_Thread這個系統(tǒng),也翻閱過一些內(nèi)核源碼,學(xué)習(xí)到了非常多的有用的開發(fā)技能。

于是我想到,為何不能自己建立一套驅(qū)動管理機制來進(jìn)行統(tǒng)一?于是萌發(fā)了使用C++來構(gòu)建RT_Thread的設(shè)備驅(qū)動框架的想法。當(dāng)然,我并沒有做到完全一致,而是加入了自己的一些想法,并且也是基于了目前的開發(fā)現(xiàn)狀來進(jìn)行了一定的修改(不允許貼源碼只能截圖哈)。

實現(xiàn)過程說明

RT_Thread的內(nèi)核對象分為很多種類別,線程、信號量、互斥量、設(shè)備、定時器…由于借鑒了RT_Thread的源碼,故進(jìn)行了刪減,只保留設(shè)備部分,且去除了對象類型和動態(tài)申請內(nèi)存使用的size變量(RT_Thread的源碼這一部分代碼就不貼了),如圖:

1.jpg

內(nèi)核對象類:

1.jpg

RT_Thread是把rt_object這個結(jié)構(gòu)體作為雙向鏈表的元素,這里的話是把CObject這個類作為雙向鏈表的對象(C++的類其實和結(jié)構(gòu)體是一樣的)。

對象的操作只保留了object_find、object_init、object_detach,修改了register和unregister的操作。type、name、usr_data保留,其中type(設(shè)備的類型)根據(jù)實際應(yīng)用做了一些修改(部分定義):

1.jpg

鏈表的插入刪除操作原封不動“抄”了RT_Thread的源碼,如圖:

1.jpg

新增驅(qū)動的控制與循環(huán)

因為刪除了open和close,且考慮到有些驅(qū)動需要調(diào)用循環(huán)實現(xiàn)一定的功能,故新增一個驅(qū)動控制類CObjCtrl:

1.jpg

該類非常簡單,如果驅(qū)動未使能則循環(huán)退出,且循環(huán)的主體(ObjProcess())需要該類被繼承后進(jìn)行虛函數(shù)的重寫。

新建注冊類(基本抽象類)

注冊類的作用主要就是繼承了CObjCtrl,且替代RT_Thread的register函數(shù)和unregister函數(shù),將對象接入雙向鏈表。該類的實現(xiàn)如下:

1.jpg

需要注意的是,不在需要手動調(diào)用register和unregister這兩個注冊卸載函數(shù)了,因為在驅(qū)動類構(gòu)造函數(shù)執(zhí)行的時候回自動調(diào)用(見構(gòu)造函數(shù)和析構(gòu)函數(shù))。GetType()和GetName()函數(shù)比較常規(guī)。構(gòu)造函數(shù)需要傳入驅(qū)動的類型、名字和私有數(shù)據(jù)(私有數(shù)據(jù)的作用下面會有說明)。

因為繼承了CObjCtrl類,故需要重寫虛函數(shù)ObjProcess(),重寫的ObjProcess()函數(shù)由調(diào)用了本類的AbsLayerProcess()純虛函數(shù),故本注冊類依然需要被繼承后重寫該純虛函數(shù)AbsLayerProcess()。

驅(qū)動抽象類

該類主要就是繼承了上述注冊類,且存在常規(guī)的read、write、control接口(虛函數(shù))。

RT_Thread的驅(qū)動初始化是在open函數(shù)調(diào)用的時候被調(diào)用的,我去除了open和close,所以驅(qū)動的初始化放在find函數(shù)內(nèi)部,通過變量b_IsInitOK來記錄是否已經(jīng)進(jìn)行過初始化,也可以手動調(diào)用函數(shù)DriverInitial()來進(jìn)行驅(qū)動的初始化。查看構(gòu)造函數(shù)可以發(fā)現(xiàn),私有數(shù)據(jù)記錄了本驅(qū)動抽象類的地址(因為傳入了this指針)。

又重寫了注冊類的AbsLayerProcess()函數(shù),該函數(shù)調(diào)用的真正需要驅(qū)動實現(xiàn)的循環(huán)函數(shù)DriverProcess()。

1.jpg

至此,設(shè)備驅(qū)動框架部分代碼全部開發(fā)完畢。

使用示例

以flash芯片AT45DB為例:

1.jpg

需要實現(xiàn)驅(qū)動的read、write、control、init函數(shù)(因為該驅(qū)動不需要循環(huán),所以不需要重寫DriverProcess()循環(huán)函數(shù))。構(gòu)造函數(shù)傳入SPI相關(guān)信息(自己實現(xiàn)的代碼,不深究)和驅(qū)動類型及名字。

實例化驅(qū)動類,自動將“對象”注冊至鏈表內(nèi):

1.jpg

使用如下:

1.jpg

至此,基本的設(shè)備驅(qū)動框架已經(jīng)形成,當(dāng)然后面又做了一定的拓展和優(yōu)化,這里不再贅述。RT_Thread實在是一個寶藏系統(tǒng)!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 驅(qū)動器
    +關(guān)注

    關(guān)注

    53

    文章

    8281

    瀏覽量

    147108
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16461

    瀏覽量

    179547
  • SPI接口
    +關(guān)注

    關(guān)注

    0

    文章

    260

    瀏覽量

    34567
  • C++語言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    7030
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1305

    瀏覽量

    40412
收藏 人收藏

    評論

    相關(guān)推薦

    通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    本文檔主要描述 N32G45x 系列、N32G4FR 系列、N32WB452 系列、N32G43x 系列、N32L40x 系列、N32L43x 系列 MCU 的 RT_Thread 設(shè)備注冊,便于使用者快速熟悉 RT_Thread
    發(fā)表于 11-02 07:53

    N32G452系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記分享

    本文檔主要描述 N32G45x 系列、N32G4FR 系列、N32WB452 系列、N32G43x 系列、N32L40x 系列、N32L43x 系列 MCU 的 RT_Thread 設(shè)備注冊,便于使用者快速熟悉 RT_Thread
    發(fā)表于 11-02 07:55

    基于正點原子精英版stm32f103zet6進(jìn)行rt_thread(3.0.3)的移植

    文件夾內(nèi)容簡介添加RT_Thread源碼到工程組文件夾config.h文件修改board.c文件修改修改main.c函數(shù)注意,此時編譯還會存在問題,需要將stm32F10x_it.c
    發(fā)表于 12-05 11:21 ?0次下載
    基于正點原子精英版stm32f103zet6進(jìn)行<b class='flag-5'>rt_thread</b>(3.0.3)的移植

    RTthread線程調(diào)度詳解

    rt_schedule(void){ struct rt_thread *to_thread; struct rt_thread *from_th
    的頭像 發(fā)表于 05-19 17:07 ?2590次閱讀

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊設(shè)備實現(xiàn)

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊設(shè)備實現(xiàn)方式介紹如下:
    的頭像 發(fā)表于 05-28 10:38 ?2237次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>框架及創(chuàng)建注冊<b class='flag-5'>設(shè)備</b>的<b class='flag-5'>實現(xiàn)</b>

    國民技術(shù)N32G4FR通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    、N32L43x 系列 MCU 的 RT_Thread 設(shè)備注冊, 便于使用者快速熟悉 RT_Thread 設(shè)備驅(qū)動。
    發(fā)表于 11-07 14:53 ?3次下載

    N32WB452系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32WB452系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?0次下載
    N32WB452系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記

    N32G4FR系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32G4FR系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?1次下載
    N32G4FR系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記

    N32G457系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32G457系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?3次下載
    N32G457系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記

    N32G455系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32G455系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?0次下載
    N32G455系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記

    N32G452系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32G452系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?0次下載
    N32G452系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記

    N32G435系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32G435系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?1次下載
    N32G435系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記

    N32G432系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32G432系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?3次下載
    N32G432系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記

    N32L43x系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32L43x系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?0次下載
    N32L43x系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記

    N32L40x系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記

    N32L40x系列通用MCU RT_Thread設(shè)備注冊應(yīng)用筆記
    發(fā)表于 11-10 19:51 ?0次下載
    N32L40x系列通用MCU <b class='flag-5'>RT_Thread</b><b class='flag-5'>設(shè)備</b>注冊應(yīng)用筆記