当前位置:文档之家› 嵌入式重点

嵌入式重点

嵌入式重点
嵌入式重点

第一章:概术

1.什么是嵌入式系统?(PPT8,9) IEEE 对嵌入式系统的定义:Embedded system is a kind of device used to control, monitor

or assist the operation of equipment, machinery or plant(控制、监视或者辅助设备、机器和车间运行的装置)非PC 的智能电子设备:嵌入式系统是以应用为中心和以计算机技术为基础的,并且软硬件是可裁减的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统。

2.怎么理解这个概念?嵌入式简单的讲就是把微处理器嵌入各种电子设备内部,实现设备的智能化。

(1)把软件嵌入式到硬件中:嵌入式系统里的程序是被写死的。系统上电后程序开始执行直至系统关闭,程序是不能被改变的,除非开发人员采用特定的方法才能对程序进行改进并重新写入系统。

(2)把小的嵌入式系统嵌入到更大的系统中:嵌入式系统往往作为一个大型系统的组成部分被嵌入到该系统中(这也是它名称的由来) ,嵌套关系可能相当复杂,也可能非常简单,它的表现形式多种多样。个人电脑≠嵌入式系统;单片机系统是最简单的嵌入式系统。

3. 嵌入式系统的特点是什么?(PPT23) a..硬件上:体积小、重量轻、成本低、可靠性高等,使用专用的嵌入式CPU。B.软件上,代码体积小、效率高,要求响应速度快,能够处理异步并发事件,实时处理能力,使用嵌入式实时操作系统管理。

c.嵌入式工业特点:技术密集、资金密集;高度分散不可垄断;面向应用不断创新;系统内核小,专用性强,系统精简,没有明显的系统软件、应用软件划分。开发困难,需要专门的开发工具和环境:主机/目标机开发环境。ICE 等调试工具支持软件要求固态化存储,软件代码高质量、高可靠性系统软件,高实时性是基本要求;多任务操作系统是知识集成的平台和走向工业标准化道路的基础。

4.嵌入式系统的组成:(PPT24.28)

5..为什么要采用(可移植性)(PPT43):a.不同处理平台上的移植;b.不同操作系统平台上的移植c.嵌入式平台和通用平台间的移植。

6. 嵌入式操作系统分类(PPT47)

分类1 :商用(PSOS,VxWorks,QNX,WINCE 等) ;免费(UCOS,嵌入式Linux 等)

分类2:真正的嵌入式(PSOS,VxWorks,QNX,uC/OS 等) ; 由通用平台转换过来的(WINCE,嵌入式Linux)

一些操作系统的名称:

7?交叉开发的概念(PPT85):嵌入式实时应用软件交叉开发环境:宿主机、目标机。宿主机和目标机一样时为本地编译

交叉编译:把在宿主机上编写的高级语言程序编译成可以运行在目标机上的代码,即在宿主机上能够编译生成另一种CPU (嵌入式微处理器)上的二进制程序。

交叉调试:指调试程序和被调试程序运行在不同机器上的调试器, 调试器通过某种方式能控制目标机上被调试程序的运行方式,并且通过调试器能查看和修改目标机上的内存、寄存器以及被调试程序中的变量等。

9. 系统开发过程:硬件开发:元器件选型-〉原理图编制-〉印制板-〉样板试制-〉硬件功能测试

软件开发:BSP调试-〉RTOS移植-〉协议栈移植-〉应用程序开发与调试

软硬件协同开发:系统联调-〉样机交付

应用程序开发部分:分解任务:在识别任务的并行性后,进行任务分解,将系统分解成主要的任务

定义任务间的接口:定义任务间,任务与中断处理程序间的同步、通信和互斥关系。这两个是多余出来的

10. 应用软件的固化运行阶段PPT122

实时多任务系统图(PPT41)

软件结构图(PPT36)

嵌入式实时操作系统的结构和特点(PPT46)

第二章:嵌入式软件开发流程:(4个步骤,5个目录,几个基本设置)

1.嵌入式软件的开发流程包括以下几个阶段:(PPT4)

(1)BSP的移植与开发:移植,裁减bootloader (BSP) 生成映像文件,烧写在Flash中

(2)嵌入式实时操作系统内核的移植与开发:裁减,配置内核,生成可下载的映像文件,启动目标板,配置主机与目标机的连接(用FTP,TFTP),下载到目标机的ram中

(3)应用程序的设计与调试:开发应用程序生成目标文件,配置Target Server或Target Agent,使用loader/winSh下载到ram (4)最终软件产品(客户定制映像文件)生成:将三个生成的映像文件生成可烧写的目标文件到FLASH中。

2.五个目录路径(PPT6)

(1)命令所在目录(make.exe):D:\tornado2.2\host\x86_win32\bin\make.exe

(2)生成的bootrom文件或是bsp所以目录:D:\tornado2.2\target\config\cpu860 bsp

(3)使用缺省时,生成的myboot(映像文件)所在目录:D:\tornado2.2\target\proj\myboot\default\vxworks

(4)中断驱动程序所在目录:D:\tornado2.2\target\src\drv\intrCtl

(5)定时器驱动程序所在目录:D:\tornado2.2\target\src\drv\Timer

3.Bootloader的作用和两种工作模式(PPT13,15)

Bootloader, 称为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS.

Bootloader,通常固化在硬件上某个固态存储设备上,加电后自启动;通过Bootloader,这段代码,可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。其主要任务是:正确地调用内核来加载操作系统。

Bootloader操作模式:(1)启动加载模式,即Bootloader从目标机上某个固态存储设备上将操作系统加载到RAM中运行。整个过程并没有用户的介入。启动加载模式是Bootloader的正常工作模式。(2)下载模式即目标机上的Bootloader将通过串口连接或是网络连接等通信手段从主机上下载文件。

4.怎样配置主机和目标机:(PPT49.51.)

(1)IP地址:配置该机与目标机的IP地址:在运行中cmd,在DOS下输入IPconfig

(2) 路径的设置是选择FTP 还是TFTP,在vxworks终端上的flag(f) 后0x0 或是0x80

0x0 :用FTP来下载映像文件,要设置用户名和密码,保证主机与目标机的用户名和密码一致

0x80:使用TFTP来下载映像文件; 路径设置配置的目录:(D:\tornado2.2\target\proj\myboot\default\)

(3)代码的息启动和自动运行,将应用程序加载到UsrApp()函数中(PPT77,讲义31页)

5.(1)config target servers:的配置(PPT62,讲义29页):在TargetName/IP Address右边的方框中设置为目标机的IP地址;在File一栏中,一定要选择通过FTP服务器下载到目标机中的Vxworks文件。其目录的路径为:

(D:\tornado2.2\target\proj\myboot\default\)

(2)注意:在没有目标的情况下,进行应用程序开发,则Toolchain应该选择SIMNTgnu

(3)掌握将应用程序加载到UsrApp()函数中:(void UsrApp())

第三章:多任务调度

1. (ppt19)任务状态的含义:(1)延迟(delayed)任务被延迟处于一种十字路口状态;(2)阻塞(pended)任务需要等待那些不可利用的资源而被阻塞;(3)就绪(ready)任务只需要等待CPU资源的到位的任务,获得CPU后,就会执行;(4)挂起(suspended)如果系统不需要一个任务的工作,使这个任务处于休眠状态。(挂起状态是非自然状态,人工参与的状态)阻塞的任务可以参加系统的调度,挂起的任务不参加系统的调度,任务创建后,进入挂起状态。

处于执行态的只有一个任务,即没有处于阻塞或挂起状态的优先级最高的任务在执行

2. (PPT23)引起任务的状态跃迁的函数

ready------>suspended---------taskSuspend() pended----->ready-------semGive()\msgQsend()

pended----->suspended---------taskSuspend() delayed---->ready-------------expired delay

delayed---->suspended---------taskSuspend() suspended---->ready-----------taskResume()/taskActive()

suspended---->pended------------taskResume() suspended---->delayed-----------taskResume()

3. (系统调度器使用任务控制块(TCB)来管理任务调度功能,TCB包括了任务的当前状态,优先级,要等待的事件或资源,任务程序码的起始地址,初始堆栈指针等信息。

上下文切换:TCB的一个重要的内容就是任务上下文,代表了任务运行状态,Vxworks的任务切换就是将当前任务(被换出CPU)的上下文保存到该任务的TCB,然后从调度程序选择新任务(被换入CPU)的TCB中恢复上下文。

上下文切换分两种,一种是同步上下文切换,另一个就是当停止执行一个任务,并有一个新的任务开始执行。

为了对一个新任务实现重新调度,内核必需做如下工作:(1)将目前正在执行的任务的上下文保存进它的TCB中;(2)将要执行的任务的上下文从它的TCB中恢复。

4.基于优先级的调度:多任务调度必须采用一种调度算法来分配CPU给就绪态任务,wind内核采用基于优先级的抢占式调度法作为其缺省策略,也提供轮转调度。抢占调度是基于任务的优先级。

基于优先级的抢占式调度为:为每个任务指定的优先级,没有处于阻塞或挂起的最高优先级任务将一直运行下去,当有更高优先级任务由就绪进入运行时,系统内核保存当前任务上下文,切换到更高的优先级任务。

下列情况在任何时候会导致重新调度:一是内核调用,二是中断。

5..( PPT43.46)优先级反转和优先级继承(重点看程序priority Inversion.c会分析出最终结果)

(PPT43)优先级反转:高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象。优先级继承:当高优先级任务需要低优先级任务占用的资源时,将低优先级任务的优先级别提高到和高优先级同样的级别,即相当于低优先级任务继承高优先级任务的优先级别,这样就可以使较低优先级的任务尽快地执行并且释放所需的资源。实现优先级继承:semMCreate(xx,SEM_INVERSION_SAFE(0X8),….) 优先级反semMCreate(SEM_Q_PRIORITY) semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE(0X8),….)

6.任务创建函数:int taskSpawn(name,priority,options,stackSize,entryPt,arg1,……..,arg10)

