Linux的TTY子系统(TTY框架)的重要结构体termios的`c_iflag`字段的BRKINT选项和IGNBRK选项的含义【详解串口的BREAK信号】

引言

要搞清楚结构体termios的c_iflag字段的BRKINT选项和IGNBRK选项的含义,首先要搞清楚BREAK信号的含义。其实当你搞清楚BREAK信号后,结构体termios的c_iflag字段的BRKINT选项和IGNBRK选项的含义你也就自然知道了。

1. 什么是 BREAK 信号?

在串口通信(UART)中,BREAK 信号 指的是 发送端保持 TXD 低电平超过一帧完整字符的时间(一帧完整字符通常为8位数据位+1位校验位+1位停止位,共10位),BREAK 信号通常用于:

  • 通信错误检测
  • 终端控制
  • 复位设备
  • 同步设备状态

示意图(不含校验位):

正常传输:
Start  | Data bits  | Stop
------|------------|------0  |  10101010  |  1    (1帧字符)BREAK 信号:
Start  |    低电平持续时间      | 
------|----------------|------0  |    低电平       |  低电平

2. BREAK 信号的特性

  • BREAK 信号 = TX 线一直保持低电平
  • 持续时间至少要大于 1 帧字符传输的时间
  • 不会被解释为正常数据
  • 可用于特殊控制用途,如复位、唤醒、错误通知等

3. BREAK 信号的用途

① 终端控制(TTY 设备)

  • Linux TTY 设备收到 BREAK 时,可触发 SIGINT(中断信号) 终止前台进程。
  • 相关 termios 选项:
    • BRKINT(如果启用,则 BREAK 会触发 SIGINT)。
    • IGNBRK(如果启用,则忽略 BREAK 信号)。

② 设备复位

某些设备(如 Modbus 从机、某些 GPS 设备)会在收到 BREAK 后执行复位。

③ 调制解调器通信

  • 传统调制解调器(Modem)使用 BREAK 作为特殊指令,如退出数据模式、进入命令模式。

④ 通信错误检测

  • 串口通信通常有校验(如奇偶校验),但如果线路出现严重干扰,设备可能发送 BREAK 作为错误指示。

4. BREAK 信号的处理方式

单独介绍选项值IGNBRKBRKINT

不同操作系统和硬件会有不同的 BREAK 处理方式,通常可以通过 termios 结构体的 c_iflag 选项来配置。

c_iflag 选项含义
IGNBRK忽略 BREAK 信号,不传递给应用程序
BRKINT启用 BREAK,BREAK 触发 SIGINT 终止进程
PARMRK奇偶校验启用 时,将 BREAK 作为 \377\0\0 发送给用户

示例:

struct termios options;
tcgetattr(fd, &options);// 让 BREAK 触发 SIGINT
options.c_iflag |= BRKINT;// 设置新属性
tcsetattr(fd, TCSANOW, &options);

选项值IGNBRKBRKINT组合使用的效果

IGNBRKBRKINT处理方式
1(启用)0(禁用)直接忽略 BREAK 信号,不通知用户空间
1(启用)1(启用)直接忽略 BREAK 信号,不触发 SIGINT
0(禁用)0(禁用)BREAK 被视为 空字符 (0x00) 传递给用户
0(禁用)1(启用)BREAK 触发 SIGINT(终止进程)

5. 发送 BREAK 信号

在 Linux 上,tcsendbreak(fd, duration) 用于 主动发送 BREAK 信号。

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>int main() {int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);if (fd == -1) {perror("open");return -1;}// 发送 BREAK 信号,持续时间为 0(默认 250~500ms)tcsendbreak(fd, 0);close(fd);return 0;
}
  • duration = 0:发送 默认长度(250~500ms)的 BREAK
  • duration > 0:发送 特定长度 的 BREAK(非 POSIX 标准,仅部分系统支持)。

6. 检测 BREAK 信号

在应用程序中,可以通过 read() 检测是否接收到 BREAK,但大多数情况下,内核会转换 BREAK 为 SIGINT,因此不需要手动读取。

如果要检测 BREAK 而不让它触发 SIGINT,可以:

struct termios options;
tcgetattr(fd, &options);
options.c_iflag &= ~BRKINT; // 禁止 BREAK 触发 SIGINT
tcsetattr(fd, TCSANOW, &options);

然后在 read() 中读取数据,如果 PARMRK 使能,BREAK 会作为 \377\0\0 传输。


