为PX4添加串口通讯模块(模块结构)

主要讲模块的结构,不贴代码.从最外层开始.

执行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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值