본문으로 바로가기
728x90
반응형

  요즘 계속 STM32를 사용해보고 있는데 사소한 곳에서 계속 걸려서 진행이 더디다....사실 그냥 처음 하는 사람들은 별 거부감 없이 사용하니까 진행이 빠를 수도 있는데 난 다른 프로세서를 먼저 사용하고 하는 것이라 그것과 다르게 동작할 때 무진장 해메이게 된다.

 printf도 마찬가지로 꽤 헤매고 다녔다.....일단 여기저기 강좌나 이런 것에서 시키는데로 하면 출력이 가능하다. 전 포스팅에서 살짝 다루었었는데 USART로 printf하는 방법이야 간단하다.

https://electric-lab.tistory.com/442?category=918786 

 

[STM32] USART 설정과 송수신 사용 (printf 사용 추가)

 STM32에 USART를 사용하는 방법을 정리를 해 놓겠다. 아직 STM32를 많이 사용하지 않다보니 일단 기본적인 사용법만 언급한다.  IDE는 STM32CubeIDE 1.6.1을 사용하였고 LL 드라이버를 사용하여 진행하였

electric-lab.tistory.com

 하지만.....직접 과제를 하는 도중에 출력이 안되는 상황이 발생.....

 printf("%d ", a);

 뭐 이런 식으로 출력을 하는데 출력이 나오지 않았다. 혹시나 해서 printf를 사용하지 않고 출력하니 되던데.....

 혹시나 해서 그냥 문자 출력을 했는데

 printf("Hello");

 그래도 안된다......뭐가 문제인가....한참 헤메고 찾아보고...디버깅에도 _wirte 함수에 들어가지도 않고.....

 짜증이 나는 순간....초심으로 돌아가서 보니...음....혹시.....'\n' 때문??? 비교해보니 없네....

 printf("Hello\n");

 아...된다.....뭐냐 이건.....찾아보니...STM32 IDE에서는 stdout 버퍼를 개행이 올때 처리한다고 한다.....아...그러니 이게 디버깅에도 함수 호출도 안되고 출력도 안되지....아놔....

 그럼 정리해보면 \n을 꼭 써야 나온다는 건데....너무 불합리하다.....이런식으로는 내가 원하는데로 출력하려면 번거롭다...그래서찾아보니....C,C++에 버퍼를 설정하는 함수가 있다.

https://bubble-dev.tistory.com/entry/CC-setbuf3-setvbuf3

 누군가 잘 정리해 두었다. 고로 버퍼를 사용하지 않으면 내가 원하듯 맘대로 출력이 가능하다는 말씀.....

 코드에 setbuf(stdout,NULL); 을 추가하니.....문제없이 잘 된다.....

 아 그리고....버퍼를 사용하게 되면 개행시 "\r\n"을 사용해야 개행된다. 그전에는 "\n"만으로도 개행되었지만.....

 아...고생고생.....정말 뭘 하나하기 힘드네.....

 

728x90
반응형