7. 物理层行为

波特率1 帧字符时间(按10位字符来算)BREAK 最小持续时间
11520086.8 µs≥ 87 µs
96001.04 ms≥ 1.04 ms
24004.17 ms≥ 4.17 ms

例如,在 9600 bps 下,BREAK 必须至少 保持低电平 1.04 ms 才会被识别。


8. 相关 Linux 命令

  • stty 命令查看和设置 BREAK 处理方式
stty -F /dev/ttyS0 -a   # 查看当前串口设置
stty -F /dev/ttyS0 brkint  # 使能 BREAK 触发 SIGINT
stty -F /dev/ttyS0 -brkint # 禁止 BREAK 触发 SIGINT
  • 手动发送 BREAK
echo -e "\x00" > /dev/ttyS0   # 可能不会产生 BREAK
stty -F /dev/ttyS0 sendbreak   # 发送 BREAK 信号

总结

  • BREAK 信号 = TX 线保持低电平超过 1 个字符时间
  • 用途:设备复位、终端控制(SIGINT)、调制解调器控制、错误检测等。
  • Linux 处理方式
    • IGNBRK:忽略 BREAK
    • BRKINT:BREAK 触发 SIGINT
    • tcsendbreak(fd, duration) 主动发送 BREAK
  • 应用场景
    • 串口调试时可用 BREAK 触发设备复位
    • TTY 终端可用 BREAK 中断进程
    • 工业设备可能使用 BREAK 作为特殊信号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32351.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图

以下是使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图&#xff1a; graph TDA[开始移植] --> B[代码兼容性检查]B --> C[检查系统调用差异\nfork/exec -> CreateProcess]B --> D[检查文件路径格式\n/ vs \\]B --> E[检查依赖库兼容性\nPOSIX vs …

网络信息安全专业(710207)网络安全攻防实训室建设方案

一、引言 随着信息技术的飞速发展&#xff0c;网络空间安全已成为国家安全的重要组成部分&#xff0c;对网络信息安全专业人才的需求日益增长。为满足网络信息安全专业&#xff08;专业代码710207&#xff09;的教学需求&#xff0c;提升学生在网络安全攻防领域的实践能力&…

赶紧白P这款免费神器!

现在&#xff0c;很多视频剪辑软件都开始收费了&#xff0c;真正免费又好用的软件真的越来越难找了。 今天&#xff0c;我给大家推荐一款非常小巧的视频编辑工具&#xff0c;目前完全免费&#xff0c;功能却非常丰富。 咔咔一通剪 视频编辑工具 这款软件真的超级轻巧&#xff…

Qt 初识1.1

目录 QLineEdit QPushButton connet&#xff1a; Qt命名规范 Qt窗口坐标系 QLineEdit ​ ​ QPushButton ​ 给按钮的点击操作上关联一个处理函数。 connet&#xff1a; connet的作用是连接信号和槽&#xff0c;是QObject类中的一个静态函数&#xff0c; ​ Qt命…

Linux内核机制之epoll详解

目录 简介&#xff1a; 一、IO 多路复用介绍 1、select&#xff0c;poll&#xff0c;epoll 引入 2、select&#xff0c;poll&#xff0c;epoll 区别分析 3、epoll 原理 3.1 epoll 相关函数介绍 1&#xff09;epoll_create 2&#xff09;epoll_ctl 3&#xff09;epoll_…

以 ArcGIS Pro 为笔,绘就水墨地图画卷

一、引言 水墨画&#xff0c;作为中国传统绘画艺术的瑰宝&#xff0c;以其独特的韵味和表现力&#xff0c;在艺术领域占据着重要地位。它通过水与墨的交融&#xff0c;展现出山水之间的灵动与韵味。 而将这种艺术形式与现代地理信息系统&#xff08;GIS&#xff09;技术相结合…

JAVA:利用 Jsoup 轻松解析和操作 HTML 的技术指南

1、简述 在现代 Java 开发中&#xff0c;处理 HTML 数据是一项常见需求&#xff0c;无论是抓取网页数据、解析 HTML 文档&#xff0c;还是操作 DOM 树&#xff0c;Jsoup 都是一个强大的工具。它是一个基于 Java 的 HTML 解析库&#xff0c;支持从 URL、文件或字符串中解析 HTM…

个人记录的一个插件,Unity-RuntimeMonitor

