- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
据我所知,了解如何读取和写入 /dev/serial/by-id/*arduino*
开发节点的最佳资源之一是此链接:
http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/
但是,他的 serialport_read_until
闻起来很可疑。 serialport_read_until(fd, buf, '\n')
和 fgets(buf, bufsize, fptr)
不一样吗?换句话说,是什么阻止我在文件描述符上使用 fdopen
来获取 FILE *fptr
,然后使用 fgets
/ fscanf
/fgetc
?
我试过这种方法。 fputc
之类的写入调用有效,但读取调用失败并显示 errno = 0
。
初始化代码:
devfd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY);
int devfl = fcntl(devfd, F_GETFL);
// Serial/terminal options
termios termopts;
if (tcgetattr(devfd, &termopts))
throw;
// No parity; No flow control; One stop bit
// Select 8 data bits
// local ownership; read enabled
termopts.c_cflag = CS8 | CLOCAL | CREAD;
// No canonical features; raw mode; no echo
termopts.c_lflag = 0;
// No input processing features; raw mode
termopts.c_iflag = 0;
// No output processing features; raw mode
termopts.c_oflag = 0;
if (cfsetispeed(&termopts, B115200)) // 115200 baud in
throw;
if (cfsetospeed(&termopts, B115200)) // 115200 baud out
throw;
// Read timeout
termopts.c_cc[VTIME] = 10; // Time out after 1s
termopts.c_cc[VMIN] = 0; // Wait for each character
if (tcsetattr(devfd, TCSANOW, &termopts))
throw;
devf = fdopen(devfd, "r+");
if (!devf)
throw;
读写函数:
void dputc(char comm)
{
if (fputc(comm, devf) == EOF)
throw;
if (fflush(devf))
throw;
}
void dputs(const char *str)
{
if (fputs(str, devf) < 0)
throw;
if (fflush(devf))
throw;
}
void dprintf(const char *str...)
{
va_list ap;
va_start(ap, str);
int n = vfprintf(devf, str, ap);
va_end(ap);
if (n < 1)
throw;
if (fflush(devf))
throw;
}
阅读代码:
unsigned short f;
if (fscanf(devf, "%hu", &f) < 1)
throw;
知道为什么这样阅读会失败吗?
谢谢。
最佳答案
我解决了这个问题。有很多问题:
/var/lock
的组是错误的。当它应该是 lock
时,它被设置为 root
。lock
也不属于dialout
组。/dev/ttyACM*
后面的驱动程序看到新文件句柄时,Arduino 都会自动重启。这个 Arduino Uno 在 handle 打开后需要相当长的时间才能访问( > 1s )。这是通过从 Arduino 发送启动消息并在文件句柄打开后在 Linux 客户端中等待它来解决的。FILE*
函数起作用。但是,它不喜欢在同一个句柄上读写;它搞砸了寻求。我必须有两个单独的描述符和两个单独的 FILE*
。O_NONBLOCK
。警告 Arduino 驱动程序员!
关于c - 使用 FILE* 从 Arduino tty 中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7276797/
我正在阅读The TTY demystified ,试图对 tty、pty 有一些了解。 读完前半部分。当我在 xterm 或 ssh 中输入一些命令时,我无法全面了解整个事情是如何工作的。 下图是我
假设我登录到终端 tty1,现在我想从 tty1 运行一个脚本,它会自动让我登录到 tty2、tty3、tty4。当然,我不想到处输入密码和用户名,因为我已经在 tty1 上进行了身份验证。 问题:如
为什么在我将 CentOS 作为 Docker 容器启动后,当我运行 tty 时,我得到: # tty not a tty 不是 tty 的原因是什么? 最佳答案 docker run 不会模拟 TT
我正在尝试通过 php 安装 composer,如他们的网站所述。 php -r "readfile('https://getcomposer.org/installer');" | php 但它显示
我正在运行一个 docker 容器并正在检查它。我发现 "Config": { "Hostname": "amb1.service.consul", "Domainname": "", "User":
我想用 2 个 xterm 窗口调试控制台 linux 应用程序:一个窗口用于 gdb,另一个用于应用程序(例如 mc)。 我现在要做的是在第二个 xterm 窗口中运行“tty && sleep 1
docker exec -it 命令返回以下错误“无法在非 tty 输入上启用 tty 模式” level="fatal" msg="cannot enable tty mode on non tty
这是命令的输出: Step 5/7 : RUN ./vendor/bin/laravel new --force testapp ---> Running in dc92e378b12a Craft
请帮助 MySQL Git Bash winpty mysqldump。 “winpty mysqldump”在 Git Bash 中不工作。这里是错误的详细信息: Git 狂欢 $ winpty m
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我一直在试图弄清楚 TTY 驱动程序是如何工作的(充分理解每个内核的实现可能不同),并且偶然发现了一篇不错的文章:The TTY demystified 但是我注意到它声称 xterm 没有 stdi
我正在使用 fork() 和 execvp() 来生成一个进程,该进程必须相信它已连接到交互式终端才能正常运行。 生成后,我想捕获进程的所有输出,并能够将输入发送到进程。 我怀疑 psuedo-tty
我在 ReactJs + 样式组件中遇到这个错误。我该如何解决? Compiled with problems: ERROR in ./node_modules/colorette/index.js
我在 ReactJs + 样式组件中遇到这个错误。我该如何解决? Compiled with problems: ERROR in ./node_modules/colorette/index.js
你好,这是我的脚本: import sys import LED import os import subprocess if __name__ == '__main__': LED_BLUE
我有几个问题。一,如何确定程序使用的 TTY,然后将其作为参数传递给另一个程序? 此外,我正在使用 writevt 程序,并将字符串发送到 TTY 设备。它工作正常,但不使用我发送它的回车符。所以,我
我想从内核空间写入 tty,并且只能访问该特定 tty 的主要和次要设备号。 我通过系统调用进入内核,该系统调用工作正常,并且能够通过使用写入当前 tty my_tty = current->sign
我最近注意到我的系统(运行在 AT91SAM9G15 上)有一个非常奇怪的行为:尽管我一直在读取串行端口,但 TTY 驱动程序有时需要 1.2 秒才能从输入队列传送数据。事情是:我没有丢失任何数据,只
我在没有屏幕的硬件上运行 linux,并将所有数据转储到串口。我正在通过 hyperterm 或 teraterm 等应用程序阅读 linux 序列。我得到了正确格式化的串行输出。但是,如果我将该输出
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!