0x02 LiteOS_Lab仓库组件详解--Driver(上)
摘要:本贴详解driver层,相信大家肯定有疑问,为啥我不说完AT层再说driver层?因为AT层就是通过调用driver层中的API来操作串口的,所以不得不在AT层的详解中先把driver层说了。
编程的抽象思想
我们在接到一个客户的需求时,帮客户制作一份程序,大家有没有想过“我能不能把这个客户需要的代码下次卖给其他客户,节约自己的工作量”。要如何才能将刚刚我们提出的想法实现呢?这就需要通过编程抽象思想来实现。
比如说有两位客户,客户①的需求:我要在8051内核单片机上实现一个AT收发的框架;客户②的需求:我要在stm32f103单片机上实现一个AT收发的框架。那么这是我们就可以运用代码接口抽象化、模块化、降低模块与模块间耦合的思想了,将这份代码从下到上分为3层:
①串口层:用于初始化串口,将上层的数据通过串口发出。将收到的数据提供给串口,我们在更换不同类型的单片机只需要从新写这一层。
②driver层:也就是驱动层,它提供读、写、初始化等等函数给上层模块使用,上层模块操作串口和操作内存卡的感觉是一样的,通过这层完全屏蔽了底层设备的差异,所有能进行读写的设备都可以通过driver层注册并提供读、写函数即可,在更换底层设备,例如将内存卡换成u盘只要适配好内存卡硬件层和u盘硬件层,其余均不用改动。
③AT层:AT指令大家都知道,语法为AT+命令=参数、AT+命令?等,我们实现好这一层,只要调用相应函数并传入命令和参数就可以使用了。
所以所上面两位客户的需求可以共用相同的AT层和driver层,只用分别添加uart硬件层即可,就算客户后面改需求我们也不怕了,改硬件我们只需要修改硬件层(uart层)即可。
driver层中的结构体
使用结构体编程运用了面向对象的思想,把一个设备想象成对象,他有自己的属性和行为,属性对应各种变量(设备名、只读、只写等),行为对应各种函数(初始化函数、读函数、写函数等)。
driver层自身初始化
设备注册函数
设备注册有两种方式,一种是直接调用注册函数注册,另一种是调用宏定义让设备的合适的时候自动注册,先说第一种。
设备取消注册函数
- 点赞
- 收藏
- 关注作者
评论(0)