stdio h 다운로드

매크로 fdev_setup_stream()는 stdio를 사용하여 작업을 위해 사용자 제공 FILE 버퍼를 준비하기 위해 제공됩니다. 편의를 위해 읽기 위해 스트림을 여는 fdevopen()에 대한 첫 번째 호출은 결과 스트림을 stdin에 별칭으로 만들어줍니다. 마찬가지로 쓰기를 위해 스트림을 여는 fdevopen()에 대한 첫 번째 호출은 결과 스트림이 stdout 및 stderr 모두에 별칭이 됩니다. 따라서 읽기 및 쓰기 의도 모두에서 열기가 수행된 경우 세 개의 표준 스트림이 모두 동일합니다. 이러한 별칭은 서로 구별할 수 없으므로 이러한 스트림에서 fclose()를 호출하면 모든 별칭도 효과적으로 닫힙니다(주 3). 줄 바꿈 자체를 캐리지 리턴으로 자동 변환하면 줄 바꿈 시퀀스가 이진 전송을 중단합니다. 이진 전송이 필요한 경우 자동 변환을 수행할 수 없지만 대신 CR-LF 시퀀스를 발행하려는 문자열은 “rn”을 명시적으로 사용해야 합니다. fdevopen()에 대한 대체 방법으로 매크로 fdev_setup_stream()를 사용하여 사용자가 제공한 FILE 구조를 설정할 수 있습니다. 표준 스트림은 stdin, stdout 및 stderr가 제공되지만 Avr-libc는 적용 가능한 장치에 대한 지식이 없기 때문에 C 표준과 는 반대로 이러한 스트림은 응용 프로그램 시작 시 이미 미리 초기화되지 않습니다.

또한 avr-libc에 “file”이라는 개념이 없으므로 스트림을 일부 장치에 연결하는 데 사용할 수있는 함수 fopen()이 없습니다. (참고 1 참조) 대신 fdevopen() 함수는 스트림을 장치에 연결하기 위해 제공되며, 여기서 장치는 문자를 보내거나 문자를 수신하거나 둘 다를 수신하는 기능을 제공해야 합니다. avr-libc 내부의 “텍스트”와 “바이너리” 스트림 사이에는 차이가 없습니다. 문자 n은 문자 그대로 장치의 put() 함수로 전송됩니다. 장치에서 줄 피드 전에 캐리지 리턴(r) 문자를 보내야 하는 경우 put() 루틴에서 이를 구현해야 합니다(참고 2 참조). 이것은 기본적으로 유닉스 접근 방식을 따릅니다: 터미널과 같은 장치가 특별한 처리가 필요한 경우, 이 기능을 제공하기 위해 터미널 장치 드라이버의 도메인에 있습니다. 따라서 UART 인터페이스와 대화하는 fdevopen()에 적합한 간단한 함수는 다음과 같이 보일 수 있습니다. 마이크로 컨트롤러의 제한된 환경에서는 이러한 옵션이 바람직하지 않은 경우가 많므로 malloc()없이 완전히 실행될 수 있는 대체 옵션이 제공됩니다. 이 파일은 avr-libc에서 구현되는 표준 IO 시설을 선언합니다. 기본 하드웨어의 특성으로 인해 제한된 표준 IO 하위 집합만 구현됩니다. 사용할 수 있는 실제 파일 구현이 없으므로 장치 IO만 수행할 수 있습니다. 운영 체제가 없기 때문에 응용 프로그램은 표준 IO 시설에서 사용할 수 있도록 장치에 대한 충분한 세부 정보를 제공해야 합니다.

fdev_set_udata()를 사용하여 추가 사용자 데이터를 스트림에 연결할 수 있습니다. 그런 다음 백 엔드 넣기 및 get 함수를 사용하여 이 사용자 데이터를 추출하고 fdev_get_udata() 적절하게 작동할 수 있습니다. 예를 들어 단일 put 함수를 사용하여 두 개의 서로 다른 UART와 대화하거나 put 및 get 함수가 호출 사이에 내부 상태를 유지할 수 있습니다. 프로그래머가 코드 크기와 기능 절충을 허용하기 위해 printf 제품군의 핵심인 함수 vfprintf()는 링커 옵션을 사용하여 다양한 맛으로 선택할 수 있습니다. 자세한 설명은 vfprintf() 설명서를 참조하십시오. vfscanf() 및 scanf 함수 제품군에도 동일하게 적용됩니다. fopen()과 호환되는 장치 추상화를 구현할 수 있었지만 문자열을 구문 분석하고 이 문자열에서 필요한 모든 정보를 꺼내거나 필요한 추가 테이블에서 꺼내야 하기 때문에 응용 프로그램에서 제공하는 이 방법은 수행되지 않았습니다.

stdio h 다운로드
Scroll to top