Я работаю на плате, основанной на 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;
Я застреваю на заявлении Застрял Здесь3 и перезагружается.