用户管理  |   用户注册                                                                                    首 页软件下载教程中心办公指南flash动画文档下载办公公文

www.4oa.com - 中科软件园

投递文章 用户管理 投稿指南 资讯通告 :
站内搜索: 您的位置中科软件园 > 教程中心 > 操作系统 > Linux > 中文HOWTOs > 教程内容

Linux Serial Programming HOWTO (1)

2005-5-25 15:06:24  来源:本站整理  作者:不详 【 投递文章
内容提要:LinuxSerialProgrammingHOWTO-串口通讯编程http://www.fanqiang.com(2001-05-0211:07:12)byPeterH.Baumann,Peter....
Linux Serial Programming HOWTO - 串口通讯编程
http://www.fanqiang.com (2001-05-02 11:07:12)
by Peter H. Baumann, Peter.Baumann@dlr.de
译者: 曾元佑 yytseng@ms16.hinet.net
v1.0, 22 一月 1998


--------------------------------------------------------------------------------
本文件将叙述如何在 Linux 环境下撰写序列埠的通讯程式.
--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

1. 简介
本文是 Linux 序列埠程式撰写的 HOWTO. 全篇都在讨论如何在 Linux 环境下, 以序列埠与其他 装置/电脑 通讯的程式写法. 所解释的技术包含: 标准的 I/O (只具备 传送/接收 线的), 非同步 I/O, 及 等待来自多信号源的输入讯号 的写法.

本文不会叙述如何设定序列埠, 因为这在 Greg Hankins 的 Serial-HOWTO 已经有说明了.

我必需强调我并非此领域中的专家, 而是在专案中曾遇到过这类的通讯问题. 在这所提到的□例程式是衍生自 miniterm 的程式码. 可在 LDP 程式设计师指南取得 (ftp://sunsite.unc.edu/pub/Linux/docs/LDP/programmers-guide/lpg-0.4.tar.gz 及其他映射站) 在□例那个目录下.

我开始写这份文件是在 1997 年 六月, 现在我已经移转到 WinNT 以满足客户的需求, 以致於我没能学得更深入的知识. 如果任何人有什麽意见, 我很乐意把它摆进这份文件中 (参考 回馈 那一节). 如果有人能接手这份工作并加以改进, 请 e-mail 给我.

所有的□例都在 i386 Linux Kernel 2.0.29 下测试过.


1.1 版权
Linux Serial-Programming-HOWTO 的版权(C) 1997 是 Peter Baumann 所有. Linux HOWTO 文件可以完整或部份以实际或电子型式重制或散布, 只要版权宣告能保留在所有散布的副本中. 商业性的重制散布是许可并被鼓励的; 不过, 如果以此型式的散布 应该 告知作者.

所有有关的翻译, 衍生的工作, 或整合合并任何 Linux HOWTO 文件皆必须在此版权宣告规□之下. 也就是, 你不可以自 HOWTO 所衍生的工作中, 散布的文件上附加额外的限制条款. 除了这些规则之外皆可在某种条件的授与; 请联络 Linux HOWTO 协调员: 如以下所给的位址.

简而言之, 我们希望尽可能得透过各种管道促进这份资讯的流通, 不过, 我强烈的希望将版权宣告置於 HOWTO 的文件上, 任何 想 重新散布 HOWTO 的人, 均希望您能知会我们一下.

如果你有问题, 请经由 email 与 Tim Bynum, Linux HOWTO 协调员连络, linux-howto@sunsite.unc.edu.


1.2 本文最新的版本
Serial-Programming-HOWTO 最新的版本将放在
ftp://sunsite.unc.edu:/pub/Linux/docs/HOWTO/Serial-Programming-HOWTO 及其他映设站台. 有许多的格式, 如 Posts cript 及 DVI 的版本放在 other-formats 目录下. Serial-Programming-HOWTO 也放在 http://sunsite.unc.edu/LDP/HOWTO/Serial-Programming-HOWTO.html 并会每个月摆一份到 comp.os.linux.answers.


1.3 回馈
请把任何修正, 问题, 意见, 建议, 或其它附加的题材传送给我. 以让我改进这份 HOWTO! 并详细告诉我哪个部份是您不能了解, 或不够清楚的. 你可以用 email 连络我 Peter.Baumann@dlr.de. 请把 Serial-Programming-HOWTO 的版本号码附上, 本文版本号码是 0.3.




--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

2. 开始

2.1 侦错
最好的侦错你程式码的方法是建构另一台 Linux box, 并把两台电脑用 null-modem 缆线连接. 用 miniterm (可在 LDP 程式设计师指南取得 (ftp://sunsite.unc.edu/pub/Linux/docs/LDP/programmers-guide/lpg-0.4.tar.gz 在□例那个目录下) 以传送字元到你的 Linux box. Miniterm 很容易编译而它会把所有输入到键盘的字元透过序列埠传送. 只有这个宣告定义会被检查 #define MODEMDEVICE "/dev/ttyS0". 如果是 COM1 设定为 ttyS0, 如果是 COM2 设定为 ttyS1 等等.. 先前的测试是必要的, 所有的 字元都将以 raw 方式 (不经任何处理) 直接传送. 测试是否连接正确, 在两台电脑上都启动 miniterm 然後随便在键盘上乱按. 在其中一台上输入的字元应该会显示在另一台电脑上反之亦同. 但输入的字元不会回应到与之相连的萤幕上.

要自制 null-modem 的电缆, 你必需要把 TxD (传送) 及 RxD (接收) 两线对调. 详细的说明在 Serial-HOWTO 的第 7 段.

当然也可以只用一台电脑来作相同的测试, 只要电脑上有两个未使用的序列埠. 当然你也就要执行两个 miniterm 来当虚拟控制台. 如果你是藉由拔去滑鼠来取得另一个序列埠, 记得要把 /dev/mouse 装置重新导向, 如果它存在的话. 如果你使用多埠的序列埠控制卡, 请确定它已设定正确. 当我在我的电脑上测试时也曾经因为设定错误而出过槌. 当我连到另一台电脑, 通讯埠开始传送字元. 就因为刚好这不是完整的非同步式传输, 所以可在同一台电脑上执行两个程式.


2.2 连接埠设定
/dev/ttyS* 装置会被当成连接到你的 Linux box 的终端机, 并且在启动後就设定好了. 这个观念在你写 raw 装置的通讯程式时必需记住. 也就是说这个连接埠被设定为回应所有自这个装置送出的字元, 而用在资料传输时通常这种要改变这种工作模式.

所有的参数可以由一个小程式简单的完成. 设定参数被放在一个结构体内 struct termios, 他的定义档在 :
以下内容为程序代码 以下内容为程序代码

#define NCCS 19
struct termios {
tcflag_t c_iflag; /* 输入模式旗标 */
tcflag_t c_oflag; /* 输出模式旗标 */
tcflag_t c_cflag; /* 控制模式旗标 */
tcflag_t c_lflag; /* 区域模式旗标 */
cc_t c_line; /* 行控制 (line discipline) */
cc_t c_cc[NCCS]; /* 控制特性 */
};

这个档案也包含所有的旗标定义. 输入模式旗标在 c_iflag 掌管所有的输入处理, 这就意谓著由装置上传来的字元在还没用 read 功能读取前可以先处理过. 同理 c_oflag 掌管所有的输出处理. c

[1] [2] [3]  下一页

(评论内容只代表网友观点,与本站立场无关!)[ 全部评论 ]

网友评论:

    用户名:

    评   分:100分 85分 70分 55分 40分 25分 10分 0分

    内 容:

                 (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码

关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 -有事点这里