2014-12-01 2 views
0

У меня есть две функции определенияКак передать указатель функции в качестве аргументов?

void USART_puts(USART_TypeDef* USARTx, volatile char *s) 
{ 
..... 
} 


void send_packet(char op, unsigned char *data, unsigned char len) 
{ 
.... 
} 

теперь я создал указатель на функцию для send_packet (полукокса, неподписанные символ *, символ без знака), как

void (*send_packet)(char,unsigned char*,unsigned char); 

Я хочу передать эту функцию указатель, как это

USART_Puts(USART1,send_packet)  

Но я получаю сообщение об ошибке «аргумент типа send_packet * несовместим с типом летучего полукокса *» Я могу понять из ошибки, что два аргумента не совпадают. Но может ли кто-нибудь рассказать мне, как я могу передать этот указатель функции?

+0

http://stackoverflow.com/questions/1789807/function-pointer-as-an-argument – AlexanderVX

ответ

1

USART_Puts должен иметь параметр типа указателя функции.

void USART_puts(USART_TypeDef* USARTx, void (*s)(char,unsigned char*,unsigned char)) 

Определение send_packet как указатель после его определения в качестве функции не требуется. Две такие декларации с тем же именем не должны сосуществовать.

+0

Очевидно, что USART_Puts' является частью API-интерфейса поставщика, поэтому, если он внесет это изменение в файлы заголовков, предоставленные поставщиком, тогда он находится в мире боли –

+0

@MattMcNabb Ну, он будет иметь примерно такой же эффект, как передача указателя функции в виде буфера данных путем его литья. Итак, на самом деле возникает вопрос: «Как мне получить асинхронный ввод-вывод из драйвера без поддержки?» – Potatoswatter

Смежные вопросы