您好,欢迎访问三七文档
第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.010.3.5习题1.在“vivi”提示符状态下,使用help查看vivi命令的用法,比较与Linux命令的不同。答:vivi命令用来配置开发板的硬件资源,使用时后面需给出必要的关键字参数,如:viviloadhelpUsage:loadflash|ram[partname|addrsize]x|y|z|t而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”应予保留;如果VxVc,说明SAR该位应予清零。然后再对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的一个重要性能参数,通常定义为:在数字输入端发生
本文标题:第三部分习题答案
链接地址:https://www.777doc.com/doc-2123457 .html