프로세서의 온도를 읽는 i2c 온도 모듈이있는 장치가 있습니다. 우리는 i2c에서 온도 값을 읽은 다음 사용자에게 제시합니다. 이 printf
은 i2c 프로세스와 전혀 관련이없는 함수 안에 있습니다. 우리는 I2C에서 읽을이 printf
값의 끝에서 하나의 느낌표를 삭제하면, 이제I2C 모듈 값 읽기와 간섭하는 Printf
endProcessFunction(int dummy){
printf("App_host: Error Handler Started!!");
App_sendEvent(APP_CMD_ERROR_COND);
sleep(1);
sendIpcMsg(some_signal,2,some_thread);
appEndState = 1;
syncRunning = 0;
distRecRunning = 0;
sem_post(&distRecSem);
App_sendEvent(APP_CMD_APPHOST_FAIL);
}
정상 (섭씨 35 ° 부근)하지만 우리는 컴파일하면 두 개의 느낌표와 함께 실행 :이 기능입니다 , i2c는 항상 FFFF (16 비트 정수 최대 값)를 읽습니다. 나는 무슨 일인지 모르겠지만 우리가 시도했습니다
,
- 는
string
의 끝에서"\n"
퍼팅 다른 기능 (의심 힙 크기 문제) - 에서 일부
printf
전화를 사용하지 않도록 설정 우리가 작동하지 않을 생각
printf
전화를 이동 등)하지 않았다
이 함수는 다른 스레드가있는 무한 루프를 중지하고 이후에 주 스레드를 종료합니다. 따라서 프로그램에서 복구 할 수없는 문제가 발생했을 때만 호출됩니다. 이 함수가 호출 된 경우 우리는 어쨌든 i2c에서 값 판독 값을 볼 수 없습니다.
또한이 문제는 기술적으로 발생하지 않지만 수정 사항이 아니라 해킹입니다. 그래서 나는 실제 해결책을 찾고 있습니다.
(여전히 프로그램에서 다른 printf 호출을 제거했지만) 여전히 힙 크기 문제 일 수 있습니까? 긴 문자열 크기로이 작업을 할 수있는 다른 방법은 없을까요?
이것은 이해가되지만, 프로그램을 종료 할 때를 제외하고 결코 사용할 수없는'printf()'함수가 사용됩니다. 따라서 프로그램에 실제로 지연이 없어야합니다. –