调用函数而不在另一个函数中调用其参数有点令人困惑,如下所示:
ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0);
output_cb
和status_cb
是其参数未设置的函数,其定义必须写在上面的行中,而不是它们被调用的行。
功能定义:
static void status_cb(ppp_pcb *pcb, int err_code, void *ctx) {
struct netif *pppif = ppp_netif(pcb);
switch(err_code) {
case PPPERR_NONE: {
printf("status_cb: Connected\n");
printf(" our_ipaddr = %s\r\n", ipaddr_ntoa(&pppif->ip_addr));
printf(" his_ipaddr = %s\r\n", ipaddr_ntoa(&pppif->gw));
printf(" netmask = %s\r\n", ipaddr_ntoa(&pppif->
break;
}
case PPPERR_PARAM: {
printf("status_cb: Invalid parameter\r\n");
break;
}
}
}
static u32_t output_cb(ppp_pcb *pcb, u8_t *data, u32_t len, void *ctx)
{
return HAL_UART_Transmit_IT(&huart1, data, sizeof(data));
}
int main(void)
{
ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0);
}
status_cb
在不给err_code
作为参数的情况下打印什么?何时或如何评估status_cb
和output_cb
?
pppos_create
的定义如下:
ppp_pcb *pppos_create(struct netif *pppif, pppos_output_cb_fn output_cb,
ppp_link_status_cb_fn link_status_cb, void *ctx_cb)
{
pppos_pcb *pppos;
ppp_pcb *ppp;
pppos = (pppos_pcb *)LWIP_MEMPOOL_ALLOC(PPPOS_PCB);
if (pppos == NULL) {
return NULL;
}
ppp = ppp_new(pppif, &pppos_callbacks, pppos, link_status_cb, ctx_cb);
if (ppp == NULL) {
LWIP_MEMPOOL_FREE(PPPOS_PCB, pppos);
return NULL;
}
memset(pppos, 0, sizeof(pppos_pcb));
pppos->ppp = ppp;
pppos->output_cb = output_cb;
return ppp;
}
亲切的问候