termios.h 中的波特率限制是多少?

What is the baudrate limit in the termios.h?

这是我一直在使用的用于与微控制器接口的串行程序中的一小段代码。该代码已被验证可以工作,但我想添加全局定义以使代码更加模块化。显示的摘录有效,直到我将 'cfsetispeed' 中的 'B1000000' 替换为全局 'BAUDRATE'.

// Globals
struct termios tty;
char BAUDRATE = B1000000;     // 1,000,000

// All of the other details omitted ( int main (), etc. )
cfsetospeed (&tty, BAUDRATE);
cfsetispeed (&tty, B1000000);

所以想到两个问题:

1) 我读到 Termios 只允许 select 波特率,the max listed 是 230,400。怎么允许100万?

2) 为什么 cfsetispeed( ) 不允许将全局字符定义作为参数?

  1. Termios 接受波特率作为位标志,但有 other baud rates available to the speed_t structure in termbits.h (linked code for kernel v5.3.11) 未在 man7 页面上列出或 linux.die.net 范围从 460800 到 4000000。

编辑:之前的 link 提供已失效,我设法在较新版本中找到了等效项,所以这里是摘录以防它再次失效:

#define CBAUDEX 0010000
#define    BOTHER 0010000
#define    B57600 0010001
#define   B115200 0010002
#define   B230400 0010003
#define   B460800 0010004
#define   B500000 0010005
#define   B576000 0010006
#define   B921600 0010007
#define  B1000000 0010010
#define  B1152000 0010011
#define  B1500000 0010012
#define  B2000000 0010013
#define  B2500000 0010014
#define  B3000000 0010015
#define  B3500000 0010016
#define  B4000000 0010017
  1. cfsetispeed 接受 speed_t 类型的波特率。 speed_t 被类型定义为 termbits.h 中 "unsigned int" 类型的对象,它比您传入的字符大(32 位对 8 位)。