Я работаю с прошивкой, пытаясь создать независимую от устройства библиотеку. Библиотека использует 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;