- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个简单的程序可以设置串行 (RS232) 端口的波特率。我正在使用 cfsetospeed()
和 cfsetispeed()
函数独立设置输入和输出速率。根据 man page ,如果我使用这些函数和适当的常量,这应该是可能的:
cfsetispeed() 将存储在 termios 结构中的输入波特率设置为速度,它必须指定为上面为 cfsetospeed() 列出的 Bnnn 常量之一。如果输入波特率设置为零,输入波特率将等于输出波特率。
cfsetospeed() 将存储在 termios_p 指向的 termios 结构中的输出波特率设置为速度,它必须是以下常量之一:
...
B600
...
B19200
我的问题是无论我设置第二个(输入还是输出)似乎都是两者的最终值。我正在尝试设置两个独立的速度。
代码:
int main() {
int fd, ret;
char buf[100] = {0};
char buf2[100] = {0};
struct termios options;
// Open the serial-USB device driver
fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if(fd < 0){
perror("open_port: Unable to open port - ");
return 1;
}
tcgetattr(fd, &options); //Get the current settings
cfsetospeed(&options, B9600); //Set input speed as 9600 Baud Rate
cfsetispeed(&options, B19200); //Set output speed as 19200 Baud Rate
ret= tcsetattr(fd, TCSANOW, &options); //Get the return to make sure it worked
sleep(3); // Just for kicks, let it "settle"
tcgetattr(fd, &options); //Read back the values
getBRate(buf, cfgetispeed(&options));
getBRate(buf2, cfgetospeed(&options));
printf("return code was: %d, ispeed %s, ospeed %s\n", ret, buf, buf2);
//Clean up
memset(buf, '0', 100);
memset(buf2, '0', 100);
close(fd);
return 0;
}
我的 getBRate()
函数只是一个简单的(丑陋的)开关,用于返回波特率的字符串版本:
void getBRate(char rate[], speed_t brate)
{
switch(brate) {
case B0: strcpy(rate,"none"); break;
case B50: strcpy(rate,"50 Baud");break;
case B110: strcpy(rate,"110 Baud");break;
case B134: strcpy(rate,"134 Baud");break;
case B150: strcpy(rate,"150 Baud");break;
case B200: strcpy(rate,"200 Baud");break;
case B300: strcpy(rate,"300 Baud");break;
case B600: strcpy(rate,"600 Baud");break;
case B1200: strcpy(rate,"1200 Baud");break;
case B1800: strcpy(rate,"1800 Baud");break;
case B2400: strcpy(rate,"2400 Baud");break;
case B4800: strcpy(rate,"4800 Baud");break;
case B9600: strcpy(rate,"9600 Baud");break;
case B19200: strcpy(rate,"19200 Baud");break;
default: strcpy(rate, "No valid baud found\n");break;
}
return;
}
这里的输出将是:
return code was: 0, ispeed 19200 Baud, ospeed 19200 Baud
如果我像这样反转两个“设置”行:
cfsetispeed(&options, B19200); //Set output speed as 19200 Baud Rate
cfsetospeed(&options, B9600); //Set input speed as 9600 Baud Rate
我的输出将变为:
return code was: 0, ispeed 9600 Baud, ospeed 9600 Baud
有什么想法吗?
编辑:
由于问题出现,此代码将在使用 Coldfire 528X(5280 或 5282)的板上运行。无论如何,根据 UART 的引用手册,RX 和 TX 应该能够有不同的速率:
23.3.4 UART 时钟选择寄存器 (UCSRn)
UCSR 选择 DTIN 输入上的外部时钟(除以 1 或 16)或预分频的内部总线时钟作为发送器和接收器的时钟源。请参见第 23.4.1 节“发送器/接收器时钟源”。发送器和接收器可以使用不同的时钟源。
最佳答案
现在我将接受@TJD 的回答作为事实 在我处理过的所有芯片中,串行端口硬件实际上只有一个波特率发生器,因此无法处理不同的 Tx 和Rx 波特率。
至于我没有看到任何错误这一事实,那是因为 tcsetattr()
的至少一个请求操作确实成功了 this page状态:
如果 tcsetattr() 函数能够执行任何请求的操作,即使无法执行某些请求的操作,它也会成功返回。
所以现在,我猜硬件没有能力支持这个,但我从 set 函数中成功返回,因为它设置了我请求的两个东西之一。
关于c - 为什么输入和输出波特率总是一样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920108/
我正在使用 OUTFILE 命令,但由于权限问题和安全风险,我想将 shell 的输出转储到文件中,但出现了一些错误。我试过的 #This is a simple shell to connect t
我刚刚开始学习 Java,我想克服在尝试为这个“问题”创建 Java 程序时出现的障碍。这是我必须创建一个程序来解决的问题: Tandy 喜欢分发糖果,但只有 n 颗糖果。对于她给第 i 个糖果的人,
你好,我想知道我是否可以得到一些帮助来解决我在 C++ 中打印出 vector 内容的问题 我试图以特定顺序在一个或两个函数调用中输出一个类的所有变量。但是我在遍历 vector 时收到一个奇怪的错误
我正在将 intellij (2019.1.1) 用于 java gradle (5.4.1) 项目,并使用 lombok (1.18.6) 来自动生成代码。 Intellij 将生成的源放在 out
编辑:在与 guest271314 交流后,我意识到问题的措辞(在我的问题正文中)可能具有误导性。我保留了旧版本并更好地改写了新版本 背景: 从远程服务器获取 JSON 时,响应 header 包含一
我的问题可能有点令人困惑。我遇到的问题是我正在使用来自 Java 的 StoredProcedureCall 调用过程,例如: StoredProcedureCall call = new Store
在我使用的一些IDL中,我注意到在方法中标记返回值有2个约定-[in, out]和[out, retval]。 当存在多个返回值时,似乎使用了[in, out],例如: HRESULT MyMetho
当我查看 gar -h 的帮助输出时,它告诉我: [...] gar: supported targets: elf64-x86-64 elf32-i386 a.out-i386-linux [...
我想循环遍历一个列表,并以 HTML 格式打印其中的一部分,以代码格式打印其中的一部分。所以更准确地说:我想产生与这相同的输出 1 is a great number 2 is a great
我有下面的tekton管道,并尝试在Google Cloud上运行。集群角色绑定。集群角色。该服务帐户具有以下权限。。例外。不确定需要为服务帐户设置什么权限。
当尝试从 make 过滤非常长的输出以获取特定警告或错误消息时,第一个想法是这样的: $ make | grep -i 'warning: someone set up us the bomb' 然而
我正在创建一个抽象工具类,该类对另一组外部类(不受我控制)进行操作。外部类在某些接口(interface)点概念上相似,但访问它们相似属性的语法不同。它们还具有不同的语法来应用工具操作的结果。我创建了
这个问题已经有答案了: What do numbers starting with 0 mean in python? (9 个回答) 已关闭 7 年前。 在我的代码中使用按位与运算符 (&) 时,我
我写了这段代码来解析输入文件中的行输入格式:电影 ID 可以有多个条目,所以我们应该计算平均值输出:**没有重复(这是问题所在) import re f = open("ratings2.txt",
我需要处理超过 1000 万个光谱数据集。数据结构如下:大约有 1000 个 .fits(.fits 是某种数据存储格式)文件,每个文件包含大约 600-1000 个光谱,其中每个光谱中有大约 450
我编写了一个简单的 C 程序,它读取一个文件并生成一个包含每个单词及其出现频率的表格。 该程序有效,我已经能够在 Linux 上运行的终端中获得显示的输出,但是,我不确定如何获得生成的显示以生成包含词
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
1.普通的输出: print(str)#str是任意一个字符串,数字··· 2.格式化输出: ?
我无法让 logstash 正常工作。 Basic logstash Example作品。但后来我与 Advanced Pipeline Example 作斗争.也许这也可能是 Elasticsear
这是我想要做的: 我想让用户给我的程序一些声音数据(通过麦克风输入),然后保持 250 毫秒,然后通过扬声器输出。 我已经使用 Java Sound API 做到了这一点。问题是它有点慢。从发出声音到
我是一名优秀的程序员,十分优秀!