我都在拆解RTT0.4的设备接口,因为0.4系由0.3承继过来,关于设备IO仍适用于struct rt_device与enum rt_device_class_type两个关键结构。
要在RTT中驱动一个device必须要先做注册,再做初始化,才能对device进行功能函数定义。
注册——
rt_device_register(rt_device_t dev, const char* name, rt_uint8_t flags)
其中flags参数在相关头文件中已有声明,可根据需要直接调用。
通过rt_device_unregister(rt_device_t dev)又可以“卸载”已经register的device,但该做法不能释放内存。
初始化——
接口 rt_device_init_all(void) 可以一次性“打包”操作初始化已经register的device,又可以单独进行某个device的init,并定义私有数据。
初始化之后,才能进一步定义device的功能函数,如开闭、读、写、控制、I/O信号的线程。
RTT想将device通过基类先建立同类功能的大类,用register实现,再用init来对具体device实行初始化并保留私有数据以便实现具体的功能,似乎这样有利于移植和实现OS升级时的管理。
不知道我的理解对否。
(并非高手的GUN fan):lol