首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何向ttyACM0设备写入命令并使用C/C++获取生成的信息数据

如何向ttyACM0设备写入命令并使用C/C++获取生成的信息数据
EN

Stack Overflow用户
提问于 2015-05-08 14:42:43
回答 1查看 3.1K关注 0票数 1

我目前的任务是从一个解码器中检索数据,这个解码器可以监控机械臂的6个关节位置。此设备具有作为串行CDC设备运行的USB接口。ASCII命令集允许主机配置每个轴的分辨率和设置访问方法。每个轴的当前位置以工程单位或原始二进制(转换为ASCII)以用户定义的速率输出。命令协议类似于USB串行协议(这里有解码器技术手册的链接:http://www.soc-robotics.com/pdfs/Quad6X%20Technical%20Manual.pdf)

使用Ubuntu时,当我在终端中输入"dmesg“时,这个设备就会变成一个”ttyACM0“设备。我得到的最多的是使用"screen /dev/ttyACM0“,这允许我输入这些串行命令,并通过终端查看输出信息,然而,这并没有完成我试图实现的任务。

我正在尝试编写一些C/C++代码,使程序能够将这些串行命令写入ttyACM0设备,以检索设备作为结果输出的信息数据。这是最终将在ROS中使用的代码,以允许使用获得的数据在每个机器人手臂关节中进行位置反馈控制。

老实说,这是我用收集到的信息将其中一个命令写入ttyACM0文件时所能想到的最好的结果:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    fp = fopen("/dev/ttyACM0", "w");

    if(fp == NULL)
    {
        perror("File failed to open");
        exit(1);
    }

    fprintf(fp, "i");


    fclose(fp);

    return 0;
}

有人知道怎么解决这个问题吗?有没有一种方法可以让我完成我在终端中实现的代码,但满足我的需求?我在论坛上遇到了许多死胡同,只告诉你如何通过终端或如何为Arduino及其编译器做这件事。我正绞尽脑汁试图弄清楚这件事,非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2015-05-08 16:16:28

在POSIX环境中串行链路编程的权威资源是"Serial Programming Guide for POSIX Operating Systems"。请注意,对于CDC ACM设备,可以配置的内容不多。即使你试了试,这个设备也可以愉快地忽略所有关于波特率、字长等的信息。

实际上,使用CDC ACM,您在那里所做的大部分工作都是正确的。但是,stdio的所有缓冲都会阻碍您的工作。随意添加fflush调用会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30118920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档