![微处理器系统结构与嵌入式系统设计ppt课件_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/28/2f695e8e-9ff1-49ad-ac94-779c529338da/2f695e8e-9ff1-49ad-ac94-779c529338da1.gif)
![微处理器系统结构与嵌入式系统设计ppt课件_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/28/2f695e8e-9ff1-49ad-ac94-779c529338da/2f695e8e-9ff1-49ad-ac94-779c529338da2.gif)
![微处理器系统结构与嵌入式系统设计ppt课件_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/28/2f695e8e-9ff1-49ad-ac94-779c529338da/2f695e8e-9ff1-49ad-ac94-779c529338da3.gif)
![微处理器系统结构与嵌入式系统设计ppt课件_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/28/2f695e8e-9ff1-49ad-ac94-779c529338da/2f695e8e-9ff1-49ad-ac94-779c529338da4.gif)
![微处理器系统结构与嵌入式系统设计ppt课件_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/28/2f695e8e-9ff1-49ad-ac94-779c529338da/2f695e8e-9ff1-49ad-ac94-779c529338da5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微处置器系统构造与嵌入式系统设计*2/37第十一章第十一章 基于基于ARM的软件系统设计的软件系统设计1、嵌入式软件系统构造及任务流程、嵌入式软件系统构造及任务流程2、嵌入式软件系统的引导和加载、嵌入式软件系统的引导和加载S3C2440启动过程、启动过程、BootLoader 根本概根本概念、念、 U-boot的分析与移植的分析与移植3、嵌入式、嵌入式Linux操作系统操作系统嵌入式操作系统、嵌入式嵌入式操作系统、嵌入式Linux内核内核4、Linux下驱动程序设计例如下驱动程序设计例如翻开串口、设置串口、读写串口、封锁串口翻开串口、设置串口、读写串口、封锁串口*3/37第十一章第十一章 习题
2、习题作业:作业:1 1、2 2、3 3、6 6思索:思索:4 4、5 5 第 十 一 章 结 束*5/37嵌入式软件系统构造嵌入式软件系统构造l简单的嵌入式运用简单的嵌入式运用l 假设嵌入式系统的功能需求比较简单,嵌入式系假设嵌入式系统的功能需求比较简单,嵌入式系统软件只需完成较简单的监控、驱动和处置功能,那统软件只需完成较简单的监控、驱动和处置功能,那么不需求嵌入式操作系统的支持。么不需求嵌入式操作系统的支持。l如基于如基于8051的运用:玩具、家电、汽车等的控制系统的运用:玩具、家电、汽车等的控制系统l复杂的嵌入式运用复杂的嵌入式运用l 假设嵌入式系统的功能需求比较复杂,需求图形假设嵌入式
3、系统的功能需求比较复杂,需求图形用户界面、网络管理、存储管理、进程用户界面、网络管理、存储管理、进程/线程管理或线程管理或需求支持二次开发等,那么经过嵌入式操作系统的协需求支持二次开发等,那么经过嵌入式操作系统的协助,可以加快嵌入式系统软件的开发进度和可靠性。助,可以加快嵌入式系统软件的开发进度和可靠性。l如基于如基于ARM的运用:手机、的运用:手机、 PDA*6/37简单嵌入式系统软件构造简单嵌入式系统软件构造l不需求运用操作系统,基于裸机开发不需求运用操作系统,基于裸机开发l系统上电后转移到系统上电后转移到main函数入口,首先进展系统初函数入口,首先进展系统初始化,然后进入任务循环直到系
4、统停电或者出现艰始化,然后进入任务循环直到系统停电或者出现艰苦错误。苦错误。lvoid main(void)ll /变量、参数等的定义及变量、参数等的定义及阐明阐明 l X_init( ); /系统初始化,普通为汇编系统初始化,普通为汇编代码代码l While(1) X( ); /超级循环超级循环l*7/37复杂嵌入式系统软件的普通构造复杂嵌入式系统软件的普通构造ARM+M+I/OHAL、底层封装、部分由、底层封装、部分由OS提供提供BOOTLOAD*8/37复杂嵌入式系统软件任务流程复杂嵌入式系统软件任务流程*9/37S3C2440S3C2440启动方式启动方式 三星公司的三星公司的S3C2
5、440支持支持Nor Flash和和Nand Flash启动启动, 可以经过硬件跳线可以经过硬件跳线(引脚引脚OM1:0)设设置启动方式。详细含义如下置启动方式。详细含义如下:OM1:0=00时,处置器从时,处置器从NAND Flash启动启动OM1:0=01时,处置器从时,处置器从16位宽度的位宽度的Nor Flash启动启动OM1:0=10时,处置器从时,处置器从32位宽度的位宽度的Nor Flash启动启动OM1:0=11时,处置器从时,处置器从Test Mode启动启动*10/37S3C2440 Nand Flash在系统上电后在系统上电后,Nand Flash控制器控制器会自动的把会
6、自动的把Nand Flash上的前上的前4K U-BOOT数据搬移到内部数据搬移到内部SRAM的的地址最低端地址最低端(此此SRAM被称为被称为Steppingstone);CPU从内部从内部RAM的的0 x00000000位位置开场启动并在置开场启动并在uboot启动代码的启动代码的前前4K里完成里完成S3C2440的中心配置的中心配置,然后把,然后把U-BOOT剩余部分搬到剩余部分搬到RAM中运转;中运转; S3C2440 Nand FlashS3C2440 Nand Flash启动过程启动过程*11/37引导程序引导程序BootLoaderBootLoaderl是嵌入式系统在加电启动后执
7、行的第一段代码,功是嵌入式系统在加电启动后执行的第一段代码,功能类似能类似pc机的机的BIOS和和OS Loader,通常需求固化,通常需求固化在目的板中;在目的板中;l主要担任主要担任CPU、存储器及相关硬件的初始化,以及、存储器及相关硬件的初始化,以及将装载操作系统映像到内存中,然后跳转到规定的将装载操作系统映像到内存中,然后跳转到规定的地址启动操作系统运转。地址启动操作系统运转。l Bootloader是严重依赖硬件而实现的,每是严重依赖硬件而实现的,每一种不同体系构造的处置器都有不同的一种不同体系构造的处置器都有不同的Bootloader,甚至同一种处置器的外围硬件配置,甚至同一种处置
8、器的外围硬件配置不同,其不同,其Bootloader也有差别。因此开发特定的也有差别。因此开发特定的Bootloader是构建嵌入式是构建嵌入式linux系统之前的一项必系统之前的一项必要的根底任务。要的根底任务。*12/37BootloaderBootloader的开发的开发Stage1汇编实现汇编实现根本硬件设备初始化:根本硬件设备初始化:CPU时钟频率,存放器,存储器时钟频率,存放器,存储器数据宽度、访问周期、刷新周期,中断系统,数据宽度、访问周期、刷新周期,中断系统,I/O端口等;端口等;为第二阶段预备为第二阶段预备RAM空间,设置堆栈;空间,设置堆栈;复制第二阶段代码到复制第二阶段代
9、码到RAM中,并跳转到第二阶段入口中,并跳转到第二阶段入口点点Stage2C实现实现初始化本阶段要运用的硬件设备,实现对板级驱动的支初始化本阶段要运用的硬件设备,实现对板级驱动的支持;持;检测系统内存映射;检测系统内存映射;将内核镜像和根文件系统镜像从将内核镜像和根文件系统镜像从flash读到读到RAM中;中;为内核设置启动参数;为内核设置启动参数;将将PC指针指向内核的入口处,调用内核。挂载文件系指针指向内核的入口处,调用内核。挂载文件系统;统;*13/37Linux Linux 环境下环境下BootLoaderBootLoader种类种类BootloaderMonitor描描 述述x86A
10、RMPowerPCLILO否否Linux磁盘引导程序磁盘引导程序是是否否否否GRUB否否GNU的的LILO替代程序替代程序是是否否否否Loadlin否否从从DOS引导引导Linux是是否否否否ROLO否否从从ROM引导引导Linux而不需要而不需要BIOS是是否否否否Etherboot否否通过以太网卡启动通过以太网卡启动Linux系系统的固件统的固件是是否否否否LinuxBIOS否否完全替代完全替代BUIS的的Linux引导引导程序程序是是否否否否BLOB否否LART等硬件平台引导程序等硬件平台引导程序否否是是否否U-boot是是通用引导程序通用引导程序是是是是是是RedBoot是是基于基于e
11、Cos的引导程序的引导程序是是是是是是*14/37U-bootU-boot的分析与移植的分析与移植U-boot全称全称 Universal Boot Loader,支,支持持ARM体系等多种处置器,包含常见的外设的体系等多种处置器,包含常见的外设的驱动,是一个开源的、功能强大的板极支持包驱动,是一个开源的、功能强大的板极支持包;由德国;由德国DENX软件工程中心的软件工程中心的Wolfgang Denk维护。维护。U-boot启动时处于正常的启动加载方式,启动时处于正常的启动加载方式,但是它会延时指定时间单位秒等待终端用但是它会延时指定时间单位秒等待终端用户按下恣意键而切换到下载方式,假设在指
12、定户按下恣意键而切换到下载方式,假设在指定时间内用户没有按键,那么继续启动操作系统时间内用户没有按键,那么继续启动操作系统。*15/37U-bootU-boot主要包括以下目录主要包括以下目录l board:该目录存放了:该目录存放了U-Boot支持的一些已有开发板的信息。每一个开支持的一些已有开发板的信息。每一个开发板都以一个子目录出如今当前目录中,如发板都以一个子目录出如今当前目录中,如SMDK2410子目录中存放与子目录中存放与2410开发板相关的配置文件,但由于自行设计的目的板即使与已有开发开发板相关的配置文件,但由于自行设计的目的板即使与已有开发板运用一样处置器,但其他硬件配置不一定
13、一样,所以需求参考该目录板运用一样处置器,但其他硬件配置不一定一样,所以需求参考该目录下的内容来进展修正,例如根据运用的下的内容来进展修正,例如根据运用的Flash存储器的宽度和容量,可以存储器的宽度和容量,可以修正修正flash.c中对应的参数。中对应的参数。l common:该目录存放的是:该目录存放的是U-Boot命令行界面下支持的各条命令的实现命令行界面下支持的各条命令的实现源码。每一条命令都对应一个文件,例如源码。每一条命令都对应一个文件,例如bootm命令对应就是命令对应就是cmd_bootm.c。通常主要关怀与内核引导有关的。通常主要关怀与内核引导有关的cmd_boot.c和和c
14、md_bootm.c等代码。等代码。l cpu:该目录存放了:该目录存放了U-Boot支持的支持的CPU类型。每一款类型。每一款U-Boot下支持的下支持的CPU在该目录下对应一个子目录,比如在该目录下对应一个子目录,比如S3C2440A采用的是采用的是ARM920T内内核,那么子目录核,那么子目录arm920t下即是对该处置器核的支持源码。下即是对该处置器核的支持源码。CPU相关的相关的文件主要是初始化一个执行环境,包括中断的初始化。其中有一个重要文件主要是初始化一个执行环境,包括中断的初始化。其中有一个重要文件文件start.s,该文件是一个汇编源文件,它是整个,该文件是一个汇编源文件,它
15、是整个U-Boot执行的第一执行的第一段代码,它的功能是将整个段代码,它的功能是将整个U-Boot目的代码重定位,也就是将目的代码重定位,也就是将U-Boot转移至内存中去运转。转移至内存中去运转。*16/37U-bootU-boot主要包括以下目录主要包括以下目录l drivers:U-Boot支持的各种设备驱动程序都放在该目录,比如各种网支持的各种设备驱动程序都放在该目录,比如各种网卡、支持卡、支持CFI的的Flash、串口和、串口和USB等。等。l fs: 该目录存放该目录存放U-Boot支持的文件系统,例如支持的文件系统,例如fat、fdos、jffs2、cramfs、ext2和和re
16、iserfs等。等。l include:U-Boot运用的头文件,还有对各种硬件平台支持的汇编文件运用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目录下,系统的配置文件和对文件系统支持的文件。该目录下configs目录有与目录有与开发板相关的配置头文件。该目录下的开发板相关的配置头文件。该目录下的asm目录有与目录有与CPU体系构造相关的体系构造相关的头文件,头文件,ARM对应的是对应的是asm-arm。l lib_xxx: 与体系构造相关的库文件。与与体系构造相关的库文件。与ARM相关的库放在相关的库放在lib_arm中。中。l net:与网络协议栈相
17、关的代码,:与网络协议栈相关的代码,BOOTP协议、协议、TFTP协议、协议、RARP协议协议和和NFS文件系统的实现。文件系统的实现。l tools:生成:生成U-Boot的工具,如:的工具,如:mkimage,crc等等。等等。l doc:文档目录。:文档目录。U-Boot有非常完善的文档,引荐参考阅读。有非常完善的文档,引荐参考阅读。*17/37U-bootU-boot的运转过程分析的运转过程分析U-Boot的阶段一代码通常放在的阶段一代码通常放在start.s文件中,用汇编言语写成,其主要文件中,用汇编言语写成,其主要功能是设置处置器形状、初始化中断和内存时序、对整个功能是设置处置器形
18、状、初始化中断和内存时序、对整个U-Boot目的代目的代码进展重新定位。码进展重新定位。阶段一刚开场的代码是处置器的异常处置向量表:阶段一刚开场的代码是处置器的异常处置向量表:.globl_start;系统复位的位置,由;系统复位的位置,由U-Boot.ld决决议议_start: b reset;0 x00000000,各个异常向量对应的跳转代,各个异常向量对应的跳转代码码 ldr pc, _undefined_instruction ;0 x00000004,未定义指令,未定义指令异常异常 ldrpc, _software_interrupt ;0 x00000008,软件中,软件中断异常断
19、异常 ldr pc, _prefetch_abort ;0 x0000000c,预取中止异常,预取中止异常 ldrpc, _data_abort ;0 x00000010,数据中,数据中止异常止异常 ldrpc, _not_used ;0 x00000014,未运用,未运用 ldrpc, _irq ;0 x00000018,中断异,中断异常常 ldrpc, _fiq ;0 x0000001c,快速中,快速中断异常断异常当发生各类异常时,当发生各类异常时,CPU将执行将执行interrupts.c中对应定义的中断处置函数。中对应定义的中断处置函数。*18/37U-bootU-boot的运转过程分
20、析的运转过程分析reset:/* set the cpu to SVC32 mode */mrsr0, cpsrbicr0, r0, #0 x1forrr0, r0, #0 xd3msrcpsr, r0 从以上代码可以看出,其功能主要是修正程序形状存放器从以上代码可以看出,其功能主要是修正程序形状存放器CPSR的的相关值,修正后相关值,修正后CPSR的低八位变为二进制值的低八位变为二进制值11x10011,依其值可知,依其值可知CPU进入进入SVC管理方式,且中断和快速中断均被封锁。管理方式,且中断和快速中断均被封锁。 后续代码功能分别是封锁看门狗、制止中断、配置处置器内部时后续代码功能分别是
21、封锁看门狗、制止中断、配置处置器内部时钟、配置内存区控制存放器等,然后是代码搬移指令代码。钟、配置内存区控制存放器等,然后是代码搬移指令代码。*19/37U-bootU-boot的运转过程分析的运转过程分析接着经过以下语句跳转到接着经过以下语句跳转到C代码执行,阶段一的使命也就代码执行,阶段一的使命也就完成了。完成了。ldrpc, _start_armboot_start_armboot: .word start_armboot start_armboot()在在board.c中定义,是中定义,是Bootloader中的中的C言语开场的函数,也是整个启动代码中言语开场的函数,也是整个启动代码中
22、C言语的主函言语的主函数,同时还是整个数,同时还是整个UBoot(armboot的主函数。它类似于的主函数。它类似于Linux内核的内核的start_kernel(),是一种系统初始化的接口函,是一种系统初始化的接口函数,完成初始化任务。数,完成初始化任务。 该函数主要完成如下操作:调用一系列初始化函数完该函数主要完成如下操作:调用一系列初始化函数完成成CPU的根本设置、开发板的初始化、中断向量的初始化的根本设置、开发板的初始化、中断向量的初始化、环境变量的初始化、串口初始化等;配置可用的、环境变量的初始化、串口初始化等;配置可用的Flash区;内存初始化;区;内存初始化;I2C、LCD、vi
23、deo、音频等外围设备初、音频等外围设备初始化;网络设备初始化等等,最后进入始化;网络设备初始化等等,最后进入U-Boot命令行。命令行。*20/37嵌入式操作系统嵌入式操作系统*21/37l嵌入式实时操作系统嵌入式实时操作系统lRTlinux及其他嵌入式实时及其他嵌入式实时LinuxluC/OS IIleCOSlVxworks wind river systems公司公司lQNX QNX software systems公司公司lpSOSlOS/9lVRTXlThreadXl嵌入式非实时操作系统嵌入式非实时操作系统 l一些嵌入一些嵌入inux系统系统lWindows CE、Embedded
24、windows xp Microsoft公司公司lPalm OS Palm公司公司lEPOC Symbian公司公司)*22/37LinuxLinux嵌入式操作系统嵌入式操作系统Linux是一个类是一个类UnixUnix-like的、免费的、源代码的、免费的、源代码开放的、符合开放的、符合POSIXPortable Operating System Interface Standard规范规范的操作系统;规范规范的操作系统;严厉来说,严厉来说,Linux指由指由Linux Torvalds维护的及经过维护的及经过主要镜像网站发布的内核,而整个主要镜像网站发布的内核,而整个Linux系统的其它系
25、统的其它大部分都建立在大部分都建立在GNU软件之上;软件之上;嵌入式嵌入式Linux内核内核为特殊的硬件配置、或为了支持特别的运用而经过特别的为特殊的硬件配置、或为了支持特别的运用而经过特别的裁剪的修正正的裁剪的修正正的Linux内核;内核;通常具有不同于任务站与效力器的内核配置;通常具有不同于任务站与效力器的内核配置;嵌入式嵌入式Linux系统系统基于基于Linux内核的嵌入式系统;内核的嵌入式系统;嵌入式嵌入式Linux发行套件发行套件开发嵌入式开发嵌入式Linux系统的平台;系统的平台;各种为了在嵌入式系统中运用而剪裁过的运用软件;各种为了在嵌入式系统中运用而剪裁过的运用软件;*23/3
26、7LinuxLinux内核的开展历史内核的开展历史l 1991年年11月,芬兰赫尔辛基大学的学生月,芬兰赫尔辛基大学的学生 Linus Torvalds写了个写了个小程序,取名为小程序,取名为Linux,放在互联网上。他表达了一个愿望,希望,放在互联网上。他表达了一个愿望,希望借此搞出一个操作系统的借此搞出一个操作系统的“内核来,这完全是一个偶尔事件;内核来,这完全是一个偶尔事件;l 1993,在一批高程度黑客的参与下,诞生了,在一批高程度黑客的参与下,诞生了Linux 1.0 版版 ;l 1994年,年,Linux 的第一个商业发行版的第一个商业发行版 Slackware 问世;问世;l 2
27、019年,美国国家规范技术局的计算机系统实验室确认年,美国国家规范技术局的计算机系统实验室确认 Linux 版版本本 1.2.13由由 Open Linux 公司打包符合公司打包符合 POSIX 规范;规范;l 2019年,年,Linux2.4版内核发布版内核发布 ;l 2019年,年,Linux2.6版内核发布;版内核发布;l l Linux内核版本号由内核版本号由3位数字组成位数字组成r.x.y第1位数字r为主版本号 第2位数字x为阐明版本类型的次版本号,假设x为偶数,那么表示为产品化版本,为奇数时表示为实验版本 第3位数字y为修正号,表示错误修补的次数 *24/37几种流行的几种流行的L
28、inux OSLinux OS发行版本发行版本*25/37嵌入式嵌入式LinuxLinux系统构造图系统构造图 嵌入式嵌入式Linux具有分层的体系构造,普通可分为具有分层的体系构造,普通可分为3小层及内核小层及内核空间和用户空间两大块,每一层模块都屏蔽了其以下各层的详细空间和用户空间两大块,每一层模块都屏蔽了其以下各层的详细细节,只对上层提供功能接口或图形界面。上层模块不需求知道细节,只对上层提供功能接口或图形界面。上层模块不需求知道其以下各层模块的实现方式,只需求利用下层提供的接口完成相其以下各层模块的实现方式,只需求利用下层提供的接口完成相应功能即可。这样的层次模型大大添加了嵌入式应功能
29、即可。这样的层次模型大大添加了嵌入式Linux的平安性、的平安性、稳定性、裁减或增添模块的便利性。稳定性、裁减或增添模块的便利性。*26/37LinuxLinux内核的各子系统之间的关系内核的各子系统之间的关系 嵌入式嵌入式Linux内核普通可以分为内核普通可以分为4个部分:进程调度管理、内个部分:进程调度管理、内存管理、文件系统和设备驱动程序,它们之间的关系如上图所示。存管理、文件系统和设备驱动程序,它们之间的关系如上图所示。进程调度处于中心位置,其他一切子系统都依赖于它。在嵌入式进程调度处于中心位置,其他一切子系统都依赖于它。在嵌入式系统中,嵌入式系统中,嵌入式Linux的实时性能改造与进
30、程调度有很大的关系,的实时性能改造与进程调度有很大的关系,调度战略的算法直接关系到系统的实时性能。调度战略的算法直接关系到系统的实时性能。*27/37嵌入式嵌入式LinuxLinux中的文件系统构造中的文件系统构造 嵌入式嵌入式Linux的文件系统建立在块设备上,不采用驱动器号或的文件系统建立在块设备上,不采用驱动器号或驱动器称号来标识,而是采用了树形构造,每个独立文件系统为驱动器称号来标识,而是采用了树形构造,每个独立文件系统为一个子树,组成树形的层次化的构造。当引入新的文件系统时,一个子树,组成树形的层次化的构造。当引入新的文件系统时,嵌入式嵌入式Linux经过挂载方式将其衔接到某个目录,
31、从而使不同的文经过挂载方式将其衔接到某个目录,从而使不同的文件系统组合成一个整体成为能够。件系统组合成一个整体成为能够。*28/37嵌入式嵌入式LinuxLinux内核移植内核移植l假设一个系统是可以在不同的硬件平台上运转,那么这个假设一个系统是可以在不同的硬件平台上运转,那么这个系统就是可移植的。系统就是可移植的。Linux内核移植指根据本人的硬件平内核移植指根据本人的硬件平台对内核源代码进展修正,同时对内核进展裁剪,编译出台对内核源代码进展修正,同时对内核进展裁剪,编译出适宜本人硬件平台的内核镜像文件。适宜本人硬件平台的内核镜像文件。lLinux内核源代码包括多个目录:内核源代码包括多个目
32、录:l1arch:包括硬件特定内核代码,如:包括硬件特定内核代码,如arm、mips等;等;l2drivers:包含硬件驱动代码;:包含硬件驱动代码;l3include:通用头文件及针对不同平台的特定头文件:通用头文件及针对不同平台的特定头文件;l4init:内核初始化代码;:内核初始化代码;l5ipc:进程间通讯代码;:进程间通讯代码;l6kernel:内核中心代码;:内核中心代码;l7mm:内存管理代码;:内存管理代码;l8net:与网络协议栈相关的代码;:与网络协议栈相关的代码;l9fs:文件系统相关代码,如:文件系统相关代码,如nfs、vfat等;等;l10lib:库文件,与平台无关的
33、:库文件,与平台无关的strlen、strcpy等等*29/37LinuxLinux下驱动程序设计例如下驱动程序设计例如lLinux操作系统对串口有着很好的支持,其中的操作系统对串口有着很好的支持,其中的串口驱动程序对用户屏蔽了底层硬件的相关信息串口驱动程序对用户屏蔽了底层硬件的相关信息,而且为用户提供了一系列的规范调用函数,极,而且为用户提供了一系列的规范调用函数,极大的方便了串口通讯的操作。用户编写串口运用大的方便了串口通讯的操作。用户编写串口运用程序的时候不需求思索硬件相关的问题,只需求程序的时候不需求思索硬件相关的问题,只需求根据根据Linux操作系统提供的调用函数来实现本人操作系统提
34、供的调用函数来实现本人需求的功能。需求的功能。l在在Linux操作系统下,串口是被当做文件来对待操作系统下,串口是被当做文件来对待的,因此对它进展数据收发等效于对文件进展读的,因此对它进展数据收发等效于对文件进展读写操作。对串口的操作普通分为四个步骤:翻开写操作。对串口的操作普通分为四个步骤:翻开串口、设置串口、读写串口和封锁串口。串口、设置串口、读写串口和封锁串口。*30/37(1)(1)翻开串口翻开串口l在在ARM平台中平台中Linux操作系统下的串口设备文件操作系统下的串口设备文件为为/dev/ttySAC0。l例如程序如下:例如程序如下:lint fd;lfd = open( /dev
35、/ttySAC0, O_RDWR);l/*以读写方式翻开串口以读写方式翻开串口*/lif (fd = -1) ;l /*假设翻开串口错误那么输出提示信息假设翻开串口错误那么输出提示信息*/llperror(Cant Open Serial Port);l*31/37(2)(2)设置串口设置串口l与无操作系统的情况下对串口进展初始化设置类与无操作系统的情况下对串口进展初始化设置类似,在似,在Linux下最根本的串口设置任务主要包括下最根本的串口设置任务主要包括波特率、校验位和停顿位的设置,其设置方式主波特率、校验位和停顿位的设置,其设置方式主要是对要是对struct termios构造体各成员值
36、进展设置构造体各成员值进展设置。l在不同运用中通常需求设置的波特率及数据格式在不同运用中通常需求设置的波特率及数据格式等参数都不一样,可以将构造体成员赋值的功能等参数都不一样,可以将构造体成员赋值的功能编写成函数,经过对该函数入口参数的修正,即编写成函数,经过对该函数入口参数的修正,即可方便的实现不同的设置。可方便的实现不同的设置。*32/37波特率设置函数波特率设置函数void set_speed(int fd, int speed)int i;int status;struct termiosOpt;tcgetattr(fd, &Opt);/*得到机器原端口的默许设置得到机器原端口
37、的默许设置*/for ( i= 0; i sizeof(speed_arr) / sizeof(int); i+) if (speed = name_arri) tcflush(fd, TCIOFLUSH); /*去除输入去除输入/输出数据输出数据*/ cfsetispeed(&Opt, speed_arri); /设置输入波特率设置输入波特率cfsetospeed(&Opt, speed_arri); /设置输出波特率设置输出波特率status = tcsetattr(fd, TCSANOW, &Opt); /将设置写入串口将设置写入串口if (status != 0
38、) perror(tcsetattr fd1);return;tcflush(fd,TCIOFLUSH);*33/37数据格式设置函数数据格式设置函数int set_Parity(int fd,int databits,int stopbits,int parity)struct termios options;if ( tcgetattr( fd,&options) != 0) /*得到机器原端口的默许设置得到机器原端口的默许设置*/perror(SetupSerial 1);return(FALSE);options.c_cflag &= CSIZE; switch (databits)/设置数据位个数设置数据位个数 case 7: options.c_cflag |= CS7; /设置数据位为设置数据位为7位位 break; case 8: options.c_cflag |= CS8; /设置数据位为设置数据位为8位位 break; default: fprintf(stderr,Unsupported data sizen)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度小微企业贷款展期协议范本
- 2024-2025学年甘肃省陇南市武都实验中学高三上学期11月月考历史试卷
- 2025年度合作策划发展协议书模板
- 2025年个人经营抵押贷款合同协议
- 2025年度卫生所液压升降台租赁协议
- 2025年股东联合健身房合作发展协议
- 2025年办公室装潢设计合同范本
- 2025年红外线汽车尾气分析仪项目提案报告模板
- 2025年企业股权交易合同批准标准
- 2025年农作物机械化种植产业链优化合作协议
- 2025年春季学期学校德育工作计划安排表(完整版)
- 2025年有机肥行业发展趋势分析报告
- 湖南2024年湖南省水利厅所属事业单位招聘57人笔试历年参考题库附带答案详解
- 中央2025年中国文联所属单位招聘14人笔试历年参考题库附带答案详解
- 学生作文稿纸(A4打印)
- 2024年广东省公务员录用考试《行测》试题及答案解析
- 防止大型变压器损坏和互感器爆炸事故
- (高清版)JGJ123-2012既有建筑地基基础加固技术规范
- 生物质发电厂燃料收、储、运方案
- 游戏机卡伦刷卡系统说明书
- 轴承专用中英文对照表 (完整版)
评论
0/150
提交评论