身为单片机开发领域小白的我也是在多年以后才深刻的理解,为什么说驱动和应用分离的方式是一种艺术。他是真的能够提高生产力的发明,同样的原以为只有应用linux开发才会用到的东西,居然也也在RTOS上实现了。愿我们的牛马之路从此远离在车身上车出一个轮子的操作。。。从今以后我们一人饰两角(应用工程师和驱动工程师,可惜只能拿一份工资),利用强大的精神力将自己分裂成两个人写驱动的专注写驱动,写应用的专注写应用,千万不要再合体了。(扯远了。。。进入正题。。。)
程序要实现其功能要有四个部分组成:应用(这个你来写)、驱动框架管理层和框架层(RTOS来实现)、驱动层(身为伟大无私奉献的你或他)、硬件(单片机,最终的执行者)如下图所示:
举个栗子,基于上面的构架,一个应用程序需要通过串口发送一串数据出去是如何实现的呢。
应用程序:兄弟(RTOS驱动框架),UART5这个家伙在不在?
RTOS驱动框架:在的,等下我把他的微信号(返回句柄)发给你。
应用程序:添加UART5这个家伙的微信(根据返回的句柄,open这个外设)。
应用程序:兄弟帮我用115200、8、N、1的格式发送一段消息出去(通过control配置这个外设)。
应用程序:兄弟帮我发一条消息出去,内容啥时候还我钱(通过write函数写入数据操作)。
应用回调函数:再等等啊,一有钱马上还你。。。(收到消息的应用,松了一口气,对方还活着。。。)
应用程序:好了,兄弟,下次有需要我再联系你,无情的删除了UART5的联系方式(通过close关闭了)。
应用到此结束了,把应用程序扔进一个定时任务中,设定时间为一天,这样他就可以每天帮你催一次款。
具体的原理流程如下:
你并不需要关注I/O管理器是如何实现的,也不需要关注设备驱动程序是如何注册到I/O设备管理器的,这个时候的你就当自己只是一个应用工程师,你只需要使用rt_device_xxx()类型的API就完成了应用的功能的实现。
当然后面我们会展开降设备驱动是如何编写的,如何注册到I/O设备管理器的,I/O设备管理器又是个啥?到时候你只需要简简单单的精神分裂下就可以听懂了。
欲知后事如何?且听下回分解。