7.信号量机制(PPT122)(1)二进制信号量和互斥信号量的异同点:

相同点:有相同的操作函数semTake()和semGive()

区别:互斥信号量主要用于任务间对共享资源的互斥,而二进制信号量主要是用于任务间的同步,用于保护共享资源以及占用共享资源的任务;互斥信号量中的semTake()和semGive()成队出现;二进制信号量不支持优先级继承,而互斥信号量支持优先级继承;二进制信号量没有优先级反转的保护,互斥信号量有优先级反转的保护;对于二进制信号量,不同的任务都可以对其进行释放,但互斥信号量只能由申请该信号量的任务来释放它。(在书中的51页)

(2)程序设计题目(二进制信号量与互斥信号量用于互斥操作时,有什么不同):

若不支持优先级继承是一样的,semtake()与semgive()如是打印语句,则打印语句是连续的,高优先级不会出现在低优先级中;若有互斥信号量,如低优先级任务占有信号量,则其执行顺序高于高优先级任务

8..掌握系统的根任务:PPT80

tUsrRoot 0(优先级)最高的优先级功能:内核执行的第一个任务,初始化设备,启动用户任务,并退出

9.掌握消息队列的相关操作(程序设计方面的题目,消息队列的大小,接收的个数,类型)----发送与接收写结果:(ppt104)

10.程序设计题目:

(1)任务的状态问题

(2)二进制信号量与互斥信号量用于互斥操作时有什么不同

第四章:硬件相关的设计

1. intConnect 函数:连接中断,使用宏INUM_TO_IVEC()来计算intConnect()的第一个参数。_func_intConnectRtn() 与intConnect()有相同的参数. _func_intConnectRtn = sysXIntConnect;sysXIntConnect()是中断控制器安装例程,这里的X 表示中断控制器。在本课程中sysXIntConnect 就是ppc860IntConnect()。

2.ISR 设计约束(哪些函数不能出现在ISR中)(PPT9):(1)ISR 不能有任何可能直接或者间接导致阻塞的代码:

IO 驱动程序的I/O 操作; (3) 尽量使ISR 短小,这是因为ISR 延迟同等优先级和更低优先级的中断,延迟所有任务,中断不容易调试。还有两点。(4)如果需要支持浮点操作,则在ISR中必须调用fppSave()和fppRestore()函数。(5)将处理(需要较长时间处理的,或者不是关键代码)卸载到任务中去。

3 testIsr.c(此程序要看) PPT11页的结构要掌握。

4.中断响应的过程(如何实现的),以及中断在何时初始化。PPT35

5.系统中存在的两个中断(定时器中断和复位中断)ppt43

6.使用看门狗定时器——周期执行(PPT46)以及停止看门狗定时器。

wdId= wdCreate();

wdStart(wdId, DELAY_PERIOD, myWdIsr, 0);

Void myWdIsr(param)

{ doit(param);

wdStart( wdId, DELAY_PERIOD, myWdIsr, 0);

}

停止看门狗定时器

要取消原来已经启动的看门狗定时器STATUS wdCancel(wdId)

要删除一个看门狗定时器(并取消原先启动的定时器)STATUS wdDelete( wdId)

7.辅助时钟的相关函数:

sysAuxClkConnect() - Installs auxiliary clock routin

sysAuxClkRateSet() - Sets auxiliary clock rate.

sysAuxClkRateGet() - Gets auxiliary clock rate.

sysAuxClkEnable() - Activates auxiliary clock.

sysAuxClkDisable() - Deactivates auxiliary clock.

sysAuxClkInt() - Auxiliary clock timer ISR.

代码周期执行实现的几种方式:(1)使用辅助时钟(2)使用看门狗定时器

8.I/O系统(PPT81,讲义书上75页,78页10.4程序)

VxWorks 系统提供的延时机制主要有taskDelay()、WatchDog()等

第五章:交叉编译与交叉调试:

1.Makefile文件的作用,makefile 文件的内容;(PPT4,9)

make是一个命令工具,是一个解释makefile中指令的命令工具。make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。

Make.exe的路径:

.makefile关系到了整个工程的编译规则。自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

makefile 文件的内容:makefile 里主要包含了五个东西:显式规则、隐晦(含)规则、变量定义、文件包含和注释。

2. make中的两个目标:

3.编写Makefile (PPT44)

EXTRA_MODULES = hello.o 则在生成时,vxworks 中包含hello.o (vxWroks hello.o)

MACH_EXTRA = isrDriver.o 将设计的应用程序链接到映像文件中。(bootrom.hex )

ROM_TEXT_ADRS系统复位执行的第一条指令所在地址/romInit() (config.h;makefile)

5.交叉开发环境搭建(PPT75)

第六章:嵌入式系统的启动流程:

1.三个初始化:系统初始化,板级初始化,CPU初始化

2.BSP的作用:1)片级初始化:主要完成微处理器的初始化,硬件的初始化过程;2)板级初始化:完成微处理器以外的其他硬件设备的初始化。这是一个同时包含软硬件两部分在内的初始化过程;3)系统级初始化:这是一个以软件初始化为主的过程,主要进行操作系统初始化。BSP 将控制转交给操作系统,由操作系统进行余下的初始化操作。包括加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,比如网络系统、文件系统等;最后,操作系统创建应用程序环境并将控制转交给应用程序的入口。

3.映像文件类型:映像文件包括:(PPT21)

?VxWorks boot image:bootrom; bootrom_uncmp; bootrom_res

?VxWorks image: vxWorks; vxWorks_rom;vxWorks_romCompress; vxWorks_RomResident

4.4个地址:(PPT24)

程序:

***********Lm.c

/* periodicDog.c - use watchdog for periodic exec.*/

/*

DESCRIPTION

This code uses watchdogs to bark at the console.

No method is currently provided to kill all the

watchdogs!

*/

#include "vxWorks.h"

#include "wdLib.h"

#include "taskLib.h"

#include "logLib.h"

#include "semLib.h"

#include "sysLib.h"

#include "fioLib.h"

#define PERIOD1 (2*sysClkRateGet())

LOCAL int taskId; /* task doing periodic work */

/* synch. sem awaited by task*/

LOCAL WDOG_ID myWdId;

LOCAL void myWdRoutine1 (WDOG_ID myWdId)

{

wdStart (myWdId, PERIOD1,

(FUNCPTR) myWdRoutine1, (int) myWdId);

logMsg ("111111\n", 0,0,0,0,0,0);

}

LOCAL void myWdRoutine2()

{

logMsg ("22222\n", 0,0,0,0,0,0);

}

STATUS doggieStart (char type)

{

myWdId = wdCreate ( );

if (myWdId == NULL)

{

perror ("wdCreate");

return (ERROR);

}

switch (type)

{

case 'w':

wdStart (myWdId, PERIOD1,

(FUNCPTR) myWdRoutine1, (int) myWdId);

break;

case 'a':

sysAuxClkConnect(myWdRoutine2,0);

sysAuxClkRateSet(10);

sysAuxClkEnable();

break;

}

return (OK);

}

STATUS doggieStop (char type)

{

if (myWdId == NULL)

{

return (ERROR);

}

switch (type)

{

case 'w':

wdDelete (myWdId);

break;

case 'a':

sysAuxClkDisable();

}

return (OK);

}

***********lab2。C

#include "vxWorks.h"

#include "taskLib.h"

#include "semLib.h"

#include "stdio.h"

#include "sysLib.h"

#define TASK_PRI_A 102 /* Priority of the spawned tasks */ #define TASK_PRI_B 101 /* Priority of the spawned tasks */ #define TASK_STACK_SIZE 5000 /* stack size for spawned tasks */ LOCAL SEM_ID semId; /* semaphore id of binary semaphore 1 */ LOCAL int numTimes = 3; /* Number of iterations */

LOCAL STATUS taskA ();

LOCAL STATUS taskB ();

STATUS semTest (char semType)

{

switch (semType)

{

case 'c':

case 'C':

if ((semId = semCCreate(SEM_Q_PRIORITY,SEM_EMPTY)) == NULL) {

perror ("semCCreate");

return (ERROR);

}

break;

case 'b':

case 'B':

if ((semId = semBCreate(SEM_Q_PRIORITY,SEM_EMPTY)) == NULL)

{

perror ("semBCreate");

return (ERROR);

}

break;

printf ("Unknown semType-- must be 'c' or 'b'\n");

return (ERROR);

}

/* Spwan taskA*/

if (taskSpawn ("tTaskA", TASK_PRI_A, 0, TASK_STACK_SIZE, (FUNCPTR) taskA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == ERROR)

{

perror ("synchronizeDemo: Error in spawning taskA");

return (ERROR);

}

/* Spwan taskB*/

if (taskSpawn ("tTaskB", TASK_PRI_B, 0, TASK_STACK_SIZE, (FUNCPTR) taskB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) == ERROR)

{

perror ("synchronizeDemo: Error in spawning taskB");

return (ERROR);

}

return (OK);

}

/***************************************************************************** * taskA - executes event A first and wakes up taskB to excute event B next

* using binary semaphores for synchronization.

* RETURNS: OK or ERROR

*

*/

LOCAL STATUS taskA ()

{

int count;

for (count = 0; count < numTimes; count++)

{

if (semTake (semId, WAIT_FOREVER) == ERROR)

{

perror ("taskA: Error in semTake");

return (ERROR);

}

printf ("taskA has gotten semId semaphore - %d times\n",(count + 1));

}

return (OK);

}

LOCAL STATUS taskB()

{

int count;

for (count = 0; count < numTimes; count++)

if (semGive (semId) == ERROR)

{

perror ("taskB: Error in semGive");

return (ERROR);

}

printf ("taskB has released semId semaphore - %d times\n",(count + 1));

}

return (OK);

}

************** myledio。C

/* ledDrv.c - pseudo memory device driver */

/* Copyright 1984-1999 Wind River Systems, Inc. */

#include "copyright_wrs.h"

