2016-10-26 4 views
0

aRESTESP8266을 사용 중입니다. 작업을 수행 할 때까지 클라이언트의 요청을 보관하는 개인화 된 방법을 만들고 싶었습니다. 그러나 simnple (true)은 즉시 보드를 재부팅합니다.ESP8266 + aRest 메모리 부족 및 재부팅

개인화 된 기능 내의 이러한 블록이 ESP8622를 재부팅하는 이유는 무엇입니까? 다른 방법으로도 해낼 수 있습니까?

int receiveCommand(String command){ 

    int timeStart = millis(); 

    while(true){ 

    //My code goes here 

    //Waits for action during TIMEOUT seconds then breaks this loop and 
    //Returns something suitible to the client 

    if((millis() - timeStart) > TIMEOUT){ 
     return 0;   
    } 
    } 
    return 1; 
} 
+1

동결을 막기 위해'yield()'일명'delay (0)'을 루프에 추가하면됩니다. – dandavis

답변

1

esp는 단일 스레드 마이크로 컨트롤러입니다. 한 번에 한 가지만 할 수 있다는 뜻입니다. 그리고 모든 wifi/ip 스택과 함께 프로그램을 실행해야합니다.

while 루프는 기본적으로 항상 돌아가며 마이크로 컨트롤러가 다른 작업 (예 : 와이파이 처리)을 수행하도록 제어하지 않습니다.

esp는 주 프로그램이 응답하지 않을 경우 재부팅하도록 설계되었습니다. 기본적으로 당신이 만들고있는 것 : esp는 끝이없는 반복이기 때문에 더 이상 책임지지 않습니다.

esp 프레임 워크에는 일반적인 작업을 차단하지 않고 작업을 수행 할 수있는 이벤트 접근 방식이 있습니다. 코드에서 esp를 막지 않도록 프로그램을 수정해야합니다.

+0

당신이 말하는 것을 얻을 수 있습니다. 내 접근 방식을 약간 변경하고 타이머를 사용하여이 비동기식 코드를 정기적으로 호출합니다. –