제 목적에 맞게 함수를 수정하려고합니다.C on ARM - UART 수신 대기
int getc0 (void)
{
while ((U0LSR & 0x01) == 0); //Wait for character
return U0RBR;
}
위의 코드는 직렬 포트 0에서 문자를 수신 할 때까지 함수가 멈추게하고 반환합니다. 나는 이렇게 while 루프를 사용했다.
while((str = getc0())!='\r'){
strcat(&route_buffer,&str);
}
그래서 지금은 반환 캐리지가 직렬 포트를 통해 수신되며,이 전에 각 문자가 버퍼에 복사 될 때까지 기다리고 있습니다. 내 문제는 현재 데이터를 읽는 중 일부 문제가 있습니다. 문제가있는 곳을 확인하지 못합니다. 리턴 마차 나 줄 바꿈을 정확하게 인식하지 못하는 경우도 있지만 출력에 따라 달라집니다. 일단 완성되면 모든 것을 파일로 저장해야하므로이 사실을 알고 있습니다.하지만이 작업을 수행하려면 while 루프에서 i! = 5를 갖고 5 문자 만 읽어야합니다. 내가 20에 그것을 다시 응답하지 않으며 다른 것을 읽지 않는 것처럼 보입니다. (비록 내가 uart를 통해 데이터를 보내고 있습니다.)
X 시간 동안 읽은 다음 계속하기 위해 수정할 수있는 방법이 있습니까? 나머지 기능 은요?
편집 :
char route_data[512], route_buffer[200];
편집 2 :
char *str;
좋아, 여기에 내가 사용자 입력에 읽는 쓴 함수입니다;
char* readInput(void){
userinput = 0;
str = 0;
while((str=getc0())!='\r'){
strcat(&userinput,&str);
}
return &userinput;
}
이렇게 불린다.
strcat(config.nodeid,readInput());
이것은 많이 불리지 만 그것은 내가 어떻게 부르는지의 한 예입니다. 그 다음 파일로 출력하고 100 % 시간 동안 작동합니다.
아마도 전체적인 문제를 설명하는 데 도움이 될 것입니다. 직렬 포트 (RX 및 TX)에 무선 모듈이 연결된 ARM 보드가 있습니다. 위의 readInput 함수는 텔넷으로 무선 모듈에 연결 한 사용자의 입력을 읽는 데 사용되며 ARM 보드가 사용자의 모든 입력을 읽을 수 있도록합니다. 지금 달성하려는 것은 무선 모듈에서 명령을 실행 한 후 입력을 읽는 것입니다. printf 문을 사용하면 명령문을 명령문에 넣음으로써 명령을 실행할 수 있습니다. 실현하기 위해 필요한 것은 무선 모듈의 출력을 읽는 것입니다. 이것이 내가 어려움을 겪고있는 곳입니다. 나는 약간의 산출물을 얻고있다. 그러나 그것은 예상되는 것이 아니고 매우 제한적이지만 모듈로부터 명백하게 무언가이다.
route_buffer에 대한 정의를 보여주십시오. – Throwback1986
'str'은 어떻게 정의되어 있습니까? 'route_buffer'는 어떻게 정의되어 있습니까? 'str'은'int'이어야하고,'getc0()'함수와 호환 될 수 있고'int'를'strcat()'에 넘길 수 없습니다! – pmg
요청한 정보를 포함하도록 위 내용을 수정했습니다. 5 분을 주면 위의 내용을 수행 한 이유와이를 확인하기 위해 수행 한 작업이 확장됩니다. – Draineh