직렬 통신picocom 원본 분석
2847 단어 c 언어
1. Main 입구 분석
picocom.c 파일은main 포털 파일로 다른 프로그램과 마찬가지로 초기화됩니다.
int
main (int argc, char *argv[])
{
....
parse_args(argc, argv);//
establish_signal_handlers();//
r = term_lib_init();//terminal
...
//
log_fd = open(opts.log_filename,
O_CREAT | O_RDWR | O_APPEND,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
...
//
tty_fd = open(opts.port, O_RDWR | O_NONBLOCK | O_NOCTTY);
//
term_set(...)
/****** 2 set_dtr_rt();----------- *****/
/* Set DTR and RTS status, as quickly as possible after opening
the serial port (i.e. before configuring it) */
set_dtr_rts();
r = term_apply(tty_fd, 0);
if ( r < 0 )
fatal("failed to config port: %s",
term_strerror(term_errno, errno));
/* Set DTR and RTS status *again* after configuring the port. On
some systems term_apply() resets the status of DTR and / or
RTS */
set_dtr_rts();
/*** ------ , -------- ***/
if ( !opts.quiet && !opts.noinit && show_status(1) != 0 )
...
/******* --------- ------------ ******/
ler = loop();
주 처리 함수 loop()
select를 통해 파일 부호집 (rdset, wrset), 매개 변수opts.exit_after가 차단 시간을 설정할 지 여부입니다.memmove와memcpy의 용법 차이에 주의하십시오.
while ( ! sig_exit ) {
....
r = select(tty_fd + 1, &rdset, &wrset, NULL, ptv);
...
n = read(STI, buff_rd, sizeof(buff_rd));// STI, terminal,
...
n = read(tty_fd, &buff_rd, sizeof(buff_rd));// ,
...
n = write(tty_fd, tty_q.buff, sz);// tty_q.buff, STI ,
...
}
STI 분석 읽기
다음 코드에서 ttyq_push 함수는 사용자가 STI에 있는 모든 문자를 분석하고 enter\삭제 키 등을 처리합니다.tty_q_push 모든 문자를tty 에 저장합니다q.buff 중,
for ( i = 0; i < n; i++ ) {
c = buff_rd[i];
switch (state) {
case ST_COMMAND:
if ( c == opts.escape ) {
/* pass the escape character down */
if ( tty_q_push((char *)&c, 1) != 1 )
fd_printf(STO, "\x07");
} else {
/* process command key */
if ( do_command(c) )
/* picocom exit */
return LE_CMD;
}
state = ST_TRANSPARENT;
break;
case ST_TRANSPARENT:
if ( ! opts.noescape && c == opts.escape )
state = ST_COMMAND;
else
if ( tty_q_push((char *)&c, 1) != 1 )
fd_printf(STO, "\x07");
break;
default:
assert(0);
break;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 간단한 파일 r/w 조작 방법데이터의 입력과 출력은 거의 모든 C 언어 프로그램과 수반된다. 입력이란 원본에서 데이터를 얻는 것이다. 출력은 단말기에 데이터를 쓰는 것으로 이해할 수 있다.이곳의 원본은 키보드, 마우스, 하드디스크, 시디, 스캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.