没有什么干货,仅仅是个人的记录 基于GUI做的一个工具:好处就是Monitor必须,Unity天然支持实时的Monitor;唯一不好处,就是默认字体太小了,layout居中,居右也是要自行设计的。 (下面文字是有一点点写错,但意思和功能就很牛逼了;并不是都按2 x shift,而是一个 shift 添…

云服务器安装宝塔面板部署

单机部署(前端vue项目) 服务器安装宝塔面板 连接到服务器 使用 SSH 连接到你的服务器&#xff1a; ssh rootip安装宝塔面板 运行以下命令来安装宝塔面板&#xff1a; yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh安…

Java数据结构第二十期:解构排序算法的艺术与科学(二)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、常见排序算法的实现 1.1. 直接选择排序 1.2. 堆排序 1.3. 冒泡排序 1.4. 快速排序 一、常见排序算法的实现 1.1. 直接选择排序 每⼀次从待排序的数据元素中选出最小的⼀个元素&#xff0c;存放在…

【MapSet】哈希表

目录 1. 搜索树 1.1 概念 1.2 操作-查找 1.3 操作-插入 1.4 操作-删除&#xff08;难点&#xff09; 1.5 性能分析 1.6 和java类集的关系 2. 搜索 2.1 概念及场景 2.2 模型 3. Map的使用 3.1 关于Map的说明 3.2 关于Map.Entry的说明 3.3 Map的常用方法说明 3.4 …

手写一个Tomcat

Tomcat 是一个广泛使用的开源 Java Servlet 容器&#xff0c;用于运行 Java Web 应用程序。虽然 Tomcat 本身功能强大且复杂&#xff0c;但通过手写一个简易版的 Tomcat&#xff0c;我们可以更好地理解其核心工作原理。本文将带你一步步实现一个简易版的 Tomcat&#xff0c;并深…

git commit messege 模板设置 (规范化管理git)

配置方法 git config --global core.editor vim &#xff08;设置 Git 的默认编辑器为 Vim&#xff09;在用户根目录下&#xff08;~&#xff09;&#xff0c;创建一个.git_commit_msg文件&#xff0c;然后把下面的内容拷贝到文件中并保存。 [version][模块][类型]{解决xxx问题…

亚信安全发布第七期《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件121起&#xff0c;与上周相比&#xff0c;勒索事件数量大幅下降&#xff0c;仍需注意防范。从整体上看Clop是影响最严重的勒索家族&#xff1b;本周Ransomhub和Akira也是活动频繁的两个恶意家族&#xff0c;需要注意防范。本周&…

React基础之项目实战

规范的项目结构 安装scss npm install sass -D 安装Ant Design组件库 内置了一些常用的组件 npm install antd --save 路由基础配置 npm i react-router-dom 路由基本入口 import Layout from "../page/Layout"; import Login from "../page/Login"; impor…

第44天:WEB攻防-PHP应用SQL盲注布尔回显延时判断报错处理增删改查方式

时间轴&#xff1a; 44天知识点总结&#xff1a; 1.mysql的增删改查功能 2.根据源码sql语句的三种sql注入&#xff1a;布尔盲注&#xff08;必须要有回显&#xff09; 延时判断&#xff08;都可以&#xff09; 报错回显&#xff08;必须要有报错处理机制&#xff09; 3.两个cms…

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 开发资料下载链接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…

Vue3 深度解析:构建现代Web应用的全新范式

Vue3 深度解析&#xff1a;构建现代Web应用的全新范式 mindmaproot(Vue3核心革新)性能优化Proxy响应式编译优化体积缩减Composition APIsetup语法逻辑复用TypeScript支持新特性TeleportSuspense片段支持工程化Vite集成自定义渲染器服务端渲染一、Vue3 架构革新&#xff1a;从O…

推理模型对SQL理解能力的评测:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet

引言 随着大型语言模型&#xff08;LLMs&#xff09;在技术领域的应用日益广泛&#xff0c;评估这些模型在特定技术任务上的能力变得越来越重要。本研究聚焦于四款领先的推理模型——DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet在SQL理解与分析方面的能力&#xff0c;…

cesium安装与配置(visual studio版)

文章目录 一、下载Cesium二、解压Cesium三、VS打开网站四、参考文献 如有错误&#xff0c;请指正&#xff01;&#xff01;&#xff01; 一、下载Cesium 登录官网&#xff0c;下载Cesium。 点击箭头所指&#xff0c;下载Cesium 二、解压Cesium 解压Cesium压缩包得到以下文件…