主要讲模块的结构,不贴代码.从最外层开始.
执行read_uart_main() start /dev/ttyS1
- read_uart_main(int argc, char* argv[ ]), 入口函数;
- 判断任务进程read_uart_task是否存在;
- 根据参数启动任务进程read_uart_task, 为其分配栈空间大小, 任务优先级;
- 根据参数停止,给出任务状态等.
- 若启动任务将第二个参数传递给read_uart_thread_main(int argc, char* argv[ ]);
- read_uart_thread_main(int argc, char* argv[ ]):
- 判断是否有参数, 参数名为需要打开的串口名uart_name;
- char data = ‘0’; char buffer[4] = “”;
- uart_read = uart_init(uart_name), 初始化串口(打开串口);
- serial_fd = open(uart_name, O_RDWR | O_NOCTTY), 打开的方式为读写
- 返回serial_fd;
- set_uart_baudrate(uart_read, 9600),设置串口波特率
- 先把9600转变为B9600;
- 结构体struct termios uart_congif, 里面存放串口通讯的参数;
- tcgetattr(fd, &uart_config); 取得终端介质状态的初始值,赋值给uart_config;
- uart_config.c_oflag &= ~ONLCR;取消读换行转回车及换行;
- uart_config.c_cflag &= ~(CSTOPB | PARENB);双停止位,一校验位;
- 设置读写波特率;
- 写入config值, tcsetattr();
- while(!thread_should_exit)
- read(uart_read, &date, 1); 读取一字节数据;
- 判断是否为’X’或’Y’, 若为则循环读四次分别放入buffer[i]中;
- publish数据;
- data = ‘0’; buffer[4] = “”;
- close(uart_read);
- fflush(stdout);清空输出缓存区;
linux手册
https://linux.die.net/man/3/cfsetspeed
tremios结构体说明
https://www.cnblogs.com/li-hao/archive/2012/02/19/2358158.html
版权声明:本文为pix_csdn原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。