/*

DESCRIPTION

This is a demo program to describe how to design char IO device.

please following the steps below

->iosDrvShow

->LEDDrv

->iosDrvShow

->devs

-> LEDDevCreate ("/ledCharIO/")

->devs

->iosFdShow

->fd=open("/ledCharIO/",2,0)

->iosFdShow

->ioctl fd,00,0

->ioctl fd,01,0

->ioctl fd,10,0

->ioctl fd,11,0

->close fd

*/

#include "vxWorks.h"

#include "ioLib.h"

#include "iosLib.h"

#include "stat.h"

#include "dirent.h"

#include "memLib.h"

#include "errnoLib.h"

#include "string.h"

#include "stdlib.h"

#include "stdio.h"

#include "memDrv.h"

#include "vxWorks.h"

#include "stdio.h"

typedef struct /* MEM_DEV - memory device descriptor */

{

DEV_HDR devHdr;

int allowOffset1;

} LED_DEV;

LED_DEV pLEDDevPerFd;

LOCAL int LEDDrvNum; /* driver number of memory driver */

/* forward declarations */

LOCAL LED_DEV *LEDOpen ();

LOCAL int LEDClose ();

LOCAL STATUS LEDIoctl ();

/******************************************************************************* *

* memDrv - install a memory driver

*

* This routine initializes the memory driver. It must be called first,

* before any other routine in the driver.

*

* RETURNS: OK, or ERROR if the I/O system cannot install the driver.

*/

STATUS LEDDrv (void)

{

if (LEDDrvNum > 0)

return (OK); /* driver already installed */

LEDDrvNum = iosDrvInstall ((FUNCPTR) LEDOpen, (FUNCPTR) NULL,

(FUNCPTR) LEDOpen,LEDClose,

NULL, NULL, LEDIoctl);

return (LEDDrvNum == ERROR ? ERROR : OK);

}

/******************************************************************************* *

* memDevCreate - create a memory device

*

* This routine creates a memory device containing a single file.

* Memory for the device is simply an absolute memory location

* beginning at . The parameter indicates the size of

* memory.

*

* For example, to create the device "/mem/cpu0/", a device for accessing

* the entire memory of the local processor, the proper call would be:

* .CS

* memDevCreate ("/mem/cpu0/", 0, sysMemTop())

* .CE

* The device is created with the specified name, start location, and size.

*

* pseudo-file name of the byte offset desired, or open the "raw" file at the

* beginning and specify a position to seek to. For example, the following

* call to open() allows memory to be read starting at decimal offset 1000.

* .CS

* -> fd = open ("/mem/cpu0/1000", O_RDONLY, 0)

* .CE

* Pseudo-file name offsets are scanned with "%d".

*

* CA VEAT

* The FIOSEEK operation overrides the offset given via the pseudo-file name * at open time.

*

* EXAMPLE

* Consider a system configured with two CPUs in the backplane and a separate * dual-ported memory board, each with 1 megabyte of memory. The first CPU * is mapped at VMEbus address 0x00400000 (4 Meg.), the second at bus

* address 0x00800000 (8 Meg.), the dual-ported memory board at 0x00c00000 * (12 Meg.). Three devices can be created on each CPU as follows. On

* processor 0:

* .CS

* -> memDevCreate ("/mem/local/", 0, sysMemTop())

* ...

* -> memDevCreate ("/mem/cpu1/", 0x00800000, 0x00100000)

* ...

* -> memDevCreate ("/mem/share/", 0x00c00000, 0x00100000)

* .CE

* On processor 1:

* .CS

* -> memDevCreate ("/mem/local/", 0, sysMemTop())

* ...

* -> memDevCreate ("/mem/cpu0/", 0x00400000, 0x00100000)

* ...

* -> memDevCreate ("/mem/share/", 0x00c00000, 0x00100000)

* .CE

* Processor 0 has a local disk. Data or an object module needs to be

* passed from processor 0 to processor 1. To accomplish this, processor 0

* first calls:

* .CS

* -> copy /mem/share/0

* .CE

* Processor 1 can then be given the load command:

* .CS

* -> ld

* .CE

*

* the device.

*

* ERRNO: S_ioLib_NO_DRIVER

*

*/

STATUS LEDDevCreate

(

char * name /* device name */

)

{

STATUS status;

FAST LED_DEV *pLEDDv;

*PBODR(vxImmrGet()) &= 0xfcff;

*PBPAR(vxImmrGet()) &= 0xfffffcff;

*PBDIR(vxImmrGet()) |= 0x00000300;

if (LEDDrvNum < 1)

{

errnoSet (S_ioLib_NO_DRIVER);

return (ERROR);

}

if ((pLEDDv = (LED_DEV *) calloc (1, sizeof (LED_DEV))) == NULL) return (ERROR);

/*

* XXX

* Specify byte,word,long accesses.

* Semaphore read/write? */

status = iosDevAdd ((DEV_HDR *) pLEDDv, name, LEDDrvNum);

if (status == ERROR)

free ((char *) pLEDDv);

return (status);

/* memOpen - open a memory file

*

* RETURNS: The file descriptor number, or ERROR if the name is not a * valid number.

*

* ERRNO: EINV AL

*

*/

LOCAL LED_DEV *LEDOpen

(

char *name, /* name of file to open (a number) */

int mode /* access mode (O_RDONLY,O_WRONLY,O_RDWR) */

)

{

LED_DEV *pLEDDevPerFd = NULL;

pLEDDevPerFd = (LED_DEV *) calloc(1,sizeof(LED_DEV));

if (pLEDDevPerFd != NULL)

{

return pLEDDevPerFd;

}

else

return (LED_DEV *) ERROR;

}

/******************************************************************************* *

* memRead - read from a memory file

*

* RETURNS: ERROR if the file open mode is O_WRONLY; otherwise, the number of

* bytes read (may be less than the amount requested), or 0 if the

* file is at EOF.

*

* ERRNO: EINV AL, EISDIR

*

*/

/******************************************************************************** * memWrite - write to a memory file

*

* RETURNS: The number of bytes written, or ERROR if past the end of memory or

* is O_RDONLY only.

*

* ERRNO: EINV AL, EISDIR

*

*/

/******************************************************************************* *

* memIoctl - do device specific control function

*

* Only the FIONREAD, FIOSEEK, FIOWHERE, FIOGETFL, FIOFSTATGET, and

* FIOREADDIR options are supported.

*

* RETURNS: OK, or ERROR if seeking passed the end of memory.

*

* ERRNO: EINV AL, S_ioLib_UNKNOWN_REQUEST

*

*/

LED_DEV *pfd; /* descriptor to control */

FAST int function; /* function code */

int arg; /* some argument */

{

int status;

switch (function)

{

case 00:

*PBDAT(vxImmrGet()) &= 0xfffffcff;

status = OK;

break;

case 01:

*PBDAT(vxImmrGet()) &= 0xfffffcff;

*PBDAT(vxImmrGet()) |= 0x00000100;

status = OK;

break;

case 10:

*PBDAT(vxImmrGet()) &= 0xfffffcff;

*PBDAT(vxImmrGet()) |= 0x00000200;

status = OK;

break;

case 11:

*PBDAT(vxImmrGet()) &= 0xfffffcff;

*PBDAT(vxImmrGet()) |= 0x00000300;

status = OK;

break;

default:

errno = S_ioLib_UNKNOWN_REQUEST;

status = ERROR;

}

return (status);

}

/******************************************************************************* *

* memClose - close a memory file

*

* RETURNS: OK, or ERROR if file couldn't be flushed or entry couldn't

* be found.

*/

LOCAL STATUS LEDClose (pfd)

LED_DEV *pfd; /* file descriptor of file to close */

{

free (pfd);

}

********************lab10。C

STATUS mutexSemDemo()

{

notFinished = TRUE; /* initialize the global flag */

LEDDrv();

LEDDevCreate ("/ledCharIO/");

fd=open("/ledCharIO/",2,0);

/* Create the mutual exclusion semaphore*/

if ((mutexSemId = semMCreate (SEM_Q_PRIORITY | SEM_DELETE_SAFE

| SEM_INVERSION_SAFE)) == NULL) {

perror ("Error in creating mutual exclusion semaphore");

return (ERROR);

}

/* Spwan the consumerTask task */

if (taskSpawn ("tConsumerTask", CONSUMER_TASK_PRI, 0, TASK_STACK_SIZE, (FUNCPTR) consumerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

== ERROR)

{

perror ("consumerTask: Error in spawning demoTask");

return (ERROR);

}

/* Spwan the producerTask task */

if (taskSpawn ("tProducerTask", PRODUCER_TASK_PRI, 0, TASK_STACK_SIZE,

(FUNCPTR) producerTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

== ERROR)

{

perror ("producerTask: Error in spawning demoTask");

return (ERROR);

}

/* Polling is not recommended. But used for making this demonstration

* simple */

return (OK);

}

/***************************************************************************** * producerTask - produce the message, and write the message to the global

* shared data structure by obtaining exclusive access to

* that structure which is shared with the consumerTask.

*

* RETURNS: OK or ERROR

*

*/

STATUS producerTask ()

{

int notDone = TRUE;

/* Produce NUM_ITEMS, write each of these items to the shared

* global data structure.

*/

samTake(semId);

ioctl(fd,01,0);

taskDelay(10*sysClkRateGet());

semGive(semId);

logMsg ("ProducerTask: tid = %#x, producing item = %d\n",

taskIdSelf (), count,0,0,0,0);

taskDelay (sysClkRateGet()/6); /* relingiush the CPU so that

* consumerTask can access the

* global shared data structure.

*/

}

else

notDone = FALSE;

}

return (OK);

}

/***************************************************************************** * consumerTask - consumes the message from the global shared data

* structure and updates the status filled to CONSUMED

* so that producerTask can put the next produced message

* in the global shared data structure.

*

* RETURNS: OK or ERROR

*

*/

STATUS consumerTask ()

{

int notDone = TRUE;

taskDelay (5*sysClkRateGet()); /* relingiush the CPU so that

* producerTask can access the

* global shared data structure.

*/

/* Obtain exclusive access to the global shared data structure */

semTake(semId);

ioctl(fd,10,0);

taskDelay(4*sysClkRateGet());

semGive(semId);

}

notFinished = FALSE;

return (OK);

}

