繁体   English   中英

用于Linux和WIN32的RS-232无法在Linux上接收数据

[英]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开发板(像大多数嵌入式系统一样)不必理会硬件握手线路,因此这可能就是全部原因。

可以尝试的一些事情包括:

  • 您可以在Windows上使用Hyperterm或在Linux上使用某些终端仿真器与董事会对话吗?
  • 您使用了哪些设置?
  • 使用终端仿真器与开发板对话后,程序是否开始运行?

编辑:初读时缺少“ linux”标签,因此我对其进行了编辑,以降低OP具有Windows的假设。 尽管这两个平台之间有关串行端口的所有详细信息都不相同,但是完整配置以匹配线路另一端的需求仍然相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM