我正在基于atsame70q20的板上工作,我实现了一个非常小的SNMP库,并使用它来从某些控制器中查询某些OID。问题是过了一会儿它在查询OID时卡住,并由于看门狗计时器到期而重新启动。我们正在使用FreeRTOS 7.3.0和LWIP 2.1.0。我不知道如何找出卡住的地方。我放入调试语句以查找确切位置,甚至调试字符串也只是部分打印。我只是想要一些有关如何确定流程去向的指针。
lwip_sendto(lSocket,(const void *)arr,arr_len,MSG_DONTWAIT,&serverAddr,sizeof(struct sockaddr_in));
debug_puts("Stuck Here2\r\n");
memset(gv_snmpRespData,0, 512);
fd.fd = lSocket; // socket handler
fd.events = POLLIN;
wdt_restart(WDT);
debug_puts("Stuck Here3\r\n");
ret = poll(&fd, 1, 500); // 500 millisecond for timeout
switch (ret) {
case -1:
// Error
nBytes = -1;
break;
case 0:
// Timeout
nBytes = -1;
break;
default:
nBytes = lwip_recvfrom(lSocket,gv_snmpRespData,512,MSG_WAITALL,NULL,NULL);
break;
}
*pdu_arr_len = nBytes;
lwip_close(lSocket);
if(nBytes > 0)
return 0;
return 1;
我被困在Stuck Here3语句上并重新启动。