* protectSharedResource - Protect access to the shared data structure with

* the mutual exclusion semaphore.

*

* RETURNS: OK or ERROR

*

*/

LOCAL STATUS protectSharedResource ()

{

if (semTake (mutexSemId, W AIT_FOREVER) == ERROR)

{

perror ("protectSharedResource: Error in semTake");

return (ERROR);

}

else

return (OK);

}

/*****************************************************************************

* releaseProtectedSharedResource - Release the protected access to the

* shared data structure using the mutual

* exclusion semaphore

*

* RETURNS: OK or ERROR

*

*/

LOCAL STATUS releaseProtectedSharedResource ()

{

if (semGive (mutexSemId) == ERROR)

{

perror ("protectSharedResource: Error in semTake");

return (ERROR);

}

else

return (OK);

}

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@

#include "vxWorks.h"

#include "taskLib.h"

#include "semLib.h"

#include "stdio.h"

#include "sysLib.h"

#define CONSUMER_TASK_PRI 97 /* Priority of the spawned tasks */

#define PRODUCER_TASK_PRI 98

#define TASK_STACK_SIZE 5000 /* stack size for spawned tasks */

#define LONG_TIME 3000000

LOCAL int numTimes = 1; /* Number of iterations */

LOCAL BOOL notDone; /* flag to indicate completion */

LOCAL STATUS lowTask();

LOCAL STATUS highTask();

LOCAL STATUS middleTask();

STATUS semTet ( char type)

