宏定义+头文件
将一个宏定义取不同的数据到不同的数组中;
 
侵入式链表
struct list_head
 {
 struct list_head *next, *prev;
 };
 // 添加(list_add_tail/list_add)、删除、查找
 xx.h
// 定义一个用于链表管理的结构体
 typedef sturct{
 xxx
 xxx
 list head list;
 }myEntry
xx.c
 //模块管理整个链表的链表头
 static LIST_HEAD(mylistHead);
//遍历链表
 list_for_each(pList, &mylistHead)
 {
 //根据list head指针找到该结构体实例的指针
 pmyEntry= list_entry(pList, myList, list);
 }
 //
 list_add(&attr->list, &bHalUartListHead);
设备与驱动
参考
 
通用设备接口
将设备抽象成文件,对设备的操作就是对文件操作:open close ctl
 
 
-  
设备名字:设备的“序号”-用于遍历,


 -  
设备序号:从当前已经支持的驱动文件中
 
设备代码b_drv_key.c
由Kconfg生成_config 下的b_hal_if.h文件,配置好驱动与MCU管脚的映射,注意名称 KEY

在对应的驱动模块中生成,对应的设备驱动实例
GPIO的通用硬件接口描述
 
设备的硬件接口表:
 bDRIVER_HALIF_TABLE(bKEY_HalIf_t, DRIVER_NAME);
 
const static bKEY_HalIf_t bHalIf_KEY[] = {{B_HAL_GPIOC, B_HAL_PIN4, 0}, {B_HAL_GPIOB, B_HAL_PIN10, 0}, {B_HAL_GPIOC, B_HAL_PIN13, 0}, { B_HAL_GPIOA, B_HAL_PIN0, 0 }}
 

设备初始化时初始化硬件接口,多个硬件接口用数组的形式

 在配置硬件接口的 通用操作方式;
 
驱动接口




















