2016-11-21 44 views
0

我正在使用函数指针调用包含函数回调的嵌入式C项目。我将所有的代码都删除了,并创建了一个简单的例子来产生有问题的错误。我一直在盯着这一个多小时,仍然看不到我做错了什么。任何帮助非常感谢!“分配函数指针时出现错误”类型左值作为赋值的左操作数时出错(不是==问题!)

/* Callback function pointer type for ADC Sample Interrupt */ 
typedef void (*ADC_Callback_Func)(uint16_t); 

/* ADC Timer interrupt callback function pointer */ 
ADC_Callback_Func ADC_CallbackFunction(uint16_t sample); 

/* ADC Callback function */ 
void ADC_SampleReceived(uint16_t sample); 

/////////////////////////////////////////////////////////////////////// 

int main(void) 
{ 
    /* Initialize ADC Timer */ 
    ADC_CallbackFunction = &ADC_SampleReceived; //<-- Code Bombs here 

    /* Infinite loop */ 
    while (1) { 

    } 
} 

void ADC_SampleReceived(uint16_t sample) 
{ 

} 

我再次编译后收到的错误是:

"Type lvalue required as left operand of assignment"

+0

我认为你可以使用这篇文章作为一个很好的参考:http://stackoverflow.com/questions/142789/what-is-a-callback-in-c-and-how-are-they-实施 – philm

+0

请仔细检查错误信息。我得到“错误:作为赋值左操作数所需的左值”。 “类型左值”这个短语没有意义。 –

回答

2

在此代码ADC_CallbackFunction不是一个函数指针。它是一个函数,它需要一个uint16_t并返回一个函数指针。

+0

好吧我想我明白你的意思了,但不太清楚如何修复它 –

+0

好的。我发现了令人难以置信的STUIPID错误。由于我声明了一个函数指针,而不是一个函数原型,所以在变量的名称后面不需要任何东西。所以抛开括号和参数列表似乎可以解决这个问题。新行简单说就是 –

+0

ADC_Callback_Func ADC_CallbackFunction; –

相关问题