Как отлаживать, где застрял микроконтроллер? - PullRequest
0 голосов
/ 18 марта 2019

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

...