{

switch (type)

{

case 'b': semId= semBCreate(SEM_Q_PRIORITY, SEM_FULL);

break;

case 'm': semId= semMCreate(SEM_Q_PRIORITY|SEM_DELETE_SAFE|SEM_INVERSION_SAFE);

break;

default:

wdDelete (semId);

printErr ("Invalid doggie type.\n");

return ERROR;

}

/* Spwan the consumerTask task */

if (taskSpawn ("tlowTask", 103, 0, TASK_STACK_SIZE,

(FUNCPTR) lowTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

== ERROR)

{

perror ("lowTask: Error in spawning demoTask");

return (ERROR);

}

if (taskSpawn ("taskMiddle", 102, 0, TASK_STACK_SIZE,

(FUNCPTR) middleTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

== ERROR)

{

perror ("middleTask: Error in spawning demoTask");

return (ERROR);

}

/* Spwan the producerTask task */

if (taskSpawn ("thighTask", 101, 0, TASK_STACK_SIZE,

(FUNCPTR) highTask, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

== ERROR)

{

perror ("highTask: Error in spawning demoTask");

return (ERROR);

}

return (OK);

}

{

int i,j;

for(j =0; j<1; j++)

{

semTake(semId,W AIT_FOREVER);

printf("lowTask has gotten the semphoreA\n" );

/*taskDelay(4*sysClkRateGet());*/

for(i=0;i<10*LONG_TIME; i++) ;

printf("lowTask want to give the semphoreB\n" );

semGive(semId);

}

printf("lowTask has given the semphoreC\n" );

}

LOCAL STATUS middleTask()

{

int i;

taskDelay(2);

for(i=0;i<10*LONG_TIME; i++)

{

if((i%LONG_TIME)==0)

printf("middleTask has gotten the semphore E\n" ); }

printf("middleTask end!\n");

}

LOCAL STATUS highTask()

{

int i, j;

taskDelay(3/**sysClkRateGet()*/);

for(j=0; j<1;j++)

{

semTake(semId,W AIT_FOREVER);

printf("highTask has gotten the semphore1\n" );

/*taskDelay(2*sysClkRateGet());*/

for(i=0;i<10*LONG_TIME; i++);

printf("highTask want to give the semphore2\n" );

semGive(semId);

}

printf("highTask has given the semphore3\n" );

***********lab9。C

/*

该实验是一个任务间通信的事件通信实验程序,用来说明如何注册、发送、接受事件。

progStart()、progStop()分别用来停止、启动本演示程序。

progStop()只是事件接受任务TeventReceiver()发送一个事件,然后将停止演示的工作交给TeventReceiver()来具体实施。TeventReceiver()任务将在信号量上进行注册,并完成事件注册的工作(包括来自信号量的事件与来自progStop()的事件)。tSemHandler为信号量处理任务。它通过反复释放、获取信号量来使得信号量周期性地发出事件。

通过progStart()来启动实例程序。启动过程中,先创建信号量资源,

再创建任务,以保证资源在被任务使用之前已经创建。

eventReceiver()完成事件接受工作。EventReceiver()在信号量上的注册工作,然后通过eventReceiver()来接受事件,当无事件到来时阻塞等待。本实例杂中eventReceiver()处理了两类事件:VXEV01VXEV02.VXEV01为来自信号量的事件,说明信号量变为可用,eventReceiver()将打印一些简单的信息。VEXV02为progStop()发出的事件,说明用户发出了停止实例程序的指令,eventReceiver()将完成停止演示程序的工作。

SemHandler()完成信号量的处理工作。SemHandler通过反复释放、获取信号量,制造出信号量反复由不可用变为可用的情形,使得信号量周期性地释放事件。

progStop()只是向事件接受任务TeventReceiver()发送特定的事件VEXV02,将停止演示程序的工作交给了TeventReceiver()。*/

#include "vxworks.h"

#include "semLib.h"

#include "eventLib.h"

/* 定义任务堆栈大小*/

#define STACK_SIZE 20000

/*定义任务延迟时间*/

#define DELAY_TICKS 50

/*定义任务ID*/

int tidEventReceiver;

int tidEvSend1;

int tidEvSend2;

/*定义信号量ID*/

SEM_ID semIdEventSender1;

SEM_ID semIdEventSender2;

STATUS progStart(void);

void semHandler1(void);

void semHandler2(void);

STATUS eventReceiver(void);

void progStop(void);

STATUS progStart(void)

{

/*创建信号量,信号量初始为0*/

semIdEventSender1 = semBCreate(SEM_Q_FIFO, SEM_EMPTY);

semIdEventSender2 = semBCreate(SEM_Q_FIFO, SEM_EMPTY);

if (semIdEventSender1 == NULL)

{

return(ERROR);

嵌入式系统知识点

嵌入式系统知识点 1.什么是嵌入式系统。 2.嵌入式系统三要素 3.嵌入式处理器的类型 4.大端存储格式的规则是______;小端存储格式的规则是。 5.ARM是______的处理器,有_____个工作状态,工作在_____状态时,执行的是32位指令集,工作在_____状态时,执行的是16位指令集。_____指令集是_____指令集的子集。 6.ARM有_____种工作模式。它们的名称和缩写分别是:()。其中特权模式是指:(),异常模式又是指:()。当前工作模式状态及设置是由_____寄存器中的M[4:0]五位决定的,每种模式对应的M[4:0]值是:()。 7.ARM的异常中断有_____种,它们的名称是:(),对应的中断入口地址是:(),默认的优先级是:()。 8.ARM核内共有_____寄存器,分_____、_____两类。按工作模式不同可分_____个寄存器组。在ARM状态时的寄存器有:所有模式下均能访问的寄存器是();除()模式外均能访问寄存器R0-R12,()模式只使用自己的专用寄存器R8-R12;在()模式中,每个模式均有自己的R13、R14、SPSR 寄存器。其中R13是作_____寄存器共_____个、R14是作_____寄存器共_____个、R15是作_____寄存器共_____个。在Thumb状态下的寄存器:通用寄存器是_____,有_____组;SP堆栈指针寄存器共有_____个,LR_____寄存器共有_____个;PC_____寄存器有_____个,CPSR_____寄存器有_____个,SPSR_____寄存器有_____个。 9.ARM7系列是_____级流水线,即_____、_____、_____。程序计数器R15(PC)总是指向取指的指令,因此PC总是指向第_____条指令。 对于ARM指令有: PC值=当前程序执行位置+_____; 对于Thumb指令有: PC值=当前程序执行位置+_____。 10.ARM的寻址方式有七种,它们是:()。 11.LDR指令 LDR R4, STSRT ;将存储地址为START的字数据读入R4

嵌入式2018年期末考试选择题.doc

单已霆一侈.习密 下面哪个咨.仗履孑嵌入式务.仗(D )o A、"夭何一号"金:K机系弦 B、IBMX200宅拓本电喧 C、联抱S10 L R本 D、Iphone多机 自嵌入式咨?仗的存僦Q徇中,存取速度最修的是(B ) o A、伪存 B、Cache Q、 Flash D、■存器向 下面(B )肘俊彳符合嵌入式春(十务核舫或。 A、宏时俊 B、彳初定韧 C、微型Q D、名纾植 ( A )宓全把务.貌就件行瘦仔都分隔篇暮来,从而;t大惺宿3专秘的可修孩佐。 A、延件抽哀龙 B、契斯碘射龙 C、瘦件瓮互/名 D、中向龙 在ARM Linux多.筒中,中断处理衿序笆入C代膨以居,ARM 的处孑(A )M 6模式。A、起偈?用户(SVC) B、中断(IRQ) C、任速中所(IRQ ) D、社笆人中昕之访的业右苟关2 自握含多 .乾的各村导铤方式中,获取蔑。浆最修的方式妥(B )o A、五谑导勾: B、立卯导以: C、窃存器导址 D、向搓导徒 在龙兮奏弦的各神导垃方式中,若藉H散的地垃包舍自充兮中,粉属孑( A )方式。A、五搓导址B、立即导必 Q、容存器导傲D、向谑导址 在笏存器向谑导徒方式中,水定窃存器中有狭的妥(B )o A、搏《散 B、修H敦函徒 C、月卷外徒 D、的址佻籍藩 向CISC如此,下而哪一招彳房孑RISC地理器的典母(D ) o

A、采用富定&度的佬合格式,握含痕餐、简单、基本寻伍:方式布2~3神

£0X0 'Q AO K 9 LLXO 、g LOXO 、V 代汨1)¥期卯本、CI (JOqV)¥ 筋:f 象、。 L 乙 EV 39 Z.8 、。 OH'idSBCir 导邪 OU c ids 多邪 'V 冬导郭纱ox 修导乎穿舞毋引衅 °( W )晋米岩茧早分LLXO 以.LXO (J3SC ) ¥ 耕 4 街 V v °¥爵£)£纱琵狄R 琴勇衫争身K @*¥爵(v )*2?'中¥辫林茗维繇私DiAfHV 1 V 貉鸟修再吝'Q 好身修的郭导 '。 器乡修葬翳'a 籍穿杪iz 毂'V ° ( O )别刁‘*警乡修街研列£^£LH 繇切修 OH FLH 、。 GLH "LH V O GLH 沱LH V H 切LH ‘08 'V (9)。。邪舞分杪切特。少琵私N 必纱琵妙修一 W)色刃耕Od 妙幻*街 级印纱 坐堵乡妙貉私存皋辛何斯吉¥£、 倒果'貉乡&群员必£)貉乡&一’本呼咨?多*)穴己v 孑 L8 39 07 L 乙 V O 8A 9S VE SL 'V ° ( 9 ) 晋%馈}纱段财本乡尊9舞肄澎岁土琵潞龄QXV 孑俩‘£辛¥斜躬,厂街8Z.99VESLX0辞*花 乙3 +08 =(l ? £H)?Q (L ? 乙H) +0H =£U e O £U + (L 〉〉乙8 )= QU *S (L ? £U) + 乙H = OH *V (V )晋国纽粉 “L#rsr ,乙B'OB QQV,,兮燮缪卫 W^dV 勇窍切别但彦坪嫌弑书OSIH 'Q 杪於缈繇私妙印⑥'孝葬粉饥 #郭罗群K '彩将少⑥窍K 案物乡/够学%不'以都/ 倒纺身软倨'3导邪粉导郡券、。 留£粉订封4 '乃旦砂俱陶弈衫‘¥多再幺咚券导郭石剃、已

嵌入式系统期末考试试卷 习题

1.下面哪一种工作模式不属于ARM特权模式(A)。 A.用户模式B.系统模式C.软中断模式D.FIQ模式 2.ARM7TDMI的工作状态包括( D )。 A.测试状态和运行状态B.挂起状态和就绪状态 C.就绪状态和运行状态D.ARM状态和Thumb状态 3.下面哪个Linux操作系统是嵌入式操作系统( B )。 A.Red-hat Linux B.uclinux C.Ubuntu Linux D.SUSE Linux 4.使用Host-Target联合开发嵌入式应用,( B )不是必须的。 A.宿主机B.银河麒麟操作系统 C.目标机D.交叉编译器 5.下面哪个不属于Linux下的一个进程在内存里的三部分的数据之一(A)。 A.寄存器段B.代码段 C.堆栈段D.数据段 选择题(共5小题,每题2分,共10分) 1.下面哪个系统属于嵌入式系统( D )。 A.“天河一号”计算机系统B.IBMX200笔记本电脑 C.联想S10上网本D.Iphone手机 2.在Makefile中的命令必须要以(A)键开始。 A.Tab键B.#号键 C.空格键D.&键 3.Linux支持多种文件系统,下面哪种不属于Linux的文件系统格式( B )。 A.Ext B.FA T32 C.NFS D.Ext3 4.下面哪种不属于VI三种工作模式之一( D )。 A.命令行模式B.插入模式 C.底行模式D.工作模式 5.下面哪一项不属于Linux内核的配置系统的三个组成部分之一( C )。 A.Makefile B.配置文件(config.in) C.make menuconfig D.配置工具 1.人们生活中常用的嵌入式设备有哪些?列举4个以上(1) 手机,(2) 机顶盒,(3) MP3,(4) GPS。(交换机、打印机、投影仪、无线路由器、车载媒体、PDA、GPS、智能家电等等。) 2.ARM9处理器使用了五级流水线,五级流水具体指哪五级:(5) 取指,(6) 译码,(7) 执行,(8) 缓冲/数据,(9) 回写。 3.在Makefile中的命令必须要以(10) Tab 键开始。 4.Linux支持多种文件系统,主要包括哪些(写出其中4中就行)(11) Ext,(12) VFA T,(13) JFS,(14) NFS。(JFS、ReiserFS、Ext、Ext2、Ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等) 5.VI的工作模式有哪三种:(15) 命令行模式,(16) 插入模式,(17) 底行模式。

3级嵌入式重点

1、嵌入式系统的定义 (1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 (2)嵌入式系统发展的4个阶段:无操作系统阶段、简单操作系统阶段、实时操作系统阶段、面向Internet阶段。 (3)知识产权核(IP核):具有知识产权的、功能具体、接口规范、可在多个集成电路设计中重复使用的功能模块,是实现系统芯片(SOC)的基本构件。 (4)IP核模块有行为、结构和物理3级不同程度的设计,对应描述功能行为的不同可以分为三类:软核、固核、硬核。 2、嵌入式系统的组成:硬件层、中间层、系统软件层和应用软件层 (1)硬件层:嵌入式微处理器、存储器、通用设备接口和I/O接口。 嵌入式核心模块=微处理器+电源电路+时钟电路+存储器Cache:位于主存和嵌入式微处理器内核之间,存放的是最近一段时间 微处理器使用最多的程序代码和数据。它的主要目标是减小存储器给微处理器内核造成的存储器访问瓶颈,使处理速度更快。 (2)中间层(也称为硬件抽象层HAL或者板级支持包BSP):它将系统上层软件和底层硬件分离开来,使系统上层软件开发人员无需关系底层硬件的具体情况,根据BSP层提供的接口开发即可。 BSP有两个特点:硬件相关性和操作系统相关性。设计一个完整的BSP需要完成两部分工作: A、嵌入式系统的硬件初始化和BSP功能。 片级初始化:纯硬件的初始化过程,把嵌入式微处理器从上电的默认状态逐步设置成系统所要求的工作状态。 板级初始化:包含软硬件两部分在内的初始化过程,为随后的系统初始化和应用程序建立硬件和软件的运行环境。 系统级初始化:以软件为主的初始化过程,进行操作系统的初始化。 B、设计硬件相关的设备驱动。 (3)系统软件层:由RTOS、文件系统、GUI、网络系统及通用组件模块组成。 RTOS是嵌入式应用软件的基础和开发平台。 (4)应用软件:由基于实时系统开发的应用程序组成。

嵌入式系统原理与接口复习要点及思考题答案(计)

嵌入式系统原理与接口复习要点及思考题答案(计)

各位:根据掌握要点认真复习,后面附有作业题答案。 第1章掌握要点 1.1.1节嵌入式系统的概念 1.1.3节嵌入式系统的特点 1.3节嵌入式处理器 1.4节嵌入式系统的组成(看课件,有补充的内容) 补:1.嵌入式系统开发过程? 2.嵌入式系统调试常用的基本方法 3.交叉编译和交叉调试 4.嵌入式操作系统 第2章掌握要点 2.1节计算机体系结构分类 2.3.1节 ARM和Thumb状态 2.3.2节 RISC技术 2.3.3节流水线技术 2.4.1 ARM存储系统 2.4.2 Cache:写通、写回、读操作分配cache、写操作分配cache、工作原理、地址映像 2.4.3节 ARM存储系统 补充: (见课件) 1. ARM简介:ARM的命名方式、5种变形

2.理解片内Flash的3种编程方法。 3.理解ARM7芯片存储器存储空间分布。(8个bank,每个bank32MB)第3章掌握要点 3.1节ARM编程模式:处理器模式、处理器工作状态、寄存器组织、 异常中断 3.2节指令格式和寻址方式 3.3节指令系统:掌握和熟练应用课件所讲的指令、可编程序段 第5章掌握要点 5.1节键盘接口:行扫描法原理、掌握编写驱动程序 5.2节 LED显示器接口:理解工作原理,掌握编写驱动程序 5.5.1节 UART异步串行接口:异步通信格式、接收的4种错误类型、初始化、发送程序、接收程序 第1章作业题答案: 1.什么是嵌入式系统? ?第一种,根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。 ?第二种,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专 用计算机系统。

整理版 嵌入式 题目

3、RISC的英文全称是Reduced Instruction Set Computer,中文是精简指令集计算机。特点是所有指 令的格式都是一致的,所有指令的指令周期也是相同的,并且采用流水线技术。在中高档服务器中采用 RISC指令的CPU主要有Compaq(康柏,即新惠普)公司的Alpha、HP公司的PA-RISC、IBM公司的PowerPC、 MIPS公司的MIPS和SUN公司的Sparc。 简答 1、简述ARM的7种模式及寄存器划分,如此划分的优点。 1、用户模式(usr) 2、快速中断模式(fiq) 3、中断模式(irq) 4、管理模式(svc):操作系统使用的保护模式 5、系统模式(sys):运行具有特权的操作系统任务 6、数据访问终止模式(abt):数据或指令预取终止时进入该模式 7、未定义指令终止模式(und):未定义的指令执行时进入该模式 ARM有31个通用的32位寄存器,6个程序状态寄存器,共分为7组,有些寄存器是所有工作模式共用的,还有一些寄存器专属于每一种工作模式 2、 cpsr和spsr寄存器作用,在异常处理时其中的内容是如何变化的? CPSR:程序状态寄存器(current program status register) (当前程序状态寄存器),在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。CPSR在用户级编程时用于存储条件码。SPSR:程序状态保存寄存器(saved program status register),每一种处理器模式下都有一个状态寄存器SPSR,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。由于用户模式和系统模式不是异常中断模式,所以他没有SPSR。当用户在用户模式或系统模式访问SPSR,将产生不可预知的后果。 3、简述冯?诺依曼结构与哈佛结构. 冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结 构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度 相同,如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。 哈佛结构是一种存储器结构。使用哈佛结构的处理器有:A VR、ARM9、ARM10、ARM11等 冯诺依曼结构是一种程序指令存储器和数据存储器合并在一起的存储器结构。 哈佛体系结构是一种将程序指令存储和数据存储分开的存储器结构。 Intel处理器采用冯诺依曼结构,ARM属于哈佛结构处理器。 4、ARM状态和THUMB状态有什么不同?写出相互切换程序。 ARM状态此时处理器执行32位的字对齐的ARM指令,Thumb状态此时处理器执行16位的,半字对齐的THUMB指令。切换程序:从ARM到Thumb: LDR R0,=lable+1 BX R0 从ARM到Thumb: LDR R0,=lable BX R0 5. 存储器映射作用。 通过赋予每个任务不同的虚拟–物理地址转换映射,支持不同任务之间的保护。地址转换函数在每一个任务中定义,在一个任务中的虚拟地址空间映射到物理内存的一个部分,而另一个任务的虚拟地址空间映射到物理存储器中的另外区域。就是把一个地址连接到另一个地址。 6. WATCHDOG的作用及实现机理。 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片 7. 交叉编译。

嵌入式期末考试试卷A卷教学教材

嵌入式期末考试试卷 A卷

5、ARM微处理器复位后,PC的地址通常是 0x0 ,初始的工作模式是Supervisor 。 6、ARM微处理器支持虚拟内存,它是通过系统控制协处理器 CP15 和MMU(存 储管理部件)来进行虚拟内存的存储和管理。当系统发生数据异常和指令领取异常时,异常处理程序透过嵌入式操作系统的内存管理机制,通过MMU交换物理内存和虚拟内存的页面,以保证程序正常执行。 7、编译链接代码时,有两种存储代码和数据的字节顺序,一种是小端对齐,另一 种是打断对齐 8、构建嵌入式系统开发环境的工具链有多种,其中开放源码的工具链是 GNU工具 链,ARM公司提供的工具链是 ADS工具链 9、计算机有CISC和RISC两种类型,以ARM微处理器为核心的计算机属于 RISC、类型,其指令长度是定长的。 二、指令测试题(共12分) 1、写一条 ARM 指令,完成操作r1 = r2 * 3(4分) ADD R1,R2,R2, LSL #1 2、初始值R1=23H,R2=0FH执行指令BIC R0, R1,R2,LSL #1后,寄存器R0, R1的值分别是多少?(4分) R0=21H,R1=23H 3、说明指令STMIA r12!, {r0-r11}的操作功能。(4分) 将R0-R11十二个寄存器中的32位数据,存储到R12地址指针为起始地址的内存中,地址的操作方式是先操作、后增加,并更新地址。 4、写一段 ARM汇编程序:循环累加队列myarray中的所有元素,直到碰上零值元

素,结果放在r4中。程序框架如下,补充代码完成上述功能。(8分) AREA total, CODE READONLY ENTRY start MOV r4, #0 ADR r0, myarray ;在此补充代码 loop LDR r1, [r0], #4 ADD r4, r4, r1 CMP r1, #0 BNE loop 5、这是一个由源程序strtest.c和scopy.s组成的混合程序项目,通过调用strcopy 完成字符串复制,程序代码如下。要求阅读程序,在程序中的注释符“//”后,说明该句程序的作用,并说明extern和EXPORT伪指令的在程序中的作用。(8分) strtest.c #include extern void strcopy(char *d, const char *s); int main() { const char *srcstr = "First string - source"; char dststr[] = "Second string - destination"; printf("Before copying:\n"); printf(" '%s'\n '%s'\n",srcstr,dststr); // strcopy(dststr,srcstr); // printf("After copying:\n"); printf(" '%s'\n '%s'\n",srcstr,dststr);// return 0; } scopy.s AREA SCopy, CODE, READONLY EXPORT strcopy strcopy LDRB r2, [r1],#1 ; STRB r2, [r0],#1 ; CMP r2, #0 ; BNE strcopy ; MOV pc,lr ; END //输出源串和目标串(8分)//调用strcopy函数

嵌入式系统原理与应用复习知识点总结

第一章 1、嵌入式系统的应用范围:军事国防、消费电子、信息家电、网络通信、工业 控制。 2、嵌入式系统定义:嵌入式系统是以应用为中心,以计算机技术为基础,软件 与硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专 用计算机系统。(嵌入式的三要素:嵌入型、专用性与计算机系统)。 3、嵌入式系统的特点:1)专用性强;2)实时约束;3)RTOS;4)高可靠性;5) 低功耗;6)专用的开发工具和开发环境;7)系统精简; 4、嵌入式系统的组成: (1)处理器:MCU、MPU、DSP、SOC; (2)外围接口及设备:存储器、通信接口、I/O 接口、输入输出设备、电源等;(3)嵌入式操作系统:windows CE、UCLinux、Vxworks、UC/OS; (4)应用软件:Bootloader 5、嵌入式系统的硬件:嵌入式微处理器(MCU、MPU、DSP、SOC),外围电路, 外部设备; 嵌入式系统的软件:无操作系统(NOSES),小型操作系统软件(SOSE)S,大型 操作系统软件(LOSES)注:ARM 处理器三大部件:ALU、控制器、寄存器。 6、嵌入式处理器特点:(1)实时多任务;(2)结构可扩展;(3)很强的存储区 保护功能;(4)低功耗; 7、DSP处理器两种工作方式:(1)经过单片机的DSP可单独构成处理器;(2) 作为协处理器,具有单片机功能和数字处理功能; 第二章 1、IP核分类:软核、固核、硬核; 2、ARM 处理器系列:(1)ARM7系列(三级流水,thumb 指令集,ARM7TDMI); (2)ARM9系列(DSP处理能力,ARM920T)(3)ARM/OE(增强DSP)(4)SecurCone 系列(提供解密安全方案);(5)StrongARM系列(Zntle 产权);(6)XScale系列(Intel 产权);(7)Cortex 系列(A:性能密集型;R:要求实时性;M:要求低 成本) 3、ARM 系列的变量后缀:(1)T:thumb 指令集;(2)D:JTAG调试器;(3)快

嵌入式考试选择题共六十个

嵌入式考试选择题(共六十个) 二.选择题(分数=1*60) 1.对一个字,存储时先存放低字节,再存放高字节(即低字节占低地址,高字节占高地址)。 则该种存储格式为__A__________ A,小端方式 B,大端方式 C,低端方式 D,高端方式 2.ARM公司是专门从事___B________ A,基于RISC技术芯片设计开发 B,ARM芯片生产 C,软件设计 D,ARM芯片销售 3.哪个不是ARM微处理器的特点_____D_______ A,体积小,低功耗,低成本,高性能 B,大多数数据操作都在寄存器中完成 C,寻址方式灵活简单,执行效率高 D,指令长度不固定 4.ARM微处理器为_____________C____ A, 16位RISC架构 B, 32位CISC架构 C, 32位RISC架构 D, 64位RISC架构 5.ARM7系列微处理器是_____A______ A, 三级流水线结构 B, 四级流水线结构 C, 三级流水线结构 D, 三级流水线结构 6.ARM9系列微处理器是________C_____ A, 三级流水线结构 B, 四级流水线结构 C, 五级流水线结构 D, 三级流水线结构 7.对于ARM7TDMI系列微处理器,下列叙述哪个是错误的__D___ A, 支持片上Debug B, 支持压缩指令集Thumb C, 内嵌硬件乘法器 D, 嵌入式ICE,但不支持片上断点和调试点

8.下列叙述哪个是错误的___B___ A, ARM指令为32位的长度,Thumb指令为16位长度 B,Thumb代码与等价的ARM代码相比较,用ARM指令要比Thumb指令节省30%-40% 以上的存储空间 C, 使用Thumb代码的系统,其功耗要低 D, Thumb指令的密度高 9.要使用WinCE或标准Linux嵌入式操作系统,ARM必须带有____A______功能 A MMU B MCU C MMC D MUM 10.ARM处理器支持以下______D___数据类型 A, 8位有符号和无符号字节 B, 16位有符号和无符号字节 C, 32位有符号和无符号字节 D, A,B,C都可以 11.在ARM体系结构中,字的长度为_______B_____位 A 16位 B 32位 C 64位 D 128位 12.嵌入式操作系统使用的保护模式是在ARM的___C_______模式下工作 A 系统模式 B 禁止模式 C 管理模式 D 用户模式 13.ARM处理器正常的程序执行状态是在___D________模式下 A 系统模式 B 禁止模式 C 管理模式 D 用户模式 14.可以通过____B______异常中断机制仿真浮点向量运算 A 指令预取中止 B 未定义的指令 C 软件中断(SWI) D 数据访问中止 15.在ARM状体下,异常IRQ,FIQ,预取中止的返回,使用的语句是___B______ A MOV PC,R14 B SUBS PC,R14,#4 C SUBS PC,R14,#8 D SUBS PC,R14#1 16.在所有工作模式下,___A_____都指向同一个物理寄存器,即各模式共享 A R0-R7 B R0-R12

嵌入式系统开发技术常考重点知识点汇总(2018年全国计算机等级考试三级教程)

2018年全国计算机等级考试三级教程嵌入式系统开发技术 常考重点知识点汇总 作者:LightoDeng 吉林大学2018年8月19日 第一章 嵌入式系统概论 1.1嵌入式系统的定义、特点、分类,以及嵌入式系统的逻辑组成。 定义:嵌入式系统是以应用为中心,及计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等多种约束的专用计算机系统。 (1)6个特点: 专用性 隐蔽性(嵌入式系统是被包装在内部) 资源受限(要求小型化、轻型化、低功耗及低成本,因此软硬件资源受到限制) 高可靠性(任何误动作都可能会产生致命的后果) 软件固化(软件都固化在只读存储器ROM中,用户不能随意更改其程序功能) 实时性 (2)逻辑组成:硬件(CPU、存储器、I/O设备及I/O接口、数据总线)+软件 1)处理器(运算器、控制器、寄存器、高速缓冲存储器Cache) 目前所有的处理器都是微处理器 嵌入式系统可包含多个处理器,中央处理器(CPU)和协助处理器(数字信号 处理器DSP、图像处理器、通信处理器) 现在嵌入式系统中使用最多的还是8位和16位的CPU,但32位和64位是技 术发展的主流 2)存储器(随机存储器RAM和只读存储器ROM) 3)I/O设备与I/O接口 4)数据总线 5)软件 (3)分类 按嵌入式系统的软硬件技术复杂程度进行分类: 低端系统 采用4位或8位单片机,在工控领域和白色家电领域占主导地位,如计算器、遥控器、充电器、空调、传真机、BP机等。

