Указание специфических функций устройства в структуре

0

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

Могу ли я использовать указатели на функции или... что?

  • 1
    cprogramming.com/tutorial/function-pointers.html
  • 0
    Вы скорее ответили на свой вопрос. Указатели на функции - это именно то, что вы описали. Тем не менее, поскольку вы пометили его как C ++, есть и другие возможности, специфичные для C ++. Все, что вы когда-либо хотели знать о функциональных указателях, подробно описано в newty.de/fpt
Показать ещё 1 комментарий
Теги:
struct
embedded
typedef

1 ответ

1
Лучший ответ

Функциональный указатель - хорошая идея. Вы можете определить свой прототип как

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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню