[英]RS-232 for Linux and WIN32 cannot receive data on Linux
我试图从Linux上的Arduino板上接收字符,但是该库不返回任何字符。 编码:
#include "rs232.h"
#include <time.h>
#include <stdio.h>
void main() {
int res = OpenComport(16, 9600);
printf("Open port result: %d\n\n\n", res);
unsigned char *buf;
while(1) {
int n = PollComport(16, buf, 255);
printf("n: %d\n", n);
sleep(1);
}
CloseComport(16);
}
更严重的是,您从未真正分配过用于存储字符的内存。 如果接收到任何内容,它们将被写入内存中某个随机位置,由变量buf
的未初始化值标识。
您可能想要更多类似的东西
int main(int argc, char **argv) {
char buf[256];
int res = OpenComport(16, 9600);
printf("Open port result: %d\n\n\n", res);
while(1) {
int n = PollComport(16, buf, sizeof(buf)-1);
printf("n: %d\n", n);
sleep(1);
}
CloseComport(16);
}
还有其他几种。 首先,对于托管程序,使用main()
的完整签名是公认的惯例。 这样可以更轻松地获取命令行参数并向shell报告成功或失败。 这只是一个一次性的东西,因此在这里不那么重要。 其次,您在合法的C99而不是合法的C89的地方声明了变量buf
。 大量的代码仍然是C89,并且在假定使用C99环境时,通常应格外小心。 值得注意的是,Microsoft编译器一直在跟不上标准。 您没有提供选择串行端口的方法,而是使用代码16将对ttyUSB0的引用进行了硬连线。这在Windows上将是一个问题。
我还注意到,该库对可能要在串行端口上执行的其他类型的配置保持沉默。 它允许您指定波特率,但不能指定字节宽度或奇偶校验。 我真正关心的是,它没有提到硬件或软件握手,例如,Windows COM端口通常默认为假定将使用硬件握手。 我不是偶然知道linux ttys默认使用什么握手和其他配置,但是会有默认设置。 IIRC,Arduino开发板(像大多数嵌入式系统一样)不必理会硬件握手线路,因此这可能就是全部原因。
可以尝试的一些事情包括:
编辑:初读时缺少“ linux”标签,因此我对其进行了编辑,以降低OP具有Windows的假设。 尽管这两个平台之间有关串行端口的所有详细信息都不相同,但是完整配置以匹配线路另一端的需求仍然相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.