中端系统 采用8位/16位/32位单片机,主要用于普通手机、摄像机、录像机、电子游戏机等。 高端系统 采用32位/64位单片机,主要用于智能手机、调制解调器、掌上计算机、路由器、数码相机等。 1.2嵌入式处理芯片 嵌入式处理芯片有4种产品类型:微处理器、数字信号处理器、微控制器、片上系统 微处理器 比较笨重,常用于工业控制领域 数字信号处理器(DSP):专用于数字信号处理的微处理器,使用哈佛结构存储器,支持单指令多数据并行处理(SIMD)的特殊指令 微控制器(单片机MCU):相比于微处理器,集成度更高,体积小,功耗低 片上系统(SoC):系统级芯片,半导体加工工艺进入深微纳米时代。SoC将嵌入式系统的几乎全部功能都集中到一块芯片上,单个芯片就能实现数据的采集、转换、存储、处理和输入输出等多种功能。 1.3S O C芯片 (1)微电子技术 1)集成电路的分类: 大规模集成电路LSI,超大规模集成电路VLSI,极大规模集成电路ULS 嵌入式处理芯片大多属于VLSI和ULSI 2)集成电路制作工艺 集成电路的制造大约需要几百道工序,工艺复杂且技术难度非常高。集成电路是在硅衬底上制作而成的。硅衬底是将单晶硅锭经切割、研磨和抛光后制成的像镜面一样光滑的圆形薄片,它的厚度不足1mm,其直径可以是6、8、12英寸甚至更大这种硅片称为硅抛光片,用于集成电路的制造。 制造集成电路的工艺技术称为硅平面工艺,包括氧化、光刻、掺杂等多项工序。把这些工序反复交叉使用,最终在硅片上制成包含多层电路及电子元件的集成电路。 集成电路的特点:体积小、重量轻、可靠性高。其工作速度主要取决于逻辑门电路的晶体管的尺寸。尺寸越小,工作频率就越高,门电路的开关速度就越快。 摩尔定律:单块集成电路的集成度平均每18~24个月翻一番 (2)通用SoC和专用SoC 通用SoC 半导体企业通过自主开发处理器内核或购买其他企业的处理器内核的IP授权,按照目标领域功能要求所开发的SoC芯片系列 专用SoC 嵌入式系统开发商依据待开发产品的特殊要求,向半导体企业定制的SoC芯片。为委托方所专有,无法在市场采购到。如苹果公司的系列芯片。 (3)开发流程 1)总体设计可以采用系统设计语言System C(或称IEEE 1666,它是C++的扩充)或System Vetilog语言对SoC芯片的软硬件作统一的描述,按照系统需求说明书确定SoC的性能能参数,并据此进行系统全局的设计。

