前言
被调用函数需要与在调用函数的参数中定义函数指针,并且有相同的参数类型
1.调用函数需要函数指针
代码如下(示例):
//函数定义
void infrared_send_frame(INT8U *frame,INT16U frame_len)
{
tpos_sleep(100); //红外发送前间隔100ms
if_ir_write(frame,frame_len);
while(FALSE == if_ir_idle())
{
tpos_yield();
}
}
//在下面函数中想要调用上述函数需要在下面函数的参数中定义函数指针void (* send_frame)(INT8U*,INT16U) 注意:与上述函数参数类型保持一致才能调用
void process_urgent_recv_frame(INT8U* req_frame,INT16U reqLen,INT8U* resp_frame,INT16U maxrespLen,INT8U recv_protocol,void (* send_frame)(INT8U*,INT16U),INT8U resp_FE_count,BOOLEAN allow_new_meter_report,INT8U rs485_bit)
{
。。。
}
//实现调用
process_urgent_recv_frame(GINFRARED.req_frame,reqLen,GINFRARED.resp_frame,256,recv_protocol,infrared_send_frame,4,TRUE,rs485_bit);
总结
调用函数的参数中形参的名字可以与实际函数名称不同,但是函数参数类型必须保持一致。