인프런 커뮤니티 질문&답변

진철님의 프로필 이미지
진철

작성한 질문수

HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌

UART printf 사용하기

int _write 함수 관련 문의

작성

·

509

0

안녕하세요.  임베디드 초보입니다. 강의 잘듣고있습니다.

한가지 궁금한점이 있는데, _write 함수를 정의하시고, 이를 호출하는 부분이 없는데 어떻게 printf("Hello\n")만으로 len사이즈까지 글자를 출력하는지요...

정의하신 _write 함수 호출이 없는 데 문자열 출력이 되는 것이 이해가 가지 않습니다.

 다시 말해, printf함수로만 써서는(호출해서는) hello가 터미널로 출력이 되지 않는데 _write 함수 정의를 통해 호출없이 어떻게 터미널로 출력이 되는지요?..

질문의 요지가 이해가 안가실 수도 있는데, _write 함수를 호출하지 않은데 정의를 해준 것이 근본적인 의문입니다.

답변 1

1

ChrisP님의 프로필 이미지
ChrisP
지식공유자

안녕하세요 답이 좀 늦었습니다.

질문에 대한 알림이 안떠서 확인이 늦었네요.

좋은 질문 입니다.

우리가 익히 알고있는 C언어의 문법으로는 해석이 불가능해 보이지만, IDE 마다 특수한 기능을 포함하고 있어서, _write() 함수 호출 없이도 자동으로 호출되는 거라고 이해하시면 됩니다.

TrueSTUDIO나 CubeIDE의 경우는 printf() 호출 시 그 안에서 _write()가 자동으로 호출됩니다.

따라서 우리가 명시적으로 _write() 를 호출하지 않아도 되는 것이죠.

(또한 사용자가 직접 printf() 함수 내부의 코드를 변경할 수 없습니다.)

_write() 함수를 정의하는 것을 출력 장치 재지정(?) 이라고 합니다. 영어로는 redirection 한다고 합니다.

이 redirection 하는 방법은 IDE마다 다른데, 만약 KEIL이나 IAR 같은 다른 IDE를 사용하신다면 다른 방식으로 정의해주어야 합니다.

redirection 하는 방법은 IDE의 매뉴얼에 소개되어있습니다.

이해가 좀 되셨는지 모르겠네요!

진철님의 프로필 이미지
진철

작성한 질문수

질문하기