在结构中指定设备特定的函数

Specifying device specific functions in struct

本文关键字:函数 结构      更新时间:2023-10-16

我正在使用固件,试图制作一个独立于设备的库。该库使用I2C进行通信,这是一种简单而通用的协议,适用于那些不知道它是什么的人。I2C使用我关心的两个功能,读取和写入。在不同的微控制器上使用I2C,这主要是每个核心的不同,我正在寻找一种方法,让库传递函数,以便它能够以一致的方式使用它们。

如何制作一个结构,让用户可以将变量设置为函数。类似于:

typedef struct I2C_setup{
    function read = device specific read function;
    function write = device specific write function;
} 

然后我可以打电话给

I2C_setup I2C;

此后

(return type) RegisterRead = I2C.read(register address);

我会使用函数指针还是。。。什么

函数指针是个好主意。你可以将你的原型定义为

typedef struct I2C_setup{
  (*I2C_Read_Func)(uint32_t devAddr, uint32_t subAddr, uint8_t *pData, size_t lenght);
}

您作为的实际功能

I2C_Read(uint32_t devAddr, uint32_t subAddr, uint8_t *pData, size_t lenght);

你可以通过分配

I2C_setup I2C;
I2C.I2C_Read_Func = I2C_Read;