嵌入式系统原理与设计知识点整理

第一章嵌入式处理器 1嵌入式系统的概念组成: 定义:以应用为主,以计算机技术为基础,软硬件可裁剪,满足系统对功能、性能、可靠性、体积和功耗有严格要求的计算机系统。 组成:硬件:处理器、存储器、I / O设备、传感器 软件:①系统软件, ②应用软件。 2.嵌入式处理器分类特点: 分类:①MPU(Micro Processor Unit)微处理器。一块芯片,没有集成外设接口。部主要由运算器,控制器,寄存器组成。 ②MCU(Micro Controller Unit)微控制器(单片机)。一块芯片集成整个计算机系统。 ③EDSP(Embled Digital Signal Processor)数字信号处理器。运算速度快,擅长于大量重复数据处理 ④SOC(System On Chip)偏上系统。一块芯片,部集成了MPU和某一应用常用的功能模块 3.嵌入式处理器与通用计算机处理器的区别: ①嵌入式处理器种类繁多,功能多样 ②嵌入式处理器能力相对较弱,功耗低 ③嵌入式系统提供灵活的地址空间寻址能力 ④嵌入式系统集成了外设接口 4.①哈佛体系结构:指令和数据分开存储————————(嵌入式存储结构) 特征:在同一机器周期指令和数据同时传输 ②·诺依曼体系结构:指令和数据共用一个存储器——(通用式存数结构) 数据存储结构(多字节): 大端方式:低地址存高位;小端方式:高地址存高位 6.ARM指令集命名:V1~V8 (ARMV表示的是指令集)

7.ARM核命名:. 命名规则:ARM{x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{S}{x}——系列(版本) {y}——当数值为“2”时,表示MMU(存管理单元) {z}——当数值为“0”时,表示缓存Cache {T}——支持16位Thumb指令集 {D}——支持片上Debug(调试) {M}——嵌硬件乘法器 {I}——嵌ICE(在线仿真器)——支持片上断点及调试点 {E}——支持DSP指令 {J}——支持Jazzle技术 {F}——支持硬件浮点 {S}——可综合版本 8. JTAG调试接口的概念及作用: ①概念:(Joint Test Action Group)联合测试行动小组→检测PCB和IC芯片标准。(P CB→印刷电路板IC→集成芯片) ②作用(1)硬件基本功能测试读写 (2)软件下载:将运行代码下载到目标机RAM中 (3)软件调试:设置断点和调试点 (4)FLASH烧写:将运行最终代码烧写到FLASH存储器中。 9.GPIO概念:(General Purpose I/O Ports)通用输入/输出接口,即处理器引脚。 10.S3C2410/S3C2440 GPIO引脚 S3C2410共有117个引脚,可分成A——H共8个组,(GPA,GPB,…GPH组) S3C2440共有130个引脚,可分成A——J共9个组,(GPA,GPB,…,GPH,GPJ 组) 11.GPxCON寄存器,GPxDAT寄存器,GpxUP寄存器的功能,各位含义和用法 ①GPxCON寄存器(控制寄存器)——设置引脚功能 →GPACON(A组有23根引脚,一位对应一个引脚,共32位,拿出0~22位,其余没用) (若某一位是)0:(代表该位的引脚是一个)输出引脚 1:地址引脚 →GPBCON——GPH/JCON(用法一致,两位设置一个引脚) 00:输入引脚 01:输出引脚 10:特殊引脚 11:保留不用 GPBCON ②GPxDAT寄存器(数据寄存器)——设置引脚状态及读取引脚状态 若某一位对应的是输出引脚,写此寄存器相应位可令引脚输出高/低电平。 若某一位对应的是输入引脚,读取此寄存器可知相应引脚电平状态。GPBDAT

嵌入式选择题整理题库

选择题: 1、下面哪一种工作模式不属于特权模式()。 A、用户模式 B、系统模式 C、软中断模式 D、模式 3、920T的工作状态包括()。 A、测试状态和运行状态 B、挂起状态和就绪状态 C、就绪状态和运行状态 D、状态和状态 4、232串口通信中,表示逻辑1的电平是()。 A、0v B、3.3v C、+5v~+15v D、-5v~-15v 5、汇编语句“ R0, R2, R3, 1”的作用是()。 A. R0 = R2 + (R3 << 1) B. R0 =( R2<< 1) + R3 C. R3= R0+ (R2 << 1) D. (R3 << 1)= R0+ R2 6、I2C协议中有几根线() A.1 B.2 C.3 C.4 7、指令“ R0!, {R1, R2, R3, R4}”的寻址方式为()。 A、立即寻址 B、寄存器间接寻址 C、多寄存器寻址 D、堆栈寻址 9、232C串行通信总线的电气特性要求总线信号采用()。 A、正逻辑 B、负逻辑 C、高电平 D、低电平 10、下面哪种操作系统不属于商用操作系统。 ( ) A. B. C. D.

11. 下面哪点不是嵌入式操作系统的特点。 ( ) / 22 A. 内核精简 B. 专用性强 C. 功能强大 D. 高实时性 12. 下面哪种不属于嵌入式系统的调试方法。 ( ) A. 模拟调试 B. 软件调试 C. 调试 D. 单独调试 13. 在嵌入式处理器中,下面哪种中断方式优先级最高。 ( ) A. B. 数据中止 C. D. 14. 和的说法正确的是。 ( ) A. 的读速度比稍慢一些 B. 的写入速度比慢很多 C. 的擦除速度远比的慢 D.大多数写入操作需要先进行擦除操作 15. 下面哪种嵌入式操作系统很少用在手机上。 ( ) A. B. C. D. 16、0x17&0x11的运算结果是。 ( ) A.0x01 B.0x11 C.0x17 D.0x07 17、以下哪种方式不属于文件系统的格式。 ( ) 18、下面哪个特点不属于设备的特点。 ( ) A.串行通信方式 B.不可热拨插 C.分、和 D.通信速率比串口快 19、寄存器中反映处理器状态的位是() 位位位位

RAM嵌入式期末考试试题

何燕 120601 120601119 一、选择题(共5) 1、下面哪个不是嵌入式操作系统的特点。( C ) A.内核精简 B.专用性强 C.功能强大 D.高实时性 2、ARM指令集合Thumb指令集分别是(D )位的。 A.8,16 B.16,32 C.16,16 D.32,16 3、FIQ中断的入口地址是( A ) A.0x0000001C B.0x00000008 C.0x00000018 D.0x00000014 4、ADD R0,R1,#6,执行该指令时属于( A)寻址方式。 A.立即寻址 B.多寄存器寻址 C.寄存器直接寻址 D.相对寻址 5、寄存器R13除了可以用作通用寄存器之外,还可以作为( B ) A.程序计数器 B.堆栈指针寄存器 C.链寄存器 D.基址寄存器 6、一个32位字0x12345678,在采用bigEndian存储,在内存的排列正确的 是(B) A.78 56 34 12 B.12 34 56 78 C.87 65 43 21 D.21 43 65 87 二、填空题(共5个) 1、嵌入式系统体系结构一般具有冯.诺依曼和哈佛两种基本形式,且ARM7采用冯.诺依曼体系结构。 2、从编程角度看,ARM微处理器一般有ARM和Thumb两种工作状态。 3、ARM9处理器使用了程序存储器和数据存储器分开独立编址的哈佛结构,并采用5级指令流水线,5级流水线操作分别是取指、译码、执指、缓冲和写回。 4、ARM微处理器支持字节、半字、字三种数据类型,数据的位数分别为8位、16位、32位,其中字必须以4字节为边界对齐,半字必须以2字节为边界对齐。 5、复位异常的优先级最高,因此在任何情况下,只要进入该状态系统无条件地将PC指向0x00000000处,以执行系统第一条指令。 三、判断题(共5个) 1、ARM7采用3级指令流水线,即取指令、译码和执行指令。(√) 2、Boot Loader 是在操作系统内核运行之前运行的一段小程序。(√) 3、嵌入式系统开发环境只需要宿主机和目标机就可以。(×) 4、ARM指令中“%”后面的数字为十进制数。(×) 5、无论何种模式下R15均作为PC使用。(√) 6、ATPCS中的参数传递规则只能使用寄存器R0-R3来进行参数的传递。(×) 7、在C语言程序中调用汇编语言程序的方法是使用EXTERN关键字。(√) 8、Char *a[5];是数组指针的声明格式。(×) 9、指令ADD Rd,Rn,#3和指令ADD Rd,Rn,Rm的寻址方式不同。(√) 10、指令MUL R1,R1,R6是正确的。(×)(因为目标寄存器R1不能同时做第一操作数) 四、写出下列简称的含义(共5个)

嵌入式系统原理与接口复习要点及思考题答案(计)

各位:根据掌握要点认真复习,后面附有作业题答案。 第1章掌握要点 1.1.1节嵌入式系统的概念 1.1.3节嵌入式系统的特点 1.3节嵌入式处理器 1.4节嵌入式系统的组成(看课件,有补充的内容) 补:1.嵌入式系统开发过程? 2.嵌入式系统调试常用的基本方法 3.交叉编译和交叉调试 4.嵌入式操作系统 第2章掌握要点 2.1节计算机体系结构分类 2.3.1节 ARM和Thumb状态 2.3.2节 RISC技术 2.3.3节流水线技术 2.4.1 ARM存储系统 2.4.2 Cache:写通、写回、读操作分配cache、写操作分配cache、工作原理、地址映像 2.4.3节 ARM存储系统 补充: (见课件) 1. ARM简介:ARM的命名方式、5种变形

2.理解片内Flash的3种编程方法。 3.理解ARM7芯片存储器存储空间分布。(8个bank,每个bank32MB)第3章掌握要点 3.1节ARM编程模式:处理器模式、处理器工作状态、寄存器组织、 异常中断 3.2节指令格式和寻址方式 3.3节指令系统:掌握和熟练应用课件所讲的指令、可编程序段 第5章掌握要点 5.1节键盘接口:行扫描法原理、掌握编写驱动程序 5.2节 LED显示器接口:理解工作原理,掌握编写驱动程序 5.5.1节 UART异步串行接口:异步通信格式、接收的4种错误类型、初始化、发送程序、接收程序 第1章作业题答案: 1.什么是嵌入式系统? ?第一种,根据IEEE(国际电气和电子工程师协会)的定义:嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。 ?第二种,嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专 用计算机系统。

(完整)嵌入式考试选择题共六十个

(完整)嵌入式考试选择题共六十个 编辑整理: 尊敬的读者朋友们: 这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)嵌入式考试选择题共六十个)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。 本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)嵌入式考试选择题共六十个的全部内容。

