期末作业考核。
满分100分。
一、判断题(每题3分,共30分)
1. 嵌入式系统一般具有实时约束,有时限要求,因此,嵌入式系统一般都采用分时操作系统。(√
2.嵌入式系统本身具备自举开发能力,用户可以直接在嵌入式设备上做开发。(×
3.硬件资源是硬件设计工程师在设计和调试硬件必备的工具,这些资源不包括示波器。(√
4.嵌入式常用编程语言有汇编语言、c语言、c++语言以及j**a语言等。(√
5.嵌入式 linux是以linux为基础的嵌入式操作系统,它是一种开放源**、软实时、多任务的嵌入式操作系统。(√
6.uclinux是面向支持mmu的处理器平台设计的。(×
7.arm指令中的第二个操作数可以是一个8位的立即数,也可以是一个任意的32位立即数。(×
8.当异常发生时,需要保护程序执行现场,再进行异常处理。其中,现场保护包括返回地址和cpsr的值两个方面的内容。(√
9.map用于定义一个结构化的内存表的首地址,可以用“*”代替。(×
10.space分配的内存单元用0初始化,dcb分配的内存用指定的值初始化。(√
二、简答题(每题8分,共40分)
1. 什么是可编程片上系统(sopc)?
答: sopc(system on programmable chip)即可编程的片上系统,或者说是基于大规模 fpga 的单片系统。sopc 技术是一门全新的综合性电子设计技术,涉及面广。
在二○世纪九十年度末,可编程逻辑器件(pld)的复杂度已经能够在单个可编程器件内实现整个系统。完整的单芯片系统(soc)概念是指在一个芯片中实现用户定义的系统,它通常暗指包括片内存储器和外设的微处理器。最初宣称真正的 soc――或可编程单芯片系统(sopc)――能够提供基于 pld 的处理器。
在 2000 年,altera 发布了 nios 处理器,这是 altera excalibur 嵌入处理器计划中第一个产品, 它成为业界第一款为可编程逻辑优化的可配置处理器。 本文阐述开发 nios 处理器设计环境的过程和涉及的决策,以及它如何演化为一种 sopc 工具。 sopc 是基于 fpga 解决方案的 soc, 与 asic 的 soc 解决方案相比, sopc 系统及其开发技术具有更多的特色,构成 sopc 的方案也有如下多种途径。
2. 什么是嵌入式交叉调试?交叉调试的方式有哪几种?
答:就是宿主机(一般是电脑)与目标机(嵌入式系统)之间跨平台进行调试(一个是 x86 架构处理器,一个是 arm 或其他嵌入式微处理器) ,这种跨平台的调试就叫交叉调试。当然,宿主机与目标机之间存在某种通信方式,以太网通信或串口通信等。
常用的调试方法有 monitor 方式和片上调试方式。
3.嵌入式arm linux系统的一般开发步骤是什么?
答:第一步、建立交叉编译环境没有交叉开发经验的读者,可能一时很难接受这个概念。首先,要明白两个概念:
一般我们工作的机器,称为开发机、主机;我们制作好的系统将要放到某台机器,如手机或另一台 pc 机,这台机我们称为目标主机。 我们一般开发机上已经有一套开发工具,我们称之为原生开发套件,我们一般就是用它们来写程序,那么,那什么又是交叉编译环境呢?其实一点也不神秘,也就是在开发机上再安装一套开发工具,这套开发工具编译出来的程序,如内核、系统工作或者我们自己的程序, 是放在目标主机上运行的。
那么或许有初学者会问,直接用原生开发工具为目标主机编译程序不就完了?至少我当初是这么想的。一般来说,我们的开发机都是 x86 平台,原生开发套件开发的工具,也针对 x86 平台,而我们的目标主机可能是 powerpc、ixp、mips……所以,我们的交叉编译环境是针对某一类具体平台的。
一般来讲,交叉开发环境需要二进制工具程序、编译器、c 链接库,嵌入式开发常用的这三类软件是: binutils gcc uclibc 当然,gnu 包含的工具套件不仅于此,你还要以根据实际需要,进行选择第二步、编译内核开发工具是针对某一类硬件平台,内核同样也是。这一步,我们需要用第一步中建立的工具,对内核进行编译,对于有内核编译经验的人来说,这是非常简单的; 第三步、建立根文件系统也就是建立我们平常看到的 bin、dev、proc……这一大堆目录,以及一些必备的文件; 另外,我们还需要为我们的目标系统安装一些常用的工具软件,如 ls、ifconfig……当然, 一个办法是找到这些工具的源**,用第一步建立的交叉编译工具来编译,但是这些软件一是数量多,二是某些体积较大,不适合嵌入式系统,这一步,我们一般都是用 busybox 来完成的,包括系统引导软件 init; 最后,我们为系统还需要建立初始化的引导文件,如 inittab……
4.试举例说明ldr和str指令的前变址、后变址和回写前变址3种变址模式。
答:对于 ldr: 前变址:
ldr r0,[r1,#40] 回写前变址:ldr r0,[r1,#40]! 后变址:
ldr r0,r1,#40 对于 str: 前变址:str r0,[r1,#40] 回写前变址:
str r0,[r1,#40]! 后变址:str r0,r1,#
5.从irq和fiq处理程序返回时,如何写返回指令?
答:简单说,把要返回的地址移入 pc 中即可。说复杂一点,这个输入的地址在进入中断处理例程的时候,保存在 lr 中,所以一般的做法是做一个 movs pc, lr 即可实现。
三、问答及应用题(每小题15分,共30分)
1.简述arm的cpsr各状态位的作用,并说明如何对其进行操作,以改变各状态位。
答:cpsr 可在任何运行模式下被访问,它包含条件码标志位、中断禁止位、当前处理器模式标志位, 以及其他一些相关的控制和状态位。
条件码标志位:
n 当用两个补码表示的带符号数进行运算时,n=1 表示运算的结果为负数;n=0 表示运算的结果为正数或零;
z z=1 表示运算的结果为零;z=0 表示运算的结果为非零;
c ① 加法 (包括比较指令 cmn) 运算结果产生进位时 (无符号数溢出) ,c=1, 否则 c=0。 ②减法(包括比较指令 cmp)运算产生借位(无符号数溢出) ,c=0,否则 c=1。③ 对于包含移位操作的非加/减运算指令,c 为移出值的最后一位。
v ① 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时, v=1 表示符号位溢出。
cpsr 的低 8 位(包括 i、f、t 和 m[4:0])称为控制位,当发生异常时这些位可以被改变。
状态寄存器(psr)中的其余位为保留位,当改变 psr 中的条件码标志位或者控制位时,保留位不要被改变,在程序中也不要使用保留位来存储数据。
2.假设已经在c程序中定义了一个数组int fi[100],数组元素初始值为0。试编写一个arm汇编子程序fibonacci,实现将斐波拉契数列的前100项存入数组fi[100]中,其中前两项为1和1,分别存入到fi[0]和fi[1],其他项依次存入数组其余元素,数组的地址作为参数传递给汇编子程序。斐波拉契数列是形如:
1,1,2,3,5,8,13,…的数列。
答:int max(int array)return max ;}int main(void);/数组初始化 int number = max(array); printf("最大的数是%d",number) ;数组l的f数列 long int array[20] ;假定为100个数列中的数 int i = 0 ; array[0] =1 ; array[1] =2 ; for (i=2;i<20;i++)
printf("%d\t",array[i]) for (i=0;i<20;i++)return 0 ;}
嵌入式式系统作业
目录。摘要 1第一章绪论 2 第二章相关芯片介绍 3 2.1 tms320f28335 3 2.2 加速度传感器adxl345 4 2.3 角速度传感器l3g4200 5 第三章 dsp的i2c通讯原理 6 3.1 adxl345的i2c接口 6 3.2 l3g4200的i2c接口 8 3.3 tm...
嵌入式系统作业
嵌入式系统的应用范围可以粗略分为两大类 电子系统的智能化 工业控制 现代农业 家用电器 汽车电子 测控系统 数据采集等 计算机应用的延伸 手机 通信 网络 计算机外围设备等 从这些应用可以看出,要完成一个以mcu为核心的嵌入式系统应用产品设计,需要硬件 软件及行业领域相关知识。硬件主要有mcu的硬件...
嵌入式系统作业
计算机科学与技术学院。计科09 2班。题目 电子产品之嵌入式追踪系统。一 现状。我时常听到说某位同学的手机被盗了或者相机丢了,类似的事情在高校里时有发生。这给同学们造成了严重的损失,而且里面还有很多资料是非常重要的,这一丢失给失主造成的损失更是无法估量,那么我们能否用什么方法来解决此类问题吗?因此我...