2

不知道如何表达标题,但我想做的是用我的 Linux PC 测试我的微控制器以确保数据正确。经过数小时的搜索,我发现 stty 命令可以更改通过串行端口管理数据的方式,结果发现默认情况下,如果从端口接收到 xon 或 xoff 字符,则不会显示它们。起初我认为我的电脑太慢了,以至于我在 57.6Kbps 的速度下丢失了字符,但事实并非如此。

早在我在 QuickBasic for DOS 中玩串口鼠标的那一天,我可以使用这个命令来启动串口:

OPEN "com1:1200,n,7,1,op0" for binary as #1

所以我现在想做的是在 C 中创建一些简单的东西,让我能够以最原始的模式打开串行端口。我想要它,以便我提供给它的任何数据都未经修改地发送给它。我也想接收未修改的数据。因此,如果控制器决定发送 PC 将识别为特殊控制代码的字符,我仍然希望看到该字符,而不是仅仅因为字符匹配控制代码而让 PC 变得有趣。

我想到的一个想法是为 stty 程序创建一个分支,并使用几乎每个(50+?)添加到程序中的参数,这使得程序堆栈空间的要求有点高。

我想到的另一个想法是使用端口地址本身进行直接 I/O(使用 inb 和 outb),但我不确定内核是否会在数据到达端口之前通过其他任何方式运行这些命令,但我会而是将其用作最后的选择,以防我更换计算机并且串行端口值发生更改(或成为通过 USB 到串行转换器硬件制成的串行端口)。

因此,而不是 inb 和 outb 以及那些变体(如 inw),并且没有在我的程序中指定 50 多个参数来执行 stty,CI 中是否有一个函数可以使用(不需要标准 Linux 发行版中不包含的特殊库)来强制将串行端口设备作为原始设备,以便我可以在其上执行任何 I/O 而无需内核修改或删除数据?

4

0 回答 0