嵌入式考试选择题(共六十个) 二.选择题(分数=1*60) 1.对一个字,存储时先存放低字节,再存放高字节(即低字节占低地址,高字节占高地址)。则该种存储格式为__A__________ A,小端方式 B,大端方式 C,低端方式 D,高端方式 2。ARM公司是专门从事___B________ A,基于RISC技术芯片设计开发 B,ARM芯片生产 C,软件设计 D,ARM芯片销售 3.哪个不是ARM微处理器的特点_____D_______ A,体积小,低功耗,低成本,高性能 B,大多数数据操作都在寄存器中完成 C,寻址方式灵活简单,执行效率高 D,指令长度不固定 4。ARM微处理器为_____________C____ A, 16位RISC架构 B, 32位CISC架构

C, 32位RISC架构 D, 64位RISC架构 5。ARM7系列微处理器是_____A______ A, 三级流水线结构 B,四级流水线结构 C,三级流水线结构 D,三级流水线结构 6.ARM9系列微处理器是________C_____ A, 三级流水线结构 B,四级流水线结构 C, 五级流水线结构 D,三级流水线结构 7。对于ARM7TDMI系列微处理器,下列叙述哪个是错误的__D___ A, 支持片上Debug B, 支持压缩指令集Thumb C,内嵌硬件乘法器 D, 嵌入式ICE,但不支持片上断点和调试点 8.下列叙述哪个是错误的___B___ A, ARM指令为32位的长度,Thumb指令为16位长度 B,Thumb代码与等价的ARM代码相比较,用ARM指令要比Thumb指令节省30%-40%以上的存储空间 C,使用Thumb代码的系统,其功耗要低 D, Thumb指令的密度高 9。要使用WinCE或标准Linux嵌入式操作系统,ARM必须带有____A______功能A MMU

嵌入式系统重点整理汇编

1.嵌入式系统:定义:以应用为中心、以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。嵌入式系统是应用于特定环境下执行面对专业领域的应用系统,其特点为:系统内核小,可裁剪;专业性强;系统精简;通常要求有高实时性的操作系统;嵌入式系统开发需要专门的开发工具和环境;一旦进入市场,就具有较长的生命周期。 嵌入式系统的典型组成: 按模块:中央处理器、外设、操作系统、应用 按体系结构:硬件层、中间层、操作系统、功能层 早期的嵌入式系统包含3个部分:硬件平台、嵌入式实时操作系统和应用程序;经过不断发展,在硬件平台和操作系统之间演化出了新的一层——硬件抽象层;硬件抽象层屏蔽了底层硬件的多样性,操作系统不再直接面对具体的硬件环境,而是由硬件抽象层代表的、逻辑上的硬件环境。板级支持包是大多数商用嵌入式操作系统实现可移植性所采用的一种方案,是硬件抽象层的一种实现。 2.嵌入式系统软件体系结构:早期的嵌入式系统包含3个部分:硬件平台、嵌入式实时操作系统和应用程序;经过不断发展,在硬件平台和操作系统之间演化出了新的一层——硬件抽象层;硬件抽象层屏蔽了底层硬件的多样性,操作系统不再直接面对具体的硬件环境,而是由硬件抽象层代表的、逻辑上的硬件环境。板级支持包是大多数商用嵌入式操作系统实现可移植性所采用的一种方案,是硬件抽象层的一种实现。 3.嵌入式系统的分类:按表现形式分(硬件范畴):芯片级嵌入(含程序或算法的处理器),模块级嵌入(系统中的某个核心模块),系统级嵌入。按实时性要求分(软件范畴):非实时系统(PDA),软实时系统,硬实时系统。嵌入式系统软件一般由嵌入式操作系统和应用软件组成;操作系统是连接计算机硬件与应用程序的系统程序,可分为:顺序执行系统(单任务系统,如DOS),分时操作系统:其特点包括多路性、交互性、“独占性”和及时性(UNIX),实时操作系统(RTOS):计算的正确性不仅取决于程序的逻辑正确性,更取决于结果产生的时间,根据对产生时间要求的严格程度又可分为:硬实时操作系统,软实时操作系统。 4.嵌入式操作系统有RTOS和DTOS之分,说明RTOS的实时性含义 答:RTOS意指实时操作系统,RTOS的实时性并非是简单的要求嵌入式操作系统响应速度快,而是要求嵌入式操作系统对外部事件和软件任务请求的响应事件具有严格的确定性。 5.实时操作系统的特点:计算的正确性不仅取决于程序的逻辑正确性,更取决于结果产生的时间。 6.冯·诺伊曼与哈佛结构:冯·诺依曼结构:采用二进制代码表示数据和指令;采用存储程序工作方式,数据和程序都存储在存储器中;由存储器、运算器、控制器、I/O设备组成计算机硬件系统;总结:程序存储,程序执行。哈佛结构:采用分别用于存储数据和程序的两个存储器,两条总线的系统结构;各个部件有专用的数据、地址与控制总线;CPU和外设DMA的操作引入了某种并行度;区别:地址空间和数据空间分开与否。哈佛结构与冯·诺依曼结构的区别:使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,这两条总线之间毫无关联;冯·诺依曼体系结构的特点:数据与指令都存储在存储器中,被大多数计算机所采用,ARM7——冯·诺依曼体系。哈佛体系结构的特点:程序存储器与数据存储器分开,指令和数据可有不同的数据宽度,提供了较大的数据存储器带宽,适合于数字信号处理,大多数DSP都是哈佛结构,ARM9是哈佛结构。 7.中断的重要性:响应突发事件(异步事件)。对计算机发展的影响:使得计算机能解决客观世界的突发事情,如实时系统。使轮询系统到事件驱动系统成为可能。 8.编址方式:独立编址(I/O具有与内存不同的地址空间),统一编址(I/O与内存在同一地址空间) 9.指令:面向程序员(软件)。微指令:复杂指令由微指令有序序列实现(在CPU中实现)。区别:每条微指令所代表的都是很简单的基本操作;所有微指令的格式都很规则、简单、易于解码;取微指令的速度很快;微指令的执行速度很快。 10.机器码是是计算机能理解和执行的唯一语言.机器码的有序集合对应于高级语言的语句.机器码是指令的二进制表示形式.

相关主题
文本预览
相关文档 最新文档