***********************************************************************************



Similar documents
I

国债回购交易业务指引


徐天宏:《基因天堂》.doc

深圳市新亚电子制程股份有限公司

第2章 数据类型、常量与变量

登录、注册功能的测试用例设计.doc

Template BR_Rec_2005.dot

<433A5C446F63756D656E E E67735C41646D696E F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>

!!!!!!!!!!

珠江钢琴股东大会

自 服 务 按 钮 无 法 访 问 新 系 统 的 自 服 务 页 面 因 此 建 议 用 户 从 信 网 中 心 ( 主 页, 右 下 角 位 置 的 常 用 下 载, 或 校 园 网 用 户 自 服 务 ( 首 页

第 一 部 分 MagiCAD for Revit 安 装 流 程

修改版-操作手册.doc

火车浏览器脚本制作教程

《C语言基础入门》课程教学大纲

目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管

第 期 李 伟 等 用 方 法 对 中 国 历 史 气 温 数 据 插 值 可 行 性 讨 论

证券代码: 证券简称:超日太阳 公告编号:

<4D F736F F D C3E6CFF2B6D4CFF3A3A8B5DAC8FDD5C220C0E0CCD8D0D4A3A92E646F63>

云信Linux SSH认证代理用户手册

生产支援功能 使用说明书(IP-110 篇)

世华财讯模拟操作手册

说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基

类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的

·岗位设置管理流程

Microsoft Word - 第3章.doc

2. 本 次 修 改 后, 投 资 者 申 购 新 股 的 持 有 市 值 要 求 市 值 计 算 规 则 及 证 券 账 户 使 用 的 相 关 规 定 是 否 发 生 了 变 化? 答 : 未 发 生 变 化 投 资 者 申 购 新 股 的 持 有 市 值 是 指, 以 投 资 者 为 单 位

报 价 量 单 位 变 动 点 交 割 方 式 挂 牌 基 准 价 每 日 结 算 价 到 期 交 割 价 到 期 交 割 结 算 金 额 等 2.2 合 约 代 码 交 易 系 统 中 用 于 区 分 不 同 合 约 品 种 的 代 码, 由 标 的 债 券 缩 写 和 到 期 月 份 组 成 如

上证指数

定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类

 编号:

评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单

( ) 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 教 周 2016 年 06 月 13 日 (08:00-09:35) ( )

全国教师资格认定管理信息系统

<4D F736F F D20B3D6B2D6CFDEB6EEB1EDB8F1D7EED6D52E646F63>

Microsoft Word - 第7章 图表反转形态.doc

龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和

附件1:

上海证券交易所会议纪要

GB

注 意 : 如 上 图 所 示, 网 上 缴 费 (12 月 3 日 至 10 日 ) 与 春 季 高 考 现 场 确 认 工 作 (12 月 3 日 至 6 日 ) 同 时 进 行, 没 有 经 过 现 场 确 认 和 确 认 信 息 没 有 上 传 到 服 务 器 的 考 生 不 能 网 上 缴

系统设计文档_样稿管理模块 V1.1_.doc

正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业

(Microsoft Word - NCRE\314\345\317\265\265\367\325\37313\324\27221\272\3051.doc)

引言

教师上报成绩流程图

抗 日 战 争 研 究 年 第 期


<4D F736F F D20BFC9B1E0B3CCD0F2BFD8D6C6CFB5CDB3C9E8BCC6CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>

第三章 作业

全国建筑市场注册执业人员不良行为记录认定标准(试行).doc

乐视云视频发行平台 操作手册 V1.1

目 录 一 激 活 账 号... 2 二 忘 记 密 码 后 如 何 找 回 密 码?... 3 三 如 何 管 理 学 校 信 息 及 球 队 学 生 教 师 等 信 息... 6 四 如 何 发 布 本 校 校 园 文 化? 五 如 何 向 教 师 发 送 通 知? 六

Microsoft Word - 文件汇编.doc

目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用

超 级 玛 丽 JAVA 小 游 戏 测 试 报 告 1. 导 言 1.1 编 写 目 的 该 文 档 的 目 的 是 描 述 超 级 玛 丽 JAVA 小 游 戏 的 系 统 测 试 的 总 结 报 告, 其 主 要 内 容 包 括 : 系 统 环 境 的 介 绍 功 能 的 实 现 的 测 试

评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单


0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量

HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语

,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,

( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,

øÕªß∂À≤Ÿ◊˜ ÷≤·

何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知

第3章 创建数据库

ARP项目组功能培训PPT模版

黄 金 原 油 总 持 仓 增 长, 同 比 增 幅 分 别 为 4.2% 和 4.1% 而 铜 白 银 以 及 玉 米 则 出 现 减 持, 减 持 同 比 减 少 分 别 为 9.4%,9.4% 以 及 6.5% 大 豆, 豆 粕 结 束 连 续 4 周 总 持 仓 量 增 长, 出 现 小 幅

关于2010年上半年(31次)全国计算机等级考试报名的通知

2.5 选 举 陈 晓 非 女 士 为 第 六 届 董 事 会 董 事 候 选 人 的 议 案 ; 2.6 选 举 卢 婕 女 士 为 第 六 届 董 事 会 董 事 候 选 人 的 议 案 ; 2.7 选 举 张 文 君 先 生 为 第 六 届 董 事 会 独 立 董 事 候 选 人 的 议 案

四川省农村义务教育学生

三门峡市质量技术监督局清单公示

听 力 测 试 1 级 A 拍 出 考 官 所 弹 奏 乐 段 的 节 拍, 并 辨 认 是 二 拍 子 还 是 三 拍 子 考 官 会 开 始 弹 奏 乐 段, 考 生 应 尽 快 加 入, 拍 出 拍 子 并 突 出 强 拍 考 官 接 着 会 问 乐 曲 是 二 拍 子 还 是 三 拍 子 不

Microsoft Word - 工业品封面.doc

一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日

马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #

第 三 章 审 计 证 据 2

DLJ1.nps

<4D F736F F D20D3A5D2EDC6DABBF5D6FACAD6CFB5CDB356312E302DD3C3BBA7CAB9D3C3CBB5C3F7CAE9>

目 录 1. 考 生 电 脑 安 装 配 置 考 生 电 脑 系 统 需 求 初 次 使 用 故 障 修 复 试 卷 结 构 与 分 值 在 线 考 试 登 录 考 前 倒

!!

现 场 会 议 时 间 为 :2016 年 5 月 19 日 网 络 投 票 时 间 为 :2016 年 5 月 18 日 年 5 月 19 日 其 中 通 过 深 圳 证 券 交 易 所 交 易 系 统 进 行 网 络 投 票 的 时 间 为 2016 年 5 月 19 日 9:30-

白皮书

抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %

操作手册

通用短信平台HTTP接口使用说明V1.0.4

1 什 么 是 按 市 值 申 购? 第 二 部 分 新 股 申 购 常 见 难 点 解 析 ( 含 信 用 账 户 ) 答 : 投 资 者 持 有 市 值 不 低 于 1 万 元 才 能 参 与 申 购, 申 购 数 量 不 能 超 过 主 承 销 商 规 定 的 申 购 上 限, 且 不 得 超

江 苏 瑞 峰 建 设 集 团 有 限 公 有 限 公 江 苏 鲁 工 建 设 工 程 有 限 公 江 苏 溧 鸿 建 设 有 限 公 江 苏 明 创 科 技 园 发 展 有 限 公 公 公 有 限 公 江 苏 茂 盛 建 设 有 限 公 江 苏 鼎 洪 建 工 有 限 公 富 强 机 电 安 装

<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>

合 并 计 算 配 售 对 象 持 有 多 个 证 券 账 户 的, 多 个 证 券 账 户 市 值 合 并 计 算 确 认 多 个 证 券 账 户 为 同 一 配 售 对 象 持 有 的 原 则 为 证 券 账 户 注 册 资 料 中 的 账 户 持 有 人 名 称 有 效 身 份 证 明 文 件


用节点法和网孔法进行电路分析

物 流 从 业 人 员 职 业 能 力 等 级 证 书 分 为 四 个 级 别, 分 别 为 初 级 助 理 级 中 级 和 高 级 ; 采 购 从 业 人 员 职 业 能 力 等 级 证 书 分 为 三 个 级 别, 分 别 为 中 级 高 级 和 注 册 级 请 各 有 关 单 位 按 照 通

投 资 者 可 在 基 金 管 理 人 指 定 的 销 售 机 构 申 购 和 赎 回 美 元 等 外 币 销 售 的 基 金 份 额, 具 体 详 见 基 金 管 理 人 相 关 公 告 2 在 三 申 购 与 赎 回 的 原 则 部 分 增 加 : 1 本 基 金 采 用 多 币 种 销 售,

18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学

文档编号:

IntelBook_cn.doc

目 录 第 一 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 硬 件 使 用 介 绍... 3 第 二 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 管 理 员 端 功 能 使 用 介 绍 系 统 管 理 员 登 陆 班

2006年顺德区高中阶段学校招生录取分数线

金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年

Transcription:

*********************************************************************************** * 文 档 名 称 :LINUX 下 的 串 口 通 信 编 程 与 调 试 * 文 档 作 者 : 熊 益 铭 (xiongyiming@nari-china.com) * 创 建 日 期 :2005 年 8 月 2 日 * 修 订 日 期 :2005 年 8 月 3 日 * 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司, 保 留 所 有 权 利 *********************************************************************************** 目 录 1 使 用 串 口 的 注 意 点... 1 2 打 开 串 口... 2 3 配 置 串 口... 2 3.1 波 特 率... 2 3.2 数 据 位... 3 3.3 校 验 位... 3 3.4 停 止 位... 3 4 读 串 口... 3 5 写 串 口... 3 6 关 闭 串 口... 3 7 读 写 的 阻 塞 和 非 阻 塞 操 作... 4 7.1 阻 塞 和 非 阻 塞 的 含 义... 4 7.2 如 何 配 置... 4 7.3 read 例 外 的 配 置... 4 8 举 例 说 明 各 种 情 况... 5 8.1 读 写 都 非 阻 塞 的 例 子... 5 8.2 写 阻 塞 而 读 不 阻 塞 的 例 子... 6 8.3 读 写 都 阻 塞 的 例 子... 6 8.4 一 个 特 别 的 情 况... 7 9 推 荐 的 read 操 作... 7 10 编 程 点 滴... 8 源 代 码 参 考 192.168.0.26 机 器 上 F:\linux\example_code\serialcom.c 本 文 档 中 灰 色 部 分 为 源 代 码 1 使 用 串 口 的 注 意 点 Linux: 虚 拟 机 也 可 以 使 用 串 口 在 linux 下, 只 有 用 root 用 户 才 能 对 串 口 进 行 操 作 首 先 可 以 用 linux 命 令 minicom 进 行 调 试, 测 试 串 口 硬 件 上 是 否 能 够 通 起 来 在 Linux 下 串 口 设 备 作 为 文 件 进 行 操 作 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司 - 1 -

串 口 操 作 需 要 的 头 文 件 如 下 : #include <stdio.h> /* 标 准 输 入 输 出 定 义 */ #include <stdlib.h> /* 标 准 函 数 库 定 义 */ #include <unistd.h> /*Unix 标 准 函 数 定 义 */ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> /* 文 件 控 制 定 义 */ #include <termios.h> /*POSIX 终 端 控 制 定 义 */ #include <errno.h> /* 错 误 号 定 义 */ #include <sys/ioctl.h> /* 当 调 用 了 ioctl 函 数 时 include*/ 2 打 开 串 口 在 linux 中 串 口 位 于 /dev 下 串 口 一 为 /dev/ttys0, 串 口 二 为 /dev/ttys1 打 开 串 口 是 通 过 使 用 标 准 的 文 件 打 开 函 数 操 作 : int fd; struct termios options; int brate; fd=open( /dev/ttys0,o_rdwr O_NOCTTY); 3 配 置 串 口 打 开 串 口 之 后, 得 到 串 口 的 termios 变 量, 然 后 通 过 操 作 它 来 进 行 串 口 的 各 种 属 性 的 配 置 struct termios options; tcgetattr(fd,&options); //get termios information bzero(&options,sizeof(struct termios)); 这 里 清 零 的 作 用 是 保 证 本 次 将 要 进 行 的 配 置 不 会 受 到 串 口 原 来 的 配 置 的 影 响 当 全 部 配 置 完 成 之 后, tcflush(fd,tciflush); //flush both input and output io tcsetattr(fd,tcsanow,&options); //set termios infomation 3.1 波 特 率 long baudrate=9600; int brate; switch(baudrate) { case 110: brate=b110;break; case 300: brate=b300;break; 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司 - 2 -

case 600: brate=b600;break; case 1200:brate=B1200;break; case 2400:brate=B2400;break; case 4800:brate=B4800;break; case 9600:brate=B9600;break; case 19200:brate=B19200;break; case 38400:brate=B38400;break; case 57600:brate=B57600;break; default: brate=b115200;break; } cfsetispeed(&options,brate); // 设 置 波 特 率 的 新 方 法 cfsetospeed(&options,brate); 3.2 数 据 位 3.3 校 验 位 3.4 停 止 位 4 读 串 口 Ret = read(fd,buffer,nbytes); 5 写 串 口 ret = write(fd,msg,length); 6 关 闭 串 口 close(fb); 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司 - 3 -

7 读 写 的 阻 塞 和 非 阻 塞 操 作 有 2 个 可 以 进 行 控 制 的 地 方 ( 同 时 控 制 read 和 write): 一 个 是 在 打 开 串 口 的 时 候,open 函 数 是 否 带 O_NDELAY 参 数 ; 第 二 是 可 以 在 打 开 串 口 之 后, 用 fcntl() 函 数 进 行 配 置 7.1 阻 塞 和 非 阻 塞 的 含 义 block 情 况 : 对 于 read,block 指 的 是 当 串 口 输 入 缓 冲 区 没 有 数 据 的 时 候,read 函 数 将 会 阻 塞 在 这 里, 一 直 到 串 口 输 入 缓 冲 区 中 有 数 据 可 读 取,read 读 到 了 需 要 的 字 节 数 之 后, 返 回 值 为 读 到 的 字 节 数, 然 后 程 序 才 会 继 续 run 下 去 对 于 write,block 指 的 是 当 串 口 输 出 缓 冲 区 满, 或 者 剩 下 的 空 间 小 于 将 要 写 入 的 字 节 数, 则 write 将 阻 塞, 一 直 到 串 口 输 出 缓 冲 区 中 剩 下 的 空 间 大 于 等 于 将 要 写 入 的 字 节 数, 执 行 写 入 操 作, 然 后 返 回 写 入 的 字 节 数, 然 后 程 序 才 会 继 续 run 下 去 no block 情 况 : 对 于 read,no block 指 的 是 当 串 口 输 入 缓 冲 区 没 有 数 据 的 时 候,read 函 数 立 即 返 回, 返 回 值 为 0 对 于 write,no block 指 的 是 当 串 口 输 出 缓 冲 区 满, 或 者 剩 下 的 空 间 小 于 将 要 写 入 的 字 节 数, 则 write 将 进 行 写 操 作, 写 入 当 前 串 口 输 出 缓 冲 区 剩 下 的 空 间 允 许 的 字 节 数, 然 后 返 回 写 入 的 字 节 数 7.2 如 何 配 置 Block 配 置 : fd=open(devname,o_rdwr O_NOCTTY); 或 者 fcntl(fd,f_setfl,0); no block 配 置 : fd=open(devname,o_rdwr O_NOCTTY O_NDELAY); 或 者 fcntl(fd,f_setfl, FNDELAY); 注 意,fcntl() 函 数 可 以 在 O_NDELAY 参 数 使 用 之 后 使 用, 它 会 覆 盖 open 时 候 的 配 置 7.3 read 例 外 的 配 置 可 能 有 些 时 候, 进 行 了 上 述 block 的 配 置 之 后, 会 发 现 read 函 数 还 是 没 有 block, 而 是 立 即 返 回, 这 是 因 为 read 函 数 不 仅 仅 受 上 面 两 个 因 素 影 响, 还 受 下 面 的 两 个 参 数 影 响 options.c_cc[vmin] 和 options.c_cc[vtime] 不 过 这 两 个 参 数 只 有 当 前 面 两 个 参 数 设 置 为 block 状 态 下 才 有 效, 否 则 无 效 这 2 个 参 数 的 默 认 值 为 0 VMIN 是 配 置 read 函 数 每 次 读 数 据 的 时 候 最 小 读 取 的 字 节 数 VTIME 是 配 置 read 函 数 当 没 有 读 到 数 据 的 时 候, 等 待 的 超 时 时 间 ( 单 位 为 10ms) 配 置 方 法 如 下 : 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司 - 4 -

8 举 例 说 明 各 种 情 况 8.1 读 写 都 非 阻 塞 的 例 子 情 况 2: fd=open(devname,o_rdwr O_NOCTTY);//block fcntl(fd,f_setfl,fndelay);//no block length = strlen( serial ); ret = write(fd, serial, length);// length=6 write() no block, 正 常 写 完 后 返 回 值 为 6; 不 正 常 时 返 回 值 为 写 入 的 字 节 数 ; 没 有 写 入 的 时 候 返 回 值 为 -1 read() no block, 当 串 口 输 入 缓 冲 区 中 没 有 数 据 的 时 候, 返 回 0 情 况 4: fd=open(devname,o_rdwr O_NOCTTY O_NDELAY); //no block fcntl(fd,f_setfl,fndelay); //no block ret = write(fd, serial, length); write() no block, 正 常 写 完 后 返 回 值 为 6; 不 正 常 时 返 回 值 为 写 入 的 字 节 数 ; 没 有 写 入 的 时 候 返 回 值 为 -1 read() no block, 当 串 口 输 入 缓 冲 区 中 没 有 数 据 的 时 候, 返 回 0 情 况 5: fd=open(devname,o_rdwr O_NOCTTY O_NDELAY); //no block options.c_cc[vmin]=4; 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司 - 5 -

fcntl(fd,f_setfl,fndelay); //no block ret = write(fd, serial, length); write() no block, 正 常 写 完 后 返 回 值 为 6; 不 正 常 时 返 回 值 为 写 入 的 字 节 数 ; 没 有 写 入 的 时 候 返 回 值 为 -1 read() no block, 当 串 口 输 入 缓 冲 区 中 没 有 数 据 的 时 候, 返 回 -1 可 以 看 到, 这 个 时 候 options.c_cc[vmin] 和 options.c_cc[vtime] 的 配 置 是 不 起 效 果 的 8.2 写 阻 塞 而 读 不 阻 塞 的 例 子 情 况 1: fd=open(devname,o_rdwr O_NOCTTY);//block fcntl(fd,f_setfl,0);//block ret = write(fd, serial, length); write() block, 直 到 写 完 后 返 回 值 为 6 read() no block, 当 串 口 输 入 缓 冲 区 中 没 有 数 据 的 时 候, 返 回 0 情 况 3: fd=open(devname,o_rdwr O_NOCTTY O_NDELAY); //no block fcntl(fd,f_setfl,0); //block ret = write(fd, serial, length); write() block, 直 到 写 完 后 返 回 值 为 6 read() no block, 当 串 口 输 入 缓 冲 区 中 没 有 数 据 的 时 候, 返 回 0 8.3 读 写 都 阻 塞 的 例 子 情 况 6: 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司 - 6 -

fd=open(devname,o_rdwr O_NOCTTY O_NDELAY); options.c_cc[vmin]=4; fcntl(fd,f_setfl,0); ret = write(fd, serial, 6); write() block, 正 常 写 完 后 返 回 值 为 6; 不 正 常 时 返 回 值 为 写 入 的 字 节 数 ; 没 有 写 入 的 时 候 返 回 值 为 -1 read() block, 当 串 口 输 入 缓 冲 区 中 没 有 >=VMIN 个 字 节 数 据 的 时 候, 阻 塞 只 有 当 缓 冲 中 有 >=4 个 字 节 的 时 候,read 才 解 除 阻 塞 不 过 受 到 read() 中 第 3 个 参 数 控 制, 最 多 一 次 读 取 8 个 字 节 所 以 read 的 返 回 值 为 4~8 8.4 一 个 特 别 的 情 况 情 况 7: fd=open(devname,o_rdwr O_NOCTTY O_NDELAY); options.c_cc[vmin]=4; fcntl(fd,f_setfl,0); ret = write(fd, serial, 6); i = read(fd, buffer, 3); write() block, 正 常 写 完 后 返 回 值 为 6; 不 正 常 时 返 回 值 为 写 入 的 字 节 数 ; 没 有 写 入 的 时 候 返 回 值 为 -1 read() block, 当 串 口 输 入 缓 冲 区 中 没 有 >=VMIN 个 字 节 的 时 候, 阻 塞 只 有 当 缓 冲 中 有 >=4 个 字 节 的 时 候,read 才 解 除 阻 塞 不 过 又 由 于 受 到 read() 中 第 3 个 参 数 控 制, 最 多 一 次 读 取 3 个 字 节 所 以 当 串 口 输 入 缓 冲 区 中 有 3 个 字 节 时 候,read 阻 塞, 当 串 口 输 入 缓 冲 区 中 又 加 入 1 个 字 节 的 时 候,read 解 除 阻 塞, 返 回 前 面 3 个 字 节 数 据, 返 回 值 为 3 9 推 荐 的 read 操 作 Reading data from a port is a little trick. When you operate the port in raw data mode, each read(2) system call will return however many characters are actually available in the serial input buffers. 因 为 上 面 的 这 个 原 因, 所 以 推 荐 在 read 调 用 之 前, 先 用 ioctl 函 数 来 查 询 一 下 在 串 口 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司 - 7 -

输 入 缓 冲 区 中 有 多 少 字 节 数 据 当 字 节 数 为 0 的 时 候, 不 进 行 read, 这 样 就 不 用 再 关 心 read 操 作 是 否 阻 塞 方 式 了 int nbytes; ioctl(fd,fionread,&nbytes);// 查 询 输 入 缓 冲 区 中 的 字 节 数 if(nbytes>0) { nbytes=read(fd,buffer,nbytes); buffer[nbytes]=0; printf(buffer); } return nbytes; 10 编 程 点 滴 Windows 环 境 下 回 车 CR 是 0d 0a, 而 linux 下 是 0a Linux windows \n 0a 0d 0a \r\n 0d 0a \r od 版 权 所 有 (C) 南 瑞 集 团 通 信 系 统 分 公 司 - 8 -