第三部分习题答案.doc
- 文档编号:5566666
- 上传时间:2023-05-08
- 格式:DOC
- 页数:9
- 大小:121KB
第三部分习题答案.doc
《第三部分习题答案.doc》由会员分享,可在线阅读,更多相关《第三部分习题答案.doc(9页珍藏版)》请在冰点文库上搜索。
第10章建立嵌入式系统开发环境
10.2.5习题
1.使用vi查看安装程序install.sh,对比install.sh中的语句与安装过程。
答:
首先建立合适的安装目录,然后安装交叉编译工具软件,然后安装Linux内核,建立根文件系统,之后安装调试工具gdb和gdbserv,最后安装试验源代码及相关文档。
2.若使用上位机的com2口与下位机进行连接,应在minicom中如何设置?
答:
若使用上位机的com2口与下位机进行连接,应在minicom中选择“Serialportsetup”进入串口配置界面。
输入“A”,将“Serialdevice”的值修改为“/dev/ttyS1”,表示连接的是上位机的com2口。
3.若下位机的IP地址为192.168.0.121,上位机的IP地址为202.201.33.15,请写出将上位机和下位机的IP地址配置在同一个网段的过程。
答:
在上位机的终端命令窗口中键入下面的命令,可以将上位机和下位机的IP地址配置在同一个网段192.168.0.:
ifconfigeth0192.168.0.252netmask255.255.255.0
10.3.5习题
1.在“vivi>”提示符状态下,使用help查看vivi命令的用法,比较与Linux命令的不同。
答:
vivi命令用来配置开发板的硬件资源,使用时后面需给出必要的关键字参数,如:
vivi>loadhelp
Usage:
load
而Linux命令的参数通常以“-”开始,如:
cat[-AbeEnstTuv][--help][--version]fileName。
2.写出下位机软件系统的四个组成部分的功能。
答:
下位机的软件系统由Bootloader 系统内核、根文件系统和应用程序四部分组成。
Bootloader相当于PC机上的BIOS,在下位机加电时自动运行,执行硬件初始化和调用系统内核的功能。
Bootloader分为U-boot、Vivi、Blob、ARMBoot、RedBoot等多种,本实验使用实验箱自带光盘中的vivi。
系统内核就是运行在下位机上的操作系统内核,本实验使用实验箱自带光盘中的zImage,是ARM-Linux的内核,版本号为2.6。
根文件系统是Linux系统必不可少的一部分,用来管理下位机中的文件。
本实验使用实验箱自带光盘中的root.cramfs。
Cramfs是专门针对Flash设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2或EXT3,经常作为下位机的根文件系统。
应用程序是需要烧写到下位机,在下位机中运行的程序,在上位机中以压缩文件包的形式保存,本实验使用实验箱自带光盘中的yaffs.tar.bz2。
应用程序所使用的文件系统为Yaffs(YetAnotherFlashFileSystem),Yaffs是一种专门为Flash设计的嵌入式文件系统,运行速度快、占用内存小,提供写均衡、垃圾收集等底层功能。
3.查阅相关资料,了解下位机软件系统的四个组成部分的生成过程。
省略
11.1.5习题
1.Makefile是如何工作的?
其中的宏定义分别是什么意思?
答:
makefile文件中语句的语法是Shell语句语法的子集,以“#”开头的语句为注释语句,内容一般分为两部分,前面部分由include和变量定义语句构成,include语句能够将另外一个文件的内容包含进来,变量定义语句定义后面部分要使用的变量。
前面部分的内容可以为空。
makefile的后面部分内容是文件的主要内容,由一些规则描述的语句块组成,make执行时将根据这些语句块的描述执行相应的命令或者程序。
其中常用的宏有:
CC:
指明采用的编译器;EXEC:
表示编译后生成的可执行文件名;OBJS:
给出目标文件列表;CFLAGS:
给出编译参数;LDFLAGS:
给出连接参数;all:
给出编译主入口;
clean:
表示清除编译结果
2.嵌入式开发的基本过程有哪几步?
答:
嵌入式开发的基本过程为:
采用相应的编辑工具编写应用程序,然后在上位机编译调试应用程序,然后使用NFS将上位机上编译好的文件下载到下位机上运行。
11.2.6习题
1.在生产者-消费中实例中,加入一个新的线程用于处理键盘的输入,并在按键为ESC时终止所有线程。
答:
参考程序见“/labs/Lab_2”文件夹中的“pth1.c”。
2.使用信号量控制方式编写多线程程序,设4个线程,其中两个线程负责从文件中读取数据到公共的缓冲区,另两个线程从缓冲区读取数据做不同的处理(加和乘运算)。
答:
参考程序见“/labs/Lab_2”文件夹中的“sem_example.c”。
3.线程的优先级的控制。
答:
程序控制线程的优先级,一般是用pthread_attr_getschedpolicy来获取系统使用的调度策略,如果是SCHED_OTHER的话,表明当前策略不支持线程优先级的使用,否则可以。
当然所设定的优先级范围必须在最大和最小值之间,可以通过sched_get_priority_max和sched_get_priority_min来获取。
在系统允许使用线程优先级别的时候,使用下面两个函数pthread_attr_setschedparam、thread_attr_getschedparam来设置线程的优先级。
11.3.6习题
1.修改程序,编写一个简单的文件收、发程序,完成串口文件下载。
答:
参考本次试验提供的用户程序,在receive函数中新建一个简单文件,读取串口字符写入文件即可,须注意发送和接收线程的互锁机制。
2.RS-232串行通信的数据格式是什么?
答:
开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后传输字符的二进制编码。
每个字符的数据位长度可以约定为5-8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个,也可不要奇偶校验。
最后是停止位的“1”信号,停止位可以约定持续1位、1.5位或2位的时间宽度。
至此一个字符传送完毕,线路又进入空闲,持续为“1”。
经过一段随机的时间后,下一个字符开始传送才又发出起始位。
3.串行通信最少需要几根线?
分别如何连接?
答:
当通信距离较近时,通信双方可以直接连接。
最简单的情况,在通信中根本不需要RS-232C的控制联络信号,只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。
图1最简单的串行通信连接方式
图1中的2号线与3号线交叉连接是因为在直连方式时,把通信双方都当作数据终端设备看待,双方都可发也可收。
在这种方式下,通信双方的任何一方,只要请求发送RTS有效和数据终端准备好DTR有效就能开始发送和接收。
4.ARM的串口有几个?
相应的寄存器是什么?
答:
S3C2410提供了三个通用异步串行通信接口,每个串口都有一个波特率发生器、接收寄存器、发送寄存器和一个控制单元,另外,还有两个16字节的FIFO寄存器作为发送和接收的缓冲装置。
在S3C2410中,对串口的控制是通过设置相应的控制寄存器来实现的,其常用的寄存器主要有以下几个:
(1)ULCONn寄存器:
主要用来设置串口工作模式,包括数据位长度、停止位个数,以及数据校验方式等。
S3C2410支持四种校验方式,分别是奇校验、偶校验、MARK校验和SPACE校验。
(2)UCONn寄存器:
该寄存器涉及到中断模式控制、DMA模式控制,以及时钟的选择等。
(3)UTRSTATn寄存器:
串口的状态寄存器,用于指示串口是否接收或发送完毕。
(4)UTXHn和URXHn寄存器:
发送和接收寄存器。
(5)UBRDIVn寄存器:
波特率设置寄存器,用于对时钟分频,产生需要的波特率。
5.终端如何处理特殊字符?
答:
在串口的参数配置结构structtermios中,通过设置c_cc数组成员来定义支持的特殊控制字符以及一些timeout参数。
c_cc支持的常量名称有:
VINTR中断控制,对应键为CTRL+C;VQUIT 退出操作,对应键为CRTL+Z;VERASE 删除操作,对应键为Backspace(BS);VKILL 删除行,对应键为CTRL+U;VEOF 位于文件结尾,对应键为CTRL+D;VEOL 位于行尾,对应键为Carriagereturn(CR);VEOL2 位于第二行尾,对应键为Linefeed(LF);VMIN 指定了最少读取的字符数;VTIME 指定了读取每个字符的等待时间。
11.4.6习题
1.修改用户程序,将三个电位器的多次转换的结果写入一个文件中。
答:
参考程序见“/labs/Lab_4”文件夹中的“main1.c”。
2.逐次逼近型的A/D转换器原理是什么?
答:
逐次逼近型A/D转换器其工作原理是:
将被测电压和由D/A转换生成的电压进行比较,用对分搜索的方法来逐次逼近被测电压。
它的实质是逐次把设定的SAR寄存器中的数字量经D/A转换后得到电压Vc与待转换模拟电压V。
进行比较。
比较时,先从SAR的最高位开始,逐次确定各位的数码应是“1”还是“0”,其工作过程如下:
转换前,先将SAR寄存器各位清零。
转换开始时,控制逻辑电路先设定SAR寄存器的最高位为“1”,其余位为“0”,此试探值经D/A转换成电压Vc,然后将Vc与模拟输入电压Vx比较。
如果Vx≥Vc,说明SAR最高位的“1”应予保留;如果Vx 然后再对SAR寄存器的次高位置“1”,依上述方法进行D/A转换和比较。 如此重复上述过程,直至确定SAR寄存器的最低位为止。 过程结束后,状态线改变状态,表明已完成一次转换。 最后,逐次逼近寄存器SAR中的内容就是与输入模拟量V相对应的二进制数字量。 3.A/D转换的重要指标包括哪些? 答: A/D转换的重要指标有;分辨率、精度、转换时间、电源灵敏度、量程、输出逻辑电平和工作温度范围等。 4.ARM的A/D功能的相关寄存器有哪几个,对应的地址是什么? 答: 与A/D相关的寄存器主要有A/D转换控制寄存器(ADCCON)和A/D转换数据寄存器ADCDAT0。 ADCCON的地址为0x58000000,ADCDAT0的地址为0x5800000C。 5.如何启动ARM开始转换A/D,有几种方式? 转换开始时ARM是如何知道转换哪路通道的? 如何判断转换结束? 答: A/D转换的数据可以通过中断或查询的方式来访问,如果使用中断方式,全部的转换时间(从A/D转换的开始到数据读出)要更长。 如果是查询方式,则要检测ADCCON[15](转换结束标志位)来确定从ADCDAT寄存器读取的数据是否是最新的转换数据。 A/D转换开始的另一种方式是将ADCCON[1]置为1,这时只要有读转换数据的信号,A/D转换才会同步开始。 转换开始时ARM中的ADCCON寄存器的第5-3位表示模拟输入通道选择,可判断其值就可知哪路通道转换。 通过测试ADCCON寄存器的第15位是否为1,就可判断转换是否结束。 11.5.6习题 1.修改用户程序,产生余弦波形信号,并使用示波器观察输出波形。 答: 参考用户程序“da_sin.c”,将其正弦函数修改为余弦函数即可。 2.修改用户程序,产生方波信号,并使用示波器观察输出波形。 答: 参考代码为“da_fang.c”。 3.D/A转换器的分类。 答: D/A转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等进行分类,主要有: 电压输出型(如TLC5620)、电流输出型(如THS5661A)、乘算型(如AD7533)、一位D/A转换器等。 4.D/A转换器的主要技术指标。 答: D/A转换器的主要技术指标有: (1)分辩率(Resolution) 分辨率用输入二进制数的有效位数表示。 在分辨率为n位的D/A转换器中,输出电压能区分2n个不同的输入二进制代码状态,能给出2n个不同等级的输出模拟电压。 分辨率也可以用D/A转换器的最小模拟输出量(对应数字量仅最低位为“1”)与最大量(对应数字量所有有效位为“1”)之比来表示。 (2)建立时间(SettingTime) 这是D/A的一个重要性能参数,通常定义为: 在数字输入端发生满量程码的变化以后,D/A的模拟输出稳定到最终值1/2LSB时,所需要的时间。 其他指标还有线性度(Linearity),转换精度,温度系数/漂移。 5.MAX504的特点及使用方法。 答: MAX50410位D/A转换器的特点有: 由单个5V电源供电;电压输出缓冲; 内部2.048V参考电压;;电压不随温度变化;可变的输出范围: 0V~VDD,VSS~VDD;上电复位;串行输出。 MAX504在开发板上的连接连接如图2所示。 图2MAX504在开发板中的连接 图2中,RFB连接VOUT、BIPOFF连接AGND,使得输出电压范围为0~2VREFIN,即0~4.069V。 时钟和输入、输出信号分别与同步串口的时钟、发送和接收端相连。 MAX504可接收12位的数据,但低两位不起作用。 所以发送数据时应先将数据左移两位,然后先发送高八位,再发送低八位数据。 11.6.6习题 1.CAN总线通讯最少需要几根线? 如果多个节点应该如何连接? 答: CAN总线通讯最少需要2根线。 一个由CAN总线构成的单一网络中,理论上可以挂接无数个节点,但是,实际应用中节点数目受网络硬件的电气特性所限制,需要使用CAN收发器实现各节点之间的通讯。 2.为什么CAN总线的可靠性高,传输数率却可以速度比串口快(可达到1Mbps)? 答: CAN属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。 与RS-485等相比,CAN总线中,CAN控制器工作于多主方式,网络中的各节点都可根据总线访问优先权采用无损结构的逐位仲裁的方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这些特点使得CAN总线构成的网络各节点之间的数据通信实时性强,并且容易构成冗余结构,提高系统的可靠性和系统的灵活性。 而利用RS-485只能构成主从式结构系统,通信方式也只能以主站轮询的方式进行,系统的实时性、可靠性较差。 3.如果要在现有的系统上构建复杂的CAN总线通信协议需要进行怎样的扩展? 省略 11.7.6习题 1.修改用户程序,将上位机上的若干个字符串传递给下位机。 答: 参考程序见“labs/lab_7”文件夹中的“test485.c”。 2.RS-485通信特点。 答: RS-485是一个电气接口规范,它只规定了平衡驱动器和接收器的电特性,而没有规定接插件、传输电缆和通信协议。 RS-485标准定义了一个基于单对平衡线的多点、双向(半双工)通信链路,是一种极为经济、并具有相当高噪声抑制、传输速率、传输距离和宽共模范围的通信平台。 RS-485接口的主要特点如下: Ø平衡传输 Ø多点通信 Ø驱动器输出电压(带载): ≥|1.5V| Ø接收器输入门限: ±200MV Ø7V至+12V总线共模范围 Ø最大输入电流: 1.0MA/-0.8MA(12VIN/7VIN) Ø最大总线负载: 32个单位负载(UL) Ø最大传输速率: 10MBPS Ø最大电缆长度: 4000英尺 Ø网络配置 3.建立自己的高层通信协议,完成设备间的多机通信。 省略 11.8.6习题 1.修改测试程序,控制直流电机以恒定速度或变速转动。 答: 参考代码为本次实验目录下的“dcm_c_v.c”。 2.简述PWM的基本原理,思考其基本参数的变化对电机转动的影响。 答: PWM(Pulse-WidthModulation)是脉宽调制技术的简称,可用于控制高性能的直流电机调速系统。 其原理为: 晶体管的导通时间也被称为导通角,通过控制晶体管的开通与断开时间来改变导通角的大小,就可以调节加在负载上的平均电压的大小,以实现对电动机的变速控制,这就是PWM变速控制技术的基本原理,如图3所示。 在PWM变速控制中,系统采用直流电源,放大器的频率是固定,变速控制通过调节脉宽来实现。 图3PWM调速原理 由上图可知,电动机两端得到的电压平均值可用下式表示为: 式中: 为开关每次接通的时间,为开关断开的时间周期,为占空比,由公式可见,改变脉冲的占空比,电动机两端的电压平均值也随之改变,从而控制电机的变速。 3.尝试使用实验箱上的电位器旋钮控制直流电机的转向和转速。 省略 11.9.6习题 1.修改用户程序,控制点阵式LED显示其它字符、图形或汉字。 答: 给出要显示字符的点阵数据,调用write方法即可。 2.编写测试程序,控制8字数码管循环显示数字9~0。 答: 给出数字9~0的段码表,调用ioctl方法控制8字数码管显示。 3.编写测试程序,控制8字数码管循环显示字符A~F。 答: 给出字符A~F的段码表,调用ioctl方法控制8字数码管显示。 4.如何控制LED显示内容。 答: 为使7段LED显示内容,必须点亮相应的段,每个段分别由数据线进行控制,通常数据线D0~D7顺序控制a~h段,所需的控制信号称为段码。 由于数字与段码之间没有规律性,因此必须进行数字与段码之间的转换才能驱动要显示的段,以便显示数字的字形。 常用的转换方法是将要显示字形的段码列成一个表,称为段码表。 显示时,根据字符查段码表,取出其对应的段码送到数据线上来控制显示。 5.LED是如何正常工作的? 答: 点阵式LED显示器的显示控制采用扫描方式,在数据存储器中开辟若干个存储单元作为显示缓冲区,缓冲区中存有所需显示图形的控制信息。 显示时依次通过列信号驱动器输出一行所需所有列的信号,然后再驱动对应的行信号,控制该行显示。 只要扫描速度适当,显示的图形就不会出现闪烁。 6.74HC273的特点及使用方法。 答: LED的驱动需用TTL电路驱动,当然需要加限流电阻,74HC273带锁存,这样D输入的信号可以锁住保持在输出端,保持LED的驱动是固定的电平状态。 脉冲输出信号也可以驱动LED,只是亮度与脉冲的脉宽有关,此外,74HC273的输入端接在数据总线上,可以起到隔离的作用。 驱动LED一般需要5-7mA的电流,负载比较大,如果接到其他门电路的输出上,会影响这个输出驱动其他门电路输入的能力。 开发板上设置了2个数码管,由74HC273控制。 74HC273是同步串行转并行的锁存器,在此通过SPI总线和CPU连接,锁存数据后驱动数码管发光。 第12章扩展实验 12.1.6习题 1.修改用户程序,完成简单的键盘计算、LED显示结果。 省略 2.重新定义小键盘健值,完成对应功能键的处理。 省略 12.2.6习题 1.阅读源程序,扩展其功能,用于在浏览器上监控开发板各部件工作。 省略 2.自定义一些功能,使用网络TCP协议实现。 省略 12.3.5习题 1.在第30行处增加1个断点,然后调试执行程序。 答: 使用命令break30设置断点。 2.将程序gdb_led.c中控制LED显示的循环语句放入用户自定义函数“voidshow()”中,使main函数调用show函数来控制LED的显示。 在main函数中调用show函数处设置断点,然后调试运行程序,比较GDB中的“step”和“next”命令的不同。 答: next命令是不进入的单步执行;而step命令是进入的单步执行,如果已经进入了某函数,而想退出该函数返回到它的调用函数中,可使用命令finish。 3.调试运行过程中,使用GDB命令“setvariables=63”,修改变量“s”的值为63,观察点阵式LED的显示。 省略 4.将第32行语句中的“s*=2”修改“s+=s*2”,观察点阵式LED的显示,并解释。 省略 12.4.6习题 1.添加一些自己的功能,修改源代码并编译调试。 省略 2.增加一个中断驱动函数,比如PC机并口,试验中断驱动的实现。 省略 12.5.6习题 1.另外找一个Linux的设备驱动程序(在Linux源码的drivers目录下),剖析它的结构及工作原理。 省略 2.把UP-TECHS2410/P270DVP开发平台上的触摸屏驱动从内核中卸载,自己动手写一个类似的驱动程序,以新驱动代替旧驱动并编译进内核看看运行情况。 省略 12.6.6习题 1.修改测试程序,画出奥运五环,并在LCD上移动显示。 答: 参考程序见本次试验目录下的“test_lcd01.c”。 2.修改测试程序,显示ASCII字符或汉字字符。 答: 给出ASCII字符或汉字字符的点阵信息,按像素输出即可。 3.修改测试程序,显示彩色位图。 答: 研究各种图形文件格式,采用像素输出函数实现显示功能。 12.7.6习题 1.修改“waverec.c”,编写一个程序,同时实现录、放WAV格式音乐文件的功能。 答: 参考程序waverec.c中的录制代码段和waveplay.c的播放代码段即可实现。 12.8.6习题 1.思考如果在SD总线上接入两个SD设备,电路、驱动程序要进行怎样的修改? 省略
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 部分 习题 答案