您好,登錄后才能下訂單哦!
如何進行RT-Thread中設備模型rt_device的理解,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
最近在看內(nèi)核源碼,暫時避開費腦力的任務調(diào)度、內(nèi)存管理等較復雜的實現(xiàn)方法,發(fā)現(xiàn)rt_device設備框架實現(xiàn)很簡單。
rt_device,設備管理的框架(模型),提供標準的設備操作接口API,一些外設,可以抽象成設備,進行統(tǒng)一的管理操作,如LCD、Touch、Sensor等。
rt_device,是內(nèi)核對象派生出來的,因此,有些操作,就是在操作內(nèi)核對象。上幾篇筆記研究內(nèi)核對象的管理,現(xiàn)在發(fā)現(xiàn),看device.c文件,很容易能看懂。
RT-Thread 的PIN、CAN、Serial、I2C、SPI、PM等,都抽象成一種設備模型。這些設備模型,派生于rt_device即可。
pin設備模型:結(jié)構(gòu)如下:
/* pin device and operations for RT-Thread */ struct rt_device_pin { struct rt_device parent; /* 派生于rt_device */ const struct rt_pin_ops *ops; /* 設備特有的操作接口,還可以根據(jù)需要增加其他成員 */ };
所以用戶可以派生自己想要的設備框架,增加特定設備的操作接口:ops,特定屬性:結(jié)構(gòu)體成員。
需要把具體的設備,注冊到內(nèi)核容器上,這里調(diào)用rt_device的注冊接口。
如:
/* 使用時,需要把設備名稱、操作接口等,傳入 */ int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void *user_data) { _hw_pin.parent.type = RT_Device_Class_Miscellaneous; /* 設備類型,為了區(qū)分設備種類 */ _hw_pin.parent.rx_indicate = RT_NULL; /* 接收回調(diào),串口、CAN一般會有 */ _hw_pin.parent.tx_complete = RT_NULL; /* 發(fā)送回調(diào),串口、CAN一般會有 */ #ifdef RT_USING_DEVICE_OPS _hw_pin.parent.ops = &pin_ops; #else _hw_pin.parent.init = RT_NULL; /* 以下標準的rt_device設備操作接口,根據(jù)需要實現(xiàn) */ _hw_pin.parent.open = RT_NULL; _hw_pin.parent.close = RT_NULL; _hw_pin.parent.read = _pin_read; _hw_pin.parent.write = _pin_write; _hw_pin.parent.control = _pin_control; #endif _hw_pin.ops = ops; /* 操作接口,設備的特有操作接口 */ _hw_pin.parent.user_data = user_data; /* 不是必要的用戶數(shù)據(jù) */ /* register a character device */ rt_device_register(&_hw_pin.parent, name, RT_DEVICE_FLAG_RDWR); /* 設備注冊接口:注冊為具體設備 */ return 0; }
具體設備對接設備框架
/* 具體設備的OPS 實現(xiàn) */ const static struct rt_pin_ops _stm32_pin_ops = { stm32_pin_mode, stm32_pin_write, stm32_pin_read, stm32_pin_attach_irq, stm32_pin_dettach_irq, stm32_pin_irq_enable, }; /* 實際設備的注冊方法 */ rt_device_pin_register("pin", &_stm32_pin_ops, RT_NULL);
設備注冊后,可以通過:list_device查看
rt_device_read rt_device_write等操作前,需要:rt_device_open
rt_device_open rt_device_close 操作最好成對出現(xiàn),原因是rt_device內(nèi)部有引用計數(shù),如你open兩次,close一次,計數(shù)為1,沒有真正的close。
一般通過rt_device_find,通過設備名稱,查找設備,獲取設備的操作句柄,也就是設備結(jié)構(gòu)體指針,從而可以進一步進行操作設備的操作接口ops或通過設備的標準操作接口操作設備。
RT-Thread 的設備類型很多,可以派生各種設備模型(框架),從而可以注冊掛載很多設備上去,可以方便的實現(xiàn)讀寫控制等操作,如控制硬件、傳感器等。
關于如何進行RT-Thread中設備模型rt_device的理解問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。