- 1、本文档共93页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Makefile文件代码如下: CC = /usr/local/arm/arm-2007q3/bin/arm-none-linux-gnueabi-gcc all: $(CC) -o term term.c clean: -rm -f *.o term 4.2.3 Linux串行端口编程举例 ⒈ 文件、设备及系统调用 Linux环境中,文件具有非常重要的意义,文件为操作系统服务,对设备的操作提供了一个简单而一致的接口。 在Linux中,一切都是文件。 用户程序完全可以像使用文件那样使用盘文件、目录、串行端口、打印机及其他设备。例4.4中,用户程序将一个串行端口映射为一个文件,然后使用系统调用,对这个文件进行操作,内核通过调用对应的设备驱动程序,对串行端口硬件进行操作。 用于访问设备驱动程序的系统调用有: · open:打开文件或设备 · read:对打开的文件或设备执行读操作 · write:对打开的文件或设备执行写操作 · close:关闭文件或设备 · ioctl:把控制信息传递给设备驱动程序 open系统调用,创建了一条到达文件或设备的访问路径,如果调用成功,返回一个系统文件描述符,其他几个系统调用,能够使用这个描述符对指定的文件或设备进行操作。 open系统调用中常用参数的含义如下所示: O_RDONLY,规定以读方式打开; O_WRONLY,规定以写方式打开; O_RDWR,规定以读、写方式打开。 read系统调用,从文件描述符相关联的文件里,读入指定字节个数的数据,存入指定的数据区。调用成功,返回实际读入的字节个数,允许实际读入字节个数小于指定字节个数。如果返回为0,表示未读入数据,已到了文件尾;如果返回-1,表示出错。从目标板串口连接的终端键盘读入数据时,输入数据后按下回车键,数据才能由终端程序送到用户程序的read函数。 write系统调用,是把写缓冲区的指定字节个数的数据,写入与文件描述符关联的文件中。它的返回值是实际写入的字节数。如果返回0,表示未写入任何数据;如果返回-1,表示调用中出现了错误。 close系统调用,用于终止文件描述符与对应文件或设备之间的关联。close调用成功时返回0,错误时返回-1。 ⒉ 串行端口设备与文件关联及系统调用举例 在例4.3代码中,前半部分是将串行端口/dev/ttyS0与文件关联,使用系统调用对文件进行读写操作。这些操作实际上是通过目标板指定的串口,对串口连接的主机Linux下minicom仿真终端,进行读写操作。例4.3代码中后半部分,是Linux标准输入/输出/错误系统调用,其读写操作同样是对目标板连接的主机Linux下minicom仿真终端进行读写操作。 例4.3代码串行端口参数没有重新设置,仍使用系统默认的波特率、帧格式,不使用调制解调器。 【例4.3】以下程序中,fp是系统文件描述符;nread是实际读写字节个数;buffer是读写缓冲区。程序先打开/dev/ttyS0文件(串行端口),然后对其读、写,最后关闭。后半部分程序中函数的含义同例4.2。 程序代码如下: #include termios.h #include unistd.h #include fcntl.h #include sys/stat.h #include stdlib.h #define COM1 /dev/ttyS2 /*--------------------------------------------------------* / int main() { char buffer[80]; int nread; int fp; fp=open(COM1,O_RDWR); if (fp==-1) {write(2,/dev/ttyS2 open err,exit.\n,26); exit (0); } write(1,\n plese input char string,from /dev/ttyS2:\n,43) ; nread=read(fp,buffer,80); if (nread==-1) {write(2,/dev/ttyS2 read err,exit.\n,26); exit (0); } write(1,\n------- from /dev/ttyS2 read string, out to /dev/tty2:------\n,63); if ((write(fp,buffer,nread))!=nread) {write(2,/dev/tty
文档评论(0)