宏定义+头文件
将一个宏定义取不同的数据到不同的数组中;
侵入式链表
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 }}
设备初始化时初始化硬件接口,多个硬件接口用数组的形式
在配置硬件接口的 通用操作方式;