Spa*_*ler 3 c serial-port baud-rate
函数cfsetospeed和cfsetispeed 以波特率为类型speed_t:
int cfsetispeed(struct termios *termios_p, speed_t speed);
int cfsetospeed(struct termios *termios_p, speed_t speed);
Run Code Online (Sandbox Code Playgroud)
类型speed_t基本上是一个整数,但转换不是解决方案,从 中的波特率定义可以看出termios.h:
#define B0 0x00000000
#define B50 0x00000001
#define B75 0x00000002
// ...
#define B9600 0x0000000d
#define B19200 0x0000000e
#define B38400 0x0000000f
Run Code Online (Sandbox Code Playgroud)
当我处理用户输入(例如来自文件)时,我将字符串(例如“9600”)转换为整数 9600,然后转换为 B9600。我基本上是在寻找一种通用的方法来转换以下内容:
// 0 -> B0
// 50 -> B50
// 75 -> B75
// ...
// 9600 -> B9600
// 19200 -> B19200
// 38400 -> B38400
Run Code Online (Sandbox Code Playgroud)
单程从变换int(如9600)到speed_t(如B9600)是一个开关的情况下的结构。有没有更好的方法来实现这一目标?
我遇到需要这个。在此处粘贴 switch case 语句供您复制。
int get_baud(int baud)
{
switch (baud) {
case 9600:
return B9600;
case 19200:
return B19200;
case 38400:
return B38400;
case 57600:
return B57600;
case 115200:
return B115200;
case 230400:
return B230400;
case 460800:
return B460800;
case 500000:
return B500000;
case 576000:
return B576000;
case 921600:
return B921600;
case 1000000:
return B1000000;
case 1152000:
return B1152000;
case 1500000:
return B1500000;
case 2000000:
return B2000000;
case 2500000:
return B2500000;
case 3000000:
return B3000000;
case 3500000:
return B3500000;
case 4000000:
return B4000000;
default:
return -1;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要一个查找表,但不是一个简单的查找表:
#include <stdio.h>
#include <termios.h>
struct
{
int rawrate;
int termiosrate;
} conversiontable[] =
{
{0, B0},
{50, B50},
{75, B75},
// you need to complete the table with B110 to B38400
};
int convertbaudrate(int rawrate)
{
for (int i = 0; i < sizeof(conversiontable) / sizeof(conversiontable[0]); i++)
{
if (conversiontable[i].rawrate == rawrate)
{
return conversiontable[i].termiosrate;
}
}
return -1; // invalid baud rate
}
int main()
{
printf("%d -> %d\n", 50, convertbaudrate(50));
printf("%d -> %d\n", 75, convertbaudrate(75));
}
Run Code Online (Sandbox Code Playgroud)
那应该自动解释。如果没有,请评论。
| 归档时间: |
|
| 查看次数: |
3326 次 |
| 最近记录: |