simavr에는 이미 UART랑 pty랑 연결시켜주는 기능이 있..어요! examples/parts 폴더에 있어요.
하지만 이걸 소스코드에서 따로 안쓰고 있답니다! (예제에는 이걸 어떻게 쓰는 지 나와있어요.)
이걸 쓰는 방법은 examples/board_simduino의 simduino.c에 있었어요. 분석해봅시다!
examples/board_simduino/simduino.c
42:#include "uart_pty.h"
48:uart_pty_t uart_pty;
188: uart_pty_stop(&uart_pty);
242: uart_pty_init(avr, &uart_pty);
243: uart_pty_connect(&uart_pty, '0');
오! 짱쉽네요! 이것만 해주면 되는거였어요! (uart_pty_connect의 '0'은 해당 UART 포트명에 따라 UART0은 '0', UART1은 '1' 이렇게 해주시면 되요.)
(어떻게 돌아가는지 보려고 uart_pty.c 분석한 것은 안비밀)
simavr/sim/run_avr.c에 저걸 추가해주어요!
uart_pty.h를 인클루드시키고..
uart_pty_t uart_pty를 선언해주고..
이제 include 경로랑 소스 경로를 추가해줍시당!
simduino의 Makefile을 참조해보아요.
Makefile에서 IPATH += ../examples/parts를 IPATH 설정 부분 밑부분에 넣어주고.. VPATH += ../examples/parts도 넣어주죠.
sim := 어쩌구 되있는부분에 ${wildcard ../examples/parts/uart_pty.c}를 넣어요!
그 다음에 make하고.. SIMAVR_UART_XTERM=1을 환경변수에 넣은 채로 실행하면 xterm창(X-Window고 GUI에요)이 떠요!
simavr은 참 좋은게, hackable해요!
소스 분석해보면서 symexec avr로 한번 포팅해봐야겠어요.