面向对象驱动,架构
就是BSP层
参考代码:BSP_LED
Driver层
面向对象思想:
- 定义对象结构体:包括用uint32_t定义的参数和许多的函数指针,并且还可以进一步的封装,定义一个结构体,里面放函数指针指向特定的函数,然后再在对象中定义一个指向结构体的指针
- 然后就是定义inst函数(实例化),这个函数的作用是把对象中的函数指针,指向要用的底层函数,实现硬件无关
- 然后再写driver_xxx_control函数,参数就一个指针,直接指向那个对象,然后通过函数指针直接调用操作函数就好
- 上面的所有函数,都要注意要先检查参数合法性,定义一个DEBUG_MODE,可以dubug输出调用状态
Handler层
一样
- 先定义对象结构体,要包括队列(creat,delete,put,get),互斥量(p,v),线程(create,delete),handler_xxx_control,OS_delay等等handler需要用的函数的结构体的指针
- 然后写inst,传参,连接指针
- 写register,把driver挂载到handler上进行统一管理,注意handler对象里会定义个driver_group专门储存handler,然后挂载的时候传index上去,就能记住driver的实例,如果有注册数量限制,还要有互斥量保护临界区driver_group
- 写handler_xxx_control,控制driver,用队列传输msg,然后一个线程监听队列,弹出msg,执行driver_xxx_control
System层
放实现代码
- 缺少的函数实现,并且把存放指针的结构体内的指针,连接上:(队列(creat,delete,put,get),互斥量(p,v),线程(create,delete),handler_xxx_control,OS_delay这些的实际实现函数)
- BSP的init函数放进去,再写控制函数控制led