文档库 最新最全的文档下载
当前位置:文档库 › 嵌入式实时操作系统 详细设计说明书

嵌入式实时操作系统 详细设计说明书

嵌入式实时操作系统  详细设计说明书
嵌入式实时操作系统  详细设计说明书

分类:软件项目设计使用者:E-fanciers

详细设计说明书

Version: 1.0

项目承担队伍:烟台大学

计算机学院

E-fanciers小组

撰写人(签名):孝瑞

完成日期: 2009-7-20 本文档使用小组: E-fanciers小组

评审负责人(签名):孝瑞

评审日期: 2009-7-23

目录

摘要

Abstract

1 绪论 (2)

1.1 嵌入式系统简介 (2)

1.2 嵌入式处理器 (2)

1.3 嵌入式实时操作系统(RTOS) (3)

1.4 M Y R TOS的介绍 (4)

2 硬件体系结构和软件平台 (5)

2.1 硬件体系结构 (5)

2.2 软件平台 (5)

3 MYRTOS详细设计及编码实现 (7)

3.1 M Y R TOS内核结构概述 (7)

3.1.1 临界区 (7)

3.1.2 任务及其任务控制块 (7)

3.1.3 任务调度 (8)

3.1.4 空闲任务 (9)

3.2 任务管理 (9)

3.2.1 建立任务 (10)

3.2.2 任务堆栈 (13)

3.2.3 改变任务的优先级 (14)

3.2.4 挂起任务 (15)

3.2.5 恢复任务 (17)

3.2.6 任务休眠 (19)

3.3 互斥信号量 (20)

3.3.1 创建一个互斥信号量 (20)

3.3.2 等待一个互斥信号量 (21)

3.3.3 释放一个互斥信号量 (22)

总结 (25)

致谢 (26)

参考文献 (27)

详细设计说明书

(Procedural Design Specification)

1 绪论

1.1 嵌入式系统简介

嵌入式系统本身是一个相对模糊的定义。目前嵌入式系统已经渗透到我们生活中的每个角落,工业、服务业、消费电子……,而恰恰由于这种范围的扩大,使得“嵌入式系统”更加难于明确定义。

举个简单例子:一个手持的mp3是否可以叫做是嵌入式系统呢?答案肯定是“是”。另外一个PC104的微型工业控制计算机你会认为它是嵌入式系统吗?当然,也是,工业控制是嵌入式系统技术的一个典型应用领域。然而比较两者,你也许会发现二者几乎完全不同,除了其中都嵌入有微处理器。那是否可以说嵌入着微处理器的设备就是嵌入式系统?那鼠标中也有单片机,能叫嵌入式系统嘛?

那到底什么是嵌入式系统?莫非嵌入式系统只是一个难以定义的抽象概念?

(1)嵌入式系统定义

根据IEEE(国际电机工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。

不过上述定义并不能充分体现出嵌入式系统的精髓,目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

(2)嵌入式系统的特点(与通用PC相比较)

专用性----这是与传统PC最大的区别。嵌入式系统是面向用户,面向产品,面向应用的。它只有和具体的应用相结合才能体现出自己的优势。

高实时性----这是嵌入式系统的基本条件。

嵌入性----嵌入式系统是与具体的环境相结合的,与被控对象紧密连接的。

智能性----操作使用人性化、仪表化。一般很少有人直接参与。

(3)嵌入式系统组成

嵌入式系统主要有两部分组成:嵌入式微处理器等相关硬件和嵌入式操作系统等嵌入式软件。

1.2 嵌入式处理器

嵌入式处理器的体系架构可分为三种形式:

(1)IP(Intellectual Property)级架构

也就是片上系统SoC(System on Chip)形式,即是依设备功能的需求,将不同的IP单元,集成在一块总片中,它包含有处理器功能,I/O接口功能及嵌入式软件功能。

(2)芯片级架构

依应用系统要求,选用相应的微处理器,如MCU、MPU、DSP、RISC等芯片,并将RAM、ROM(EPROM/EEPROM/Fash)及I/O接口芯片等组成相应的嵌入式系统,相应的系统软件、应用软件是以固件形式固化在ROM中,这是目前常用的嵌入式系统的架构方式。

MCU、MPU属于单片机系列,这是大家熟知的。DSP(Digita Signal Processor)数字信号处理器,它具有数字信号处理能力强,特别适合于声音、图像等多媒体信息系统,但是其常规处理能力不强、寻址范围有限、I/O功能弱及开发平台问题,较少单独作为嵌入式系统的处理器,而是与嵌入式处理器相结合,构成更强大的功能。

RISC(Reduced Instruction Set Computer)型处理器具有结构简单、处理速度快和处理功能强等优点,因此,新型的嵌入式系统大多数采用RISC处理器,主流架构由ARM架构处理器、Intel的8051处理器、Microchip的PIC处理器和ZiOG的Z80处理器。目前典型的代表是ARM架构处理器,世界上许多公司均基于ARM架构开发出相应的微处理器芯片,如:

ATME公司:AT91系列MCU(采用ARM7TDMI内核)。

Intel公司:SA-1110微处理器MPU(采用Strong ARM核)。

Cirros公司:EP及CL-PS系列掌上型计算机产品的MPU(采用ARM720T 核)。

inkup Systems公司:L720互联网处理器(采用ARM720T核)。

Sharp公司:H77790掌上型产品中的MPU(采用ARM 7TD内核)。

其它如Hyundai公司、OKI公司、Rohm公司、Samsung公司,Netsiicom公司等,其产品中均采用ARM内核。

另外一种新型的微架构处理器是Inte公司的Xscale,它是新一代为无线掌上型应用产品开发的嵌入式处理器,是PCA开发式平台架构中应用于子系统与通信子系统中的嵌入式处理器。

(3)X86处理器嵌入到应用系统中

这样可充分利用PC机的通用性和便利性,采用嵌入式操作系统,并且将操作系统和应用软件均固化在固态电子盘中,以缩小体积,增加可靠性。典型的产品有研祥公司的嵌入式CPU卡及威盛公司的C3 CPU卡。

1.3 嵌入式实时操作系统(RTOS)

嵌入式实时操作系统(Embedded Real Time OS,简称RTOS)是嵌入式系统应用开发的核心软件,是嵌入式系统的灵魂,就像我们日常所用计算机桌面系统中,微软公司的Windows 操作系统一样重要。市场上有很多著名的商业化嵌入式操作系统,如VxWorks、Pam OS、Windows CE、嵌入式Linux和μC/OS-II 等上千种RTOS。

风河VxWorks是非常出色的设备软件操作系统平台,适用于从手持电子设备到大型网络设施的各种设备。它以其良好的可靠性和卓越的实时性被广泛的应用在通信、军事、航空、航天等高精尖技术及实时性要求很高的领域中,如卫星通信、军事演习等。它是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统。它支持多种处理器,如x86,i960,StrongARM,ARM等。

Palm OS是由Palm公司自行开发,在掌上计算机和PDA市场上占有很大的市场份额。开放的操作系统应用程序接口(API),开发商可以根据需要自行开发所需的应用程序。

Windows CE是微软开发的一个嵌入式操作系统,专门用于手持设备和信息家电,它的模块化设计允许他对从掌上计算机到专用的工业控制的用户电子设备进行定制。它的特点是发展掌上型Windows系统,有文件兼容性高、功能多样化的特点,可以看作是Windows 95的简化版。

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX 和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。它以高效性和灵活性著称。但是,由于Linux是全球各地的成千上万的程序员设计和实现的,因此开发散乱也是它的一大弱点。

μC/OS-II是源代码公开的实时嵌入式操作系统,主要有以下特点:

(1)可移植性(Portable)强,μC/OS-II绝大部分源码使用ANSI C编写的,而与微处理器硬件相关的那部分使用会编写的。

(2)可固化,可裁减,可确定性。

(3)μC/OS-II完全是占先式(Preemptive)的实时内核。

(4)实时多任务,不支持时间片轮转调度法。

(5)任务栈, μC/OS-II每个任务都有自己的任务栈

(6)系统服务,μC/OS-II提供了很多的系统服务,例如信号量、互斥信号量、消息邮箱、消息队列等

1.4 MyRtos的介绍

现在,市场上有那么多的嵌入式操作系统,从简单到复杂,应有尽有。比如μC/OS-II就是一个简单易学的RTOS,而且他又是开放源代码的,免费用于个人学习的。但是,他也还有一个最大的弱点,就是不支持时间片轮转调度算法,

这样带来的另一个弱点就是任务的数量是有限。通过对μC/OS-II的研究,最终实现一个小型的嵌入式操作系统,取名为MyRtos。

MyRtos的主要特点:

(1)可移植性强(Portable),MyRtos绝大部分使用ANSI C编写,而而与微处理器硬件相关的那部分利用了μC/OS-II的函数层,所以MyRtos和μC/OS-II 一样有很强的可移植性的

⑵可固化,可裁减,可确定性。

⑶MyRtos是占先式(Preemptive)和时间片轮转共存的实时内核。

⑷实时多任务,支持时间片轮转调度法,任务数可以不确定

(5)任务栈, MyRtos每个任务都有自己的任务栈

(6)系统服务,MyRtos提供了系统服务,例如互斥信号量。

2 硬件体系结构和软件平台

2.1 硬件体系结构

硬件平台采用的是EasyARM2138开发板, 他是广州周立功公司设计的EasyARM系列开发套件之一,下面简单介绍一下EasyARM2138。

EasyARM2138采用了PHILIPS公司基于ARM7TDMI-S 核、单电源供电、QFP64封装的LPC2138,LPC2138具有32kB 的片内静态RAM 和512kB 的片内Fash 程序存储器,支持JTAG仿真调试、ISP编程等功能,

EasyARM2138开发板上还提供了一些键盘、ED、蜂鸣器等常用功能部件,还具有RS232接口电路、I2C存储器电路。另外,灵活的跳线组合(开发板内使用的所有I/O均可断开连接),还有用户I/O接口,极大地方便了用户进行32位ARM嵌入式系统的开发实验。

开发的小型嵌入式操作系统(MyRtos),代码量不是很大,对于拥有32kB 的片内静态RAM 和512kB 的片内Flash 程序存储器的PC2138来说是绰绰有余,再加上开发板还支持JTAG仿真测试,ISP编程,这样使得开发效率大幅度提高。另外开发板上还提供了一些键盘、LED、蜂鸣器等常用功能部件,还具有RS232接口电路、I2C存储器电路。这样更有利于通过小的试验才测试一下程序的正确性,通过这两点所以选择了EasyARM2138开发板。

2.2 软件平台

在软件平台的选择上,现在有很多的嵌入式开发软件平台,比如ARM公司的ADS 系列的软件,还有IAR公司的IAR Embedded Workbench for ARM Evauation,,RealView公司的MDK等软件。最后选择了陈老师推荐的MDK软

件平台,选用的是MDK3.5。

2.3 MyRtos内核结构概述

2.3.1 临界区

和其它内核一样,MyRtos为了处理临界段代码需要关中断,处理完毕后再开中断。这使得MyRtos能够避免同时有其它任务或中断服务进入临界段代码。关中断的时间是实时内核开发商应提供的最重要的指标之一,因为这个指标影响用户系统对实时事件的响应性。MyRtos努力使关中断时间降至最短,但就使用MyRtos而言,关中断的时间很大程度上取决于微处理器的架构以及编译器所生成的代码质量。

微处理器一般都有关中断/开中断指令,用户使用的C语言编译器必须有某种机制能够在C中直接实现关中断/开中断地操作。某些C编译器允许在用户的C源代码中插入汇编语言的语句。这使得插入微处理器指令来关中断/开中断很容易实现。而有的编译器把从C语言中关中断/开中断放在语言的扩展部分。MyRtos定义两个宏(macros)来关中断和开中断,以便避开不同C编译器厂商选择不同的方法来处理关中断和开中断。MyRtos中的这两个宏调用分别是:OS_ENTER_CRITICA()和OS_EXIT_CRITICA()。因为这两个宏的定义取决于所用的微处理器。

2.3.2 任务及其任务控制块

一个任务通常是一个无限的循环。一个任务看起来像其它C的函数一样,有函数返回类型,有形式参数变量,返回任务编号tid。

MyRtos可以管理的任务数取决于cpu资源的大小,任务之间的优先级可以相等,也可以不相等。一旦任务建立了,任务控制块os_tcb将被赋值。任务控制块是一个数据结构,当任务的CPU使用权被剥夺时,MyRtos用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。os_tcb全部驻留在RAM中。

程序清单3.1 ms_tcb

typedef struct ms_tcb {

OS_STK *MSTCBStkPtr; /* 指向当前任务堆栈栈顶的指针 */

INT32U MSTCBStkSize; /* 存有栈中可容纳的指针元数目 */

INT16U MSTCBId; /* 用于存储任务的识别码(ID) */

struct ms_tcb *MSTCBNext; /* 用于任务控制块OS_TCB双向链表的前链表接 */

struct ms_tcb *MSTCBPrev; /* 用于任务控制块OS_TCB双向链表的后链接 */

INT16U MSTCBDly; /* 用于把任务延时若干时钟节拍或把任务挂起一段时间*/ INT8U MSTCBStat; /* 任务的状态字*/

INT8U MSTCBPrio; /* 任务的优先级 */

char *name; /*函数的名字*/

#if MS_TASK_DEL_EN > 0

BOOLEAN MSTCBDelReq; // 用于表示该任务是否需删除,只有OS_TASK_DEL_EN =1时,

//个变元才会出现

#endif

struct ms_tcb *MSTSnext;/*当进程为同一个优先级的时候,形成一个链表*/

struct os_tcb *MSTSprev;

INT8U MSTCBInitTick; /*任务初始化的时间片*/

INT8U MSTCBRemainigTick;/*任务剩余的时间片*/

}

MS_TCB;

2.3.3 任务调度

MyRtos总是运行进入就绪态任务中优先级最高的那一个。确定哪个任务优

先级最高,下面该哪个任务运行了的工作是由调度器(Scheduer)完成的。任务

的调度是由函数MS_Sched ()完成的。

程序清单3.2 调度函数

void MS_Sched (void)

{

OS_ENTER_CRITICAL();

if ((MSIntNesting == 0) && (MSLockNesting == 0))

{

/* 如果调用来自中断服务子程序或由于至少调用了一次给任务调度上锁函数,任务调度函数将退出*/ MSPrioHighRdy =HighestPrio();

if (MSPrioHighRdy != MSPrioCur) {

/* 检查此任务是否是当前正在运行的任务以避免不必要的麻烦*/

MSTCBHighRdy = MSTCBPrioTbl[MPrioHighRdy];

/*MTCBHighRdy指向优先级最高的任务控制块*/

MCtxSwCtr++;

/* 统计计数器加1,以跟踪任务切换次数*/

MS_TASK_SW();

/* 使用此宏调用完成实际上的任务切换*/

}

}

OS_EXIT_CRITICAL();

}

MyRtos任务调度所花的时间是常数,与应用程序中建立的任务数无关。如

程序清单中条件语句的条件不满足,任务调度函数MS_Sched()将退出,不做任

务调度。这个条件是:如果在中断服务子程序中调用MS_Sched(),此时中断嵌

套层数MSIntNesting>0,或者由于用户至少调用了一次给任务调度上锁函数MSSchedLock(),使MSLockNesting>0。如果不是在中断服务子程序调用

OS_Sched (),并且任务调度是允许的,即没有上锁,则任务调度函数将找出那

个进入就绪态且优先级最高的任务。一旦找到那个优先级最高的任务,OS_Sched()

检验这个优先级最高的任务是不是当前正在运行的任务,以此来避免不必要的任

务调度。

为实现任务切换,MSTCBHighRdy必须指向优先级最高的那个任务控制块

MS_TCB,任务切换很简单,由以下两步完成,将被挂起任务的微处理器寄存器推

入堆栈,然后将较高优先级的任务的寄存器值从栈中恢复到寄存器中。在MyRtos

中,就绪任务的栈结构总是看起来跟刚刚发生过中断一样,所有微处理器的寄存

器都保存在栈中。换句话说,MyRtos运行就绪态的任务所要做的一切,只是恢

复所有的CPU寄存器并运行中断返回指令。为了做任务切换,运行

MS_TASK_SW(),人为模仿了一次中断。

2.3.4 空闲任务

程序清单3.3空闲任务

void MS_TaskIdle (void *pdata)

{

pdata = pdata; /* 为了防止编译器发出警告 */

while(1){

OS_ENTER_CRITICAL(); /*空闲的任务不停地为一个叫名为MSIdleCtr的计数器加一*/ MSIdleCtr++;

OS_EXIT_CRITICAL();

MSTaskIdleHook(); /* 调用MSTaskIdleHook(),可以写入用户的任何代码*/ }

}

上面的代码就是系统的空闲任务MS_TaskIdle(),MyRtos总是建立一个空闲任务,

这个任务在没有其它任务进入就绪态时投入运行。这个空闲任务永远设为最低优

先级,即MS_LOWEST_PRI0。空闲任务MS_TaskIdle ()什么也不做,只是在不

停地给一个32位的名叫MSIdeCtr的计数器加1,注意空闲任务不可能被应用软

件删除。

2.4 任务管理

任务可以是一个无限的循环。任务看起来与任何C函数一样,具有一个返

回类型和一个参数,任务的返回类型被定义成int型。

2.4.1 建立任务

想让MyRtos管理用户的任务,用户必须要先建立任务。用户可以通过传递

任务地址和其它参数到以下这个函数来建立任务:taskCreate ()。任务可以在多

任务调度开始前建立,也可以在其它任务的执行过程中被建立。在开始多任务调

度(即调用MSStart ())前,用户必须建立至少一个任务。任务不能由中断服务程

序(ISR)来建立。

taskCreate ()的代码如下。从中可以知道,taskCreate ()需要4个参数:name

是任务名称,entryPtr是任务函数入口,stack_size是任务栈大小,priority是分配

给任务的优先级。

程序清单3.4建立任务

INT8S taskCreate (char *name,void (*entryPtr)(void *pd), void *pdata, OS_STK *ptos, INT8U prio, INT8U TSlen)

{

OS_STK *psp;/*创建一个任务堆栈指针*/

INT8U err;/*判断是否创建任务块成功*/

if (prio > MS_LOWEST_PRIO)

{

/* 确保优先级在有效的范围内*/

return (ERROR);

/*返回错误信息,优先级大于 MS_LOWEST_PRIO*/

}

OS_ENTER_CRITICAL();

psp = (OS_STK *)MSTaskStkInit(entryPtr, pdata, ptos, 0);

/* 初始化任务栈,返回新的栈顶指针*/

err = MS_TCBInit(name,prio, psp, 64,TSlen);/*初始化任务块,成功返回MS_NO_ERR*/ OS_EXIT_CRITICAL();

if (err == OK)

{

/*MS_NO_ERR表示调用成功*/

OS_ENTER_CRITICAL();

MSTaskCtr++; /*任务计数器加一*/

OS_EXIT_CRITICAL();

if (MSRunning == TRUE)

{

/* 如果此函数是在执行某任务过程中调用的,则判断优先级 */

MS_Sched();/*任务切换*/

return (OK);

}

return tid;

}

else {

/*任务初始化失败*/

OS_ENTER_CRITICAL();

MSTCBPrioTbl[prio] = (MS_TCB *)0;/*如果任务控制块初始化失败,则放弃该任务的优先级 */ MSTCBIdTbl[tid] = (MS_TCB *)0;

OS_EXIT_CRITICAL();

return (err);/*返回任务创建是否成功*/

}

}

taskCreate()一开始先检测分配给任务的优先级是否有效。任务的优先级

必须在0到MS_LOWEST_PRIO之间。然后,taskCreate()调用MSTaskStkInit (),它负责建立任务的堆栈。该函数是与处理器的硬件体系相关

的函数。MSTaskStkInit()函数返回新的堆栈栈顶(psp),并被保存在任务的

ms_tcb中。

MyRtos支持的处理器的堆栈既可以从上(高地址)往下(低地址)递减也可以

从下往上递增。用户在调用taskCreate()的时候必须知道堆栈是递增的还是递

减的,因为用户必须得把堆栈的栈顶传递给taskCreate(),而栈顶可能是堆

栈的最高地址(堆栈从上往下递减),也可能是最低地址(堆栈从下往上长)。一旦MSTaskStkInit()函数完成了建立堆栈的任务,taskCreate()就调用

MS_TCBInit ()。MS_TCBInit ()的代码3.5所示

程序清单3.5初始化任务控制块

INT8S MS_TCBInit (char *name,INT8U prio, OS_STK *ptos,INT32U stk_size,INT8U TSlen) {

MS_TCB *ptcb;

OS_ENTER_CRITICAL();

ptcb = MSTCBFreeList; /* 得到一个空的任务控制块*/

if (ptcb != (OS_TCB *)0) {

MSTCBFreeList = ptcb->OSTCBNext; /* 指向控制块*/

OS_EXIT_CRITICAL();

ptcb->MSTCBStkPtr = ptos; /* 此 MS_TCB被初始化 */

ptcb->MSTCBPrio = prio; /*保存此块的优先级 */

ptcb->MSTCBStat = MS_STAT_SUSPEND; /* 将此任务置到就绪态 */

ptcb->MSTCBDly = 0; /* T任务没有延迟 */

ptcb->MSTCBStkSize = stk_size; /* 存储栈的大小 */

tid++;

ptcb->MSTCBId = tid; /* 存储栈的id号 */

ptcb->MSTCBInitTick=TSlen; /*初始化时间片*/

ptcb->MSTCBRemainigTick=TSlen; /*剩余时间片初始化*/

ptcb->name=name;

#if MS_TASK_DEL_EN > 0

ptcb->MSTCBDelReq =OK;

#endif

MSTCBInitHook(ptcb);

MSTaskCreateHook(ptcb); /* 调用MSTaskCreateHook()函数 */ OS_ENTER_CRITICAL();

if(MSTCBPrioTbl[prio] == (MS_TCB *)0) /*同优先级的任务TCB初始化*/ {

MSTCBPrioTbl[prio] = ptcb;

ptcb->MSTSnext = ptcb;

ptcb->MSTSprev = ptcb;

}

MSTCBIdTbl[ptcb->MSTCBId]=ptcb;

ptcb->MSTCBNext = MSTCBList;

/*插入到双向链表中,新任务MS_TCB总是插入到表头*/

ptcb->MSTCBPrev = (MS_TCB *)0;

if (MSTCBList != (MS_TCB *)0)

{

MSTCBList->MSTCBPrev = ptcb;

}

MSTCBList = ptcb;/*让 MSTCBList指向刚加入的任务块*/ OS_EXIT_CRITICAL();

return (OK);

}

OS_EXIT_CRITICAL();

return (ERROR);

}

当MS_TCBInit ()把tcb控制块相应的项目给赋值以后,包括堆栈指针,优

先级,初始化的任务状态,任务的id。然后判断这个任务是否是空闲任务,如果

不是的话,就初始化任务的timer控制块,因为空闲任务是永远不能休眠的,所

以,他的timer没有用。这些做完以后要把这个tcb插入到就绪队列表中,把这

个任务唤醒,使得任务的状态变成就绪态,等待得到cpu的使用权。

2.4.2 任务堆栈

每个任务都有自己的堆栈空间。堆栈必须声明为OS_STK类型,并且由连

续的内存空间组成。用户可以静态分配堆栈空间(在编译的时候分配)也可以动态

地分配堆栈空间(在运行的时候分配)。静态堆栈声明如程序清单 4.8和4.9所示,这两种声明应放置在函数的外面。

程序清单3.6静态堆栈一种

static OS_STK MyTaskStack[stack_size];

程序清单3.7 静态堆栈另一种

OS_STK MyTaskStack[stack_size];

用户可以用C编译器提供的malloc()函数来动态地分配堆栈空间,如程序清单代码1.6所示。在动态分配中,用户要时刻注意内存碎片问题。特别是当用户反复地建立和删除任务时,内存堆中可能会出现大量的内存碎片,导致没有足够大的一块连续内存区域可用作任务堆栈,这时malloc()便无法成功地为任务分配堆栈空间。

图3.7表示了一块能被malloc()动态分配的3K字节的内存堆[图3.7(1)]。为了讨论问题方便,假定用户要建立三个任务(任务A,B和C),每个任务需要1K 字节的空间。设第一个1K字节给任务A, 第二个1K字节给任务B, 第三个1K 字节给任务C[图3.7(2)]。然后,用户的应用程序删除任务A和任务C,用free()函数释放内存到内存堆中[3.7(3)]。现在,用户的内存堆虽有2K字节的自由内存空间,但它是不连续的,所以用户不能建立另一个需要2K字节内存的任务(即任务D)。如果用户并不会去删除任务,使用malloc()是非常可行的。

图3.7 malloc申请的内存

MyRtos支持的处理器的堆栈既可以从上(高地址)往下(低地址)长也可以从下往上长)。用户在调用taskCreate ()的时候必须知道堆栈是怎样长的,因为用户必须得把堆栈的栈顶传递给这个函数,用户需要将堆栈的最低内存地址传递给任务创建函数。

2.4.3 改变任务的优先级

在用户建立任务的时候会分配给任务一个优先级。在程序运行期间,用户可

以通过调用taskPrioritySet()来改变任务的优先级。换句话说,就是MyRtos允许

用户动态的改变任务的优先级。

程序清单3.8 改变任务的优先级

INT8S taskPrioritySet (INT8S tid, INT8U newPriority)

{

MS_TCB *ptcb;

INT8U oldPriority;

ptcb=MSTCBIdTbl[tid];

oldPriority=ptcb->MSTCBPrio;

#if MS_ARG_CHK_EN > 0

if ((oldPriority >= MS_LOWEST_PRIO && oldPriority != MS_PRIO_SELF) ||newPriority >= MS_LOWEST_PRIO) /*优先级无效*/

return (ERROR);

}

#endif

if(oldPriority==newPriority)

{return (ERROR);}

OS_ENTER_CRITICAL();

if ( oldPriority == MS_PRIO_SELF) { /* 检验当前任务是否想要改变自己的优先级*/ oldPriority = MSTCBCur->MSTCBPrio; /* 若是,获取该优先级*/

}

if ((ptcb = MSTCBIdTbl[tid]) != (MS_TCB *)0)

{

if(ptcb->MSTSnext==ptcb)/*如果同优先级只有一个任务*/

MSTCBPrioTbl[oldPriority] = (MS_TCB *)0;

/* 通过插入NULL指针,将指向当前任务MS_TCB的指针从优先级列表中移除*/

}

else

{

if(MSTCBPrioTbl[oldPriority]==ptcb)/*同优先级指向任务的指针正好是此任务块*/

{

MSTCBPrioTbl[oldPriority]=ptcb->MSTSnext;/*那么指向下一个任务控制块*/

}

ptcb->MSTSprev->MSTSnext=ptcb->MSTSnext; /*其余的指针不需要需该*/ ptcb->MSTSnext->MSTSprev=ptcb->MSTSprev;

if(MSTCBPrioTbl[newPriority]!= (MS_TCB *)0)/*以前存在新优先级的任务控制块*/

{

ptcb->MSTSnext=MSTCBPrioTbl[newPriority]; /*插入到循环链表中*/

MSTCBPrioTbl[newPriority]->MSTSprev->MSTSnext=ptcb;

ptcb->MSTSprev=MSTCBPrioTbl[newPriority]->MSTSprev;

MSTCBPrioTbl[newPriority]->MSTSprev=ptcb;

}

MSTCBPrioTbl[newPriority] = ptcb; /* 将指向任务的OS_TCB的指针存到MSTCBPrioTbl[]*/

ptcb->MSTCBPrio = newPriority; /*设置新的任务优先级*/

OS_EXIT_CRITICAL();

OS_Sched(); /* 调用调度调度函数进行任务切换 */

return (OK);

} else {

MSTCBPrioTbl[newPriority] = (OS_TCB *)0; /*释放以保存的优先级 */

OS_EXIT_CRITICAL();

return (ERROR); /* 要改变优先级的任务不存在 */

}

}

改变任务优先级要知道两个参数,一个就是要改变优先级的任务的任务控制

块指针,再一个就是要变成的优先级的级别数。开始上来也关中断,然后首先判

断所给的任务控制块的指针是否合法,不合法的话就返回错误信息。如果合法,

就得继续判断改变优先级的任务是否是空闲任务,因为,空闲任务的优先级是不

能改变的,接下来判断给定的优先级是否合法,通过了以上的验证以后,才会分

两种情况来改变任务的优先级,一种就是改变的任务是当前的任务,一种不是。

如果是当前的任务的话,首先把任务从当前就绪队列中删除,接着改变任务的优

先级,最后再把他放入改变了优先级的就绪队列中;如果不是当前的任务,但是

任务在就绪队列中等待cpu的资源,只是简单的把他从当前的就绪队列中删除,

然后改变优先级,最后放入改变了的就绪队列中,否则,就只是简单的改变任务

的优先级。

2.4.4 挂起任务

有时候将任务挂起是很有用的。挂起任务可通过调用taskSuspend()函数来完

成。被挂起的任务只能通过调用taskResume ()函数来恢复。任务挂起是一个附加

功能。也就是说,如果任务在被挂起的同时也在等待延时的期满,那么,挂起操

作需要被取消,而任务继续等待延时期满,并转入就绪状态。任务可以挂起自己

或者其它任务。

程序清单3.9首先要判断任务是否存在,接着判断挂起的任务是否是空闲任

务,空闲任务是不能被挂起的;然后判断任务的状态是否已经是挂起状态了,任

务已经是挂起状态的话,就没有必要再把他挂一遍了;最后判断是否在中断中把

自己挂起来,禁止在中断中把自己挂起,这样的话就会使得操作系统死掉;这些

都通过,然后,才把任务的状态改成挂起,把任务从当前的队列中删除,如果挂

起的任务是当前任务的话,就调用OS_Sched()使得优先级最高的处于就绪状态

的任务可以得到cpu的使用权。

程序清单1.9任务

INT8S taskSuspend (INT8S tid)

{

BOOLEAN self;

OS_TCB *ptcb;

INT8U prio;

ptcb=OSTCBIdTbl[tid];/*tid所对应的任务控制块*/

prio=ptcb->MSTCBPrio;

#if OS_ARG_CHK_EN > 0

if (prio == OS_IDLE_PRIO) { /*不允许挂起空闲任务 */

return (ERROR);

}

if (prio >= OS_LOWEST_PRIO &&prio != OS_PRIO_SELF) { /* 检查定义的优先级是否有效*/ return (ERROR);

}

#endif

OS_ENTER_CRITICAL();

if (prio == OS_PRIO_SELF) { /* 检查是否挂起来调用本函数的任务本身*/ prio = OSTCBCur->MSTCBPrio;

self = TRUE;

} else if (prio == OSTCBCur->MSTCBPrio) { /*可以通过指定优先级,挂起调用本函数的任务*/

self = TRUE;

} else {

self = FALSE; /* 没有挂起另一个任务*/

}

if ((ptcb = OSTCBIdTbl[tid]) == (OS_TCB *)0) /* 检查要挂起的任务是否存在*/

{

OS_EXIT_CRITICAL();

return (ERROR);

}

if(ptcb->MSTSnext!=ptcb) /*挂起的任务有同优先级的*/

{

if(MSTCBPrioTbl[prio]==ptcb)

{

MSTCBPrioTbl[prio]=ptcb->MSTSnext;

}

ptcb->MSTSprev->MSTSnext=ptcb->MSTSnext; /*其余的指针不需要需该*/

ptcb->MSTSnext->MSTSprev=ptcb->MSTSprev;

}

if(ptcb->OSTCBStat!=OS_STAT_SUSPEND)/*检查任务的状态是否为挂起态*/

{

ptcb->OSTCBStat = OS_STAT_SUSPEND; /* 设置任务被挂起的标志*/

}

OS_EXIT_CRITICAL();

if (self == TRUE) /*仅在被挂起的任务就是调用本函数的任务本身的情况下,才调用任务调度程序*/ {

OS_Sched();/*任务切换*/

}

return (OK);

}

2.4.5 恢复任务

在上一节中曾提到过,被挂起的任务只有通过调用taskResume ()才能恢复。taskResume()函数的代码如程序清单1.10所示。像前面一样,首先要判断要恢复

的任务控制块是否存在,还有不能恢复自身,因为自己本来就是运行态,不用再

去恢复。因为taskSuspend()不能挂起空闲任务,所以必须得确认用户的应用程序

不是在恢复空闲任务。

taskResume()是通过清除OSTCBStat域中的OS_STAT_SUSPEND位来取消挂

起的。要使任务处于就绪状态,同时要把任务的OS_STA T_DL Y位清除。只有当

以上两个条件都满足的时候,任务才处于就绪状态。接着要把任务从当前任等待

队列中删除,同时从timer队列里删除,还要把当前任务放入就绪队列中最后,

任务调度程序会检查被恢复的任务拥有的优先级是否比调用本函数的任务的优

先级高。

程序清单1.10 恢复任务

INT8S taskResume (INT8S tid)

{

OS_TCB *ptcb,*p;

INT8U prio;

ptcb=OSTCBIdTbl[tid];/*tid所对应的任务控制块*/

prio=ptcb->MSTCBPrio;/*任务控制块的优先级*/

#if OS_ARG_CHK_EN > 0

if (prio >= OS_LOWEST_PRIO) { /* 检查优先级是否有效 */ return (ERROR);

}

#endif

OS_ENTER_CRITICAL();

if ((ptcb = OSTCBIdTbl[tid]) == (OS_TCB *)0) { /* 挂起的任务必须存在 */ OS_EXIT_CRITICAL();

return (ERROR);

}

if (ptcb->OSTCBStat==OS_STAT_SUSPEND){ /* 任务必须已被挂起 */

if(ptcb->MSTSnext!=ptcb)/*存在同优先级的任务*/

{

ptcb->MSTSprev->MSTSnext=ptcb; /*其余的指针不需要需该*/

ptcb->MSTSnext->MSTSprev=ptcb;

}

if(ptcb->OSTCBDly==0)/*检查是否进入就绪态*/

{

OS_TCB *p1;

p1=ptcb;

while(p1->OSTCBDly==0 && p1->MSTSnext!=ptcb)

/*检查同优先级的任务是否全部进入就绪态*/

{p1=p1->MSTSnext;}

if(p1->OSTCBDly==0 && p1->MSTSnext==ptcb)

{ ptcb->OSTCBStat=OS_STAT_RDY;

p=ptcb->MSTSnext;

while(p!= ptcb)

{

p->OSTCBStat=OS_STAT_RDY;

p=p->MSTSnext;

} MSTCBPrioTbl[prio]=ptcb;

OS_EXIT_CRITICAL();

OS_Sched();/*任务切换*/

}

else

{

ptcb->OSTCBStat=OS_STAT_DLY;

}

} /*任务调度程序会检查被恢复的任务拥有的优先级是否比调用本函数的任务的优先级高*/ else {

ptcb->OSTCBStat=OS_STAT_DLY;

OS_EXIT_CRITICAL();

}

return (OK);

}

OS_EXIT_CRITICAL();

return (ERROR);

}

2.4.6 任务休眠

任务休眠也是一个非常有用的功能,可以让任务休眠一段时间,然后再去运行,如程序代码3.11所示,如果休眠的tick时间小于0的话,就直接返回什么也不做,满足条件的时候,首先把当前任务的状态变为睡眠态,从当前的就绪队列中删除,把要休眠的时间赋给任务控制块,启动定时器,最后调度器会选择优先级最高的处于就绪队列的任务运行。

程序清单3.11 任务休眠

void taskSleep(INT16U ticks)

{

OS_TCB *p;

if(ticks>0)

{

OS_ENTER_CRITICAL();

OSTCBCur->OSTCBStat=OS_STAT_DLY; /*让任务进入延时态*/

p=OSTCBCur->MSTSnext;

while(p!= OSTCBCur)/*如果有同优先级的*/

{

p->OSTCBStat=OS_STAT_DLY;/*让同优先级的所有任务进入延时态*/

p=p->MSTSnext;

}

OSTCBCur->OSTCBDly=ticks;/*延时的节拍数写入任务控制块中*/

if(OSTCBCur->MSTSnext!= OSTCBCur)

{

if(--OSTCBCur->OSTCBRemainigTick==0)/*时间片在这次调度中用完了*/

{

OSTCBCur->OSTCBRemainigTick = OSTCBCur->OSTCBInitTick;

/*把现在时间片用完的进程的时间补回来,以便下次调度*/

MSTCBPrioTbl[OSTCBCur->MSTCBPrio] = OSTCBCur->MSTSnext;

/*把该优先级的任务替换成下一个任务*/

OSPrioCur=0;

/*把当前的运行优先级改成0,不然调度认为该优先级的任务没有结束,不执行任务调度,结果回到的地方*/ /*还是上一个时间片的任务*/

}

OS_EXIT_CRITICAL();

OS_Sched(); /*执行下一个优先级最高的就绪任务*/

}

}

2.5 互斥信号量

MyRtos 中使用互斥信号量,避免了优先级反转问题的发生。

2.5.1 创建一个信号量

在使用一个信号量之前,首先要建立该信号量,也即调用semCreate ()函数,

如程序代码1.12所示首先判断信号量是否是由中断创建的,如果创建时没有

任务占用,初始优先级为-1,然后初始化互斥信号量等待列表,返回互斥信号

量标识。

程序清单3.12 创建互斥信号量

INT8S semCreate(void)

{

INT8U q;

OS_Mutex *p;

if (OSIntNesting > 0) { /*互斥信号量不能由中断创建 */

return (ERROR);

}

p=OSMutexFreeList; /*申请一个互斥信号量块*/

if(p==(OS_Mutex *)0) /*没有得到*/

{return ERROR ;}

OSMutexFreeList=OSMutexFreeList->OSMutexNext;/*空指针往下移*/

p->originalprio=-1;/*创建时没有任务占用。所以初始优先级为-1*/

系统详细设计说明书

文档标题 文档编号BH-CSD-003 版本V1.0 密级商密 A 研发生产中心项目名称全科医生专家咨询系统 项目来源 系统详细设计说明书 (V1.0 ) 南京毗邻智慧医疗科技有限公司 二○一三年十一月

文档变更记录 序号变更( +/- )说明作者版本号日期批准1 创建Steve.ma V1.0 2013.11.15 1 引言.......................................................................... (3) 1.1 编写目 的 ......................................................................... (3) 1.2 背 景 .......................................................................... (3) 1.3 定 义 .......................................................................... (3) 1.4 参考资 料 ......................................................................... (4) 2 平台安全体系与程序系统的结构........................................................................................ (4) 2.1 平台安全体 系 ........................................................................ (4) 2.2 程序系统结 构 ........................................................................ (5) 3 程序设计说 明 ........................................................................... (5) 3.1 程序描 述 ......................................................................... (5) 功能及其接 口 ........................................................................

嵌入式系统设计基础总结报告

嵌入式系统设计基础 结题报告 学生1: 学生2: 学生3: 组长: 组长电话: 指导老师: 完成时间:

目录 目录 (2) 摘要 (3) 一、课题概述 (4) 二、课题实施方案 (4) 2.1 方案说明 (4) 2.1.1 LCD图像显示模块设计方案 (4) 2.1.2 触摸屏模块设计方案 (5) 2.1.3 音乐播放模块设计方案 (5) 2.1.4 键盘模块设计方案 (6) 2.2 工程规范 (6) 三、课题实施过程详述 (6) 四、系统测试方法 (8) 五、结果分析 (8) 六、总结 (9) 参考文献 (9) 附录 (9)

摘要 随着智能手机和平板电脑等便携式设备的兴起,ARM已经成为全球领先的半导体知识产权提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构。ARM技术具有性能高、成本低和能耗省的特点。本文旨在初步接触嵌入式ARM技术。我们使用了天嵌TQ2440开发板以及ADS1.2来进行相关实验,主要制作了一个带背景音乐、可以使用触摸屏和键盘进行前后照片切换的数码相框。通过这次实验,我们对ARM技术有了一个初步的认识和了解,同时也掌握了一些编程和调试技术。 关键词:嵌入式,LCD图像显示,触摸屏 Abstract With the development of the smartphone and tablet computer, ARM has already become a leading semiconductor intellectual property provider in global market. More than 95% of the smartphone and tablet computer use the ARM framework. ARM has the advantages in performance, cost and efficiency. This paper aim at having a rough contact with embedded ARM and we use TQ2440 and ADS1.2 to conduct relevant experiments. Generally, we have made a digital album which can be controlled by touch panel. Through this experiment, we have grown a general acknowledge of ARM technology and master some coding and debugging technology. Keywords:embedded system, LCD display, touchpanel

arm嵌入式系统基础教程课后答案.doc

arm 嵌入式系统基础教程课后答案【篇一:arm 嵌入式系统基础教程习题答案周立功】 /p> 1 、举出3 个书本中未提到的嵌入式系统的例子。 答:红绿灯控制,数字空调,机顶盒 2、什么叫嵌入式系统 嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的 专用计算机系统。 3、什么叫嵌入式处理器?嵌入式处理器分为哪几类? 嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。 嵌入式微处理器(embedded microprocessor unit, empu) 嵌入式微控制器(microcontroller unit, mcu) 嵌入式dsp 处理器(embedded digital signal processor, edsp) 嵌入式片上系统(system on chip) 4、什么是嵌入式操作系统?为何要使用嵌入式操作系统? 是一段在嵌入式系统启动后首先执行的背景程序,首先,嵌入式实 时操作系统提高了系统的可靠性。其次,提高了开发效率,缩短了 开发周期。再次,嵌入式实时操作系统充分发挥了32 位cpu 的多任务潜力。 第二章 1、嵌入式系统项目开发的生命周期分哪几个阶段?各自的具体任务 是什么? 项目的生命周期一般分为识别需求、提出解决方案、执行项目和结 束项目 4 个阶段。识别需求阶段的主要任务是确认需求,分析投资 收益比,研究项目的可行性,分析厂商所应具备的条件。 提出解决方案阶段由各厂商向客户提交标书、介绍解决方案。 执行项目阶段细化目标,制定工作计划,协调人力和其他资源;定 期监控进展,分析项目偏差,采取必要措施以实现目标。 结束项目阶段主要包括移交工作成果,帮助客户实现商务目标;系 统交接给维护人员;结清各种款项。 2、为何要进行风险分析?嵌入式项目主要有哪些方面的风险? 在一个项目中,有许多的因素会影响到项目进行,因此在项目进行 的初期,在客户和开发团队都还未投入大量资源之前,风险的评估

《嵌入式系统开发技术》设计报告

嵌入式系统开发技术 设计报告 组长: 成员: 中国石油大学(华东)计算机与通信工程学院计算机科学系 二0 年12 月

一、引言 OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列C 函数和少量C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。它的应用领域非常广泛,包括人机互动、物体识别、图像分割、人脸识别、机器视觉、汽车安全驾驶等。随着手机性能的不断提高,OpenCV往安卓上移植已经成为可能,安卓设备移植上OpenCV之后将能够进行复杂的图像处理和视频分析工作,人们不必拘泥于使用固定的设备进行图像以及视频的处理,从而增加了处理的灵活性。 本课程设计实现的就是OpenCV到安卓的移植以及在安卓上实现一个简单的图像处理应用。Android应用程序是通过Android SDK(Software Development Kit)利用Java编程语言进行开发,同时也可以通过JNI调用C动态库,不过这种开发方式存在技术障碍,伴随着Android NDK(Native Development Kit)的问世,使得“JA V A+C”的开发方式走向成熟。 二、总体设计 1、功能描述 本课程设计分为以下四个模块,各模块功能介绍如下: Android-OpenCV项目: OpenCV中大部分重要API在该项目中已经封装成了JA V A接口,为安卓上的OpenCV开发提供C、C++函数支持。 Android NDK: 它包括从C / C++生成原生代码库所需要的工具和build files,能够将一致的原生库嵌入可以在Android设备上部署的应用程序包文件(application packages files ,即.apk文件)中,支持所有未来Android平台的一些列原生系统头文件和库。在本课程设计中担任重要角色,包括交叉编译OpenCV源代码、编译测试程序等。 Cygwin: Windows下模拟Linux操作环境,在其中执行NDK编译。 Eclipse: Android开发环境,开发android程序,生成可执行的.apk文件,连接真机或虚拟机进行调试。 2、设计特色 本课程设计的特色在于成功的将android-opencv移植到eclipse开发环境中去,实现了在android设备开发图像处理、视频分析应用,提高了android设备的使用价值。编译环境采用Android NDK+Cygwin,方便开发者在windows环境下开发“java+c”程序。 3、体系结构

网上购物系统——详细设计说明书

网上购物系统 详细设计说明书 1引言 1.1编写目的 电子商务是于九十年代初,在欧美兴起的一种全新的商业交易模式,它实现了交易的无纸化,效率化,自动化表现了网络最具魅力的地方,快速的交换信息,地理界限的模糊,这所有的一切也必将推动传统商业行为在网路时代的变革。随着电子商务,尤其是网上购物的发展,商品流通基础设施和配套行业的重点将会将对中国商品流通领域和整个经济发展带来种种影响,确实值得我们认真研究。特别是在全球经济一体化的国际背景下,在我们继续扩大国内流通领域对外开放的同时,深入研究这个问题,审慎制订相应的宏观对策,尤其重要和迫切。网上购物是一种具有交互功能的商业信息系统。它向用户提供静态和动态两类信息资源。所谓静态信息是指那些比经常变动或更新的资源,如公司简介、管理规范和公司制度等等;动态信息是指随时变化的信息,如商品报价,会议安排和培训信息等。网上购物系统具有强大的交互功能,可使商家和用户方便的传递信息,完成电子贸易或EDI交易。这种全新的交易方式实现了公司间文档与资金的无纸化交换。 1.2.项目背景 软件名称:网上购物系统 开发者:宋金德,袁浩,王朝阳,许威 项目简介:本系统主要实现网上产品展示与在线定购及人员的管理, 一、不同身份有不同的权限功能(管理人员、注册用户、游客) 二、在线产品展示(分页显示) 三、在线定购 四、后台管理(用户管理、商品的管理) 1.3定义 Asp(active server pages)是微软公司推出的一种用以取代CGI的技术,基于目前绝大多数网站应用于windows平台,asp是一个位于windows服务器端的脚本运行环境,通过这种环境,用户可以创建和运行动态的交互式的web服务器应用程序以及EDI(电子数据交换)。 ADO:ActiveX Data Object, ActiveX 数据对象 SQL:Structured Query Language 1.4参考资料 [1] 谭浩强《动态网页制作ASP》北京电子工业出版社. 2001 [2] 彭万波《网页设计精彩实例》北京电子工业出版社.2002

嵌入式软件开发流程图

嵌入式软件开发流程 一、嵌入式软件开发流程 1.1 嵌入式系统开发概述 由嵌入式系统本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别。嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发3大部分,其总体流程图如图1.1所示。 图1.1 嵌入式系统开发流程图 在系统总体开发中,由于嵌入式系统与硬件依赖非常紧密,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器选型,以更好地满足产品的需求。另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择。往往通过硬件实现会增加产品的成本,但能大大提高产品的性能和可靠性。 再次,开发环境的选择对于嵌入式系统的开发也有很大的影响。这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择等。比如,对开发成本和进度限制较大的产品可以选择嵌入式Linux,对实时性要求非常高的产品可以选择Vxworks等。

1.2 嵌入式软件开发概述 嵌入式软件开发总体流程为图4.15中“软件设计实现”部分所示,它同通用计算机软件开发一样,分为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。其中嵌入式软件需求分析与硬件的需求分析合二为一,故没有分开画出。 由于在嵌入式软件开发的工具非常多,为了更好地帮助读者选择开发工具,下面首先对嵌入式软件开发过程中所使用的工具做一简单归纳。 嵌入式软件的开发工具根据不同的开发过程而划分,比如在需求分析阶段,可以选择IBM的Rational Rose等软件,而在程序开发阶段可以采用CodeWarrior(下面要介绍的ADS 的一个工具)等,在调试阶段所用的Multi-ICE等。同时,不同的嵌入式操作系统往往会有配套的开发工具,比如Vxworks有集成开发环境Tornado,WindowsCE的集成开发环境WindowsCE Platform等。此外,不同的处理器可能还有对应的开发工具,比如ARM的常用集成开发工具ADS、IAR和RealView等。在这里,大多数软件都有比较高的使用费用,但也可以大大加快产品的开发进度,用户可以根据需求自行选择。图4.16是嵌入式开发的不同阶段的常用软件。 图1.2 嵌入式开发不同阶段的常用软件 嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分,其中又可以分为编译和调试两部分,下面分别对这两部分进行讲解。 1.交叉编译 嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。在第3章中已经提到,编译的最主要的工作就在将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统。因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行。嵌入式系统交叉编译环境如图4.17所示。

(完整word版)嵌入式系统设计与应用

嵌入式系统设计与应用 本文由kenneth67贡献 ppt文档可能在W AP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 课程名称:课程名称:嵌入式系统设计与应用 总学时:其中讲课36学时,上机实践环节12 36学时12学时总学时:其中讲课36学时,上机实践环节12学时教材:嵌入式系统设计教程》教材:《嵌入式系统设计教程》电子工业出版社马洪连参考书:参考书:1、《嵌入式系统开发与应用》北航出版社、田泽编著. 嵌入式系统开发与应用》北航出版社、田泽编著. 2、《ARM体系结构与编程》清华大学出版社杜春雷编著ARM体系结构与编程体系结构与编程》嵌入式系统设计与实例开发—ARM ARM与C/OS3、《嵌入式系统设计与实例开发ARM与μC/OS-Ⅱ》清华大学出版社王田苗、魏洪兴编著清华大学出版社王田苗、ARM嵌入式微处理器体系结构嵌入式微处理器体系结构》4、《ARM嵌入式微处理器体系结构》北航出版社、马忠梅等著. 北航出版社、马忠梅等著. 张石.ARM嵌入式系统教程嵌入式系统教程》5、张石.《ARM嵌入式系统教程》.机械工业出版2008年社.2008年9月 1 课程内容 绪论:绪论: 1)学习嵌入式系统的意义2)高校人才嵌入式培养情况嵌入式系统设计(实验课)3)嵌入式系统设计(实验课)内容安排 第1章嵌入式系统概况 1.1 嵌入式系统的定义1.2 嵌入式系统的应用领域及发展趋势1.3 嵌入式系统组成简介 第2章嵌入式系统的基本知识 2.1 2.2 2.3 嵌入式系统的硬件基础嵌入式系统的软件基础ARM微处理器的指令系统和程序设计ARM微处理器的指令系统和程序设计 2 第3章 3.1 3.2 3.3 基于ARM架构的嵌入式微处理器基于ARM架构的嵌入式微处理器ARM 概述嵌入式微处理器的组成常用的三种ARM ARM微处理器介绍常用的三种ARM 微处理器介绍 第4章 4.1 4.2 4.3 4.4 4.5 4.6 嵌入式系统设计 概述嵌入式系统的硬件设计嵌入式系统接口设计嵌入式系统人机交互设备接口嵌入式系统的总线接口和网络接口设计嵌入式系统中常用的无线通信技术 3 第5章嵌入式系统开发环境与相关开发技术 5.1 5.2 5.3 5.4 5.5 6.1 6.2 6.3 6.4 概述嵌入式系统的开发工具嵌入式系统调试技术嵌入式系统开发经验嵌入式系统的Bootloader Bootloader技术嵌入式系统的Bootloader技术μC/OS-II操作系统概述C/OS-II操作系统概述ADS开发环境ARM ADS开发环境C/OS-II操作系统在ARM系统中的移植操作系统在ARM μC/OS-II操作系统在ARM系统

三级嵌入式系统开发技术-5 (1)

三级嵌入式系统开发技术-5 (总分:100.00,做题时间:90分钟) 一、填空题(总题数:44,分数:100.00) 1.当前,智能手机之类的高端嵌入式系统应用,其主要特征是硬件采用 1位的CPU,软件配置了功能丰富的操作系统和图形用户界面。 (分数:4.00) 解析:32 2.SoC芯片是一种超大规模集成电路,它的开发过程极其复杂,其中大部分工作都是借助于EDA工具完成的,EDA的中文名称是 1。 (分数:4.00) 解析:电子设计自动化 3.在IC行业,已完成并经过验证的IC电路具有固定的不可再分解的功能特性,人们称之为“核”,它们属于知识产权保护的范畴,所以也称为知识产权核或 1核。 (分数:4.00) 解析:IP 4.某人使用电子书阅读器阅读一部中文长篇小说,其电子文本的格式为.txt,文件的实际大小为236KB,该小说包含的汉字大约有 1万字。 (分数:4.00) 解析:11.8 5.数字视频的数据量非常大,存储和传输时必须进行数据压缩。目前在VCD、DVD、数字有线电视、卫星电视等应用领域中广泛采用的压缩编码标准是国际标准化组织(ISO)制订的,其名称为 1。 (分数:4.00) 解析:MPEG 6.通过无线局域网(WLAN)接入Internet是目前无线上网的途径之一。WLAN技术采用IEEE 802.11协议,技术日益成熟,性能不断提高,目前普遍使用的IEEE 802.11n协议可以支持的数据传输速率已经达到 1,甚至更高。 (分数:4.00) 解析:108Mb/s 7.ARM公司把它的系列处理器划分为五个大的系列,分别是以ARM7/9/11为代表的经典ARM处理器、以Cortex-M等为代表的 1处理器、以Cortex-R等为代表的 2处理器、以Cortex-A5/A8/A9/A15为代表的应用Cortex处理器以及以SecureCore为代表的 3处理器。 (分数:2.00) 解析:ARM Codex嵌入式 ARM Codex实时嵌入式专家 8.在ARM处理器中,通用寄存器有R0~R15,其中无论何种模式、无论什么状态下都可以作为通用寄存器使用的寄存器是1,作为堆栈指针SP使用的寄存器是R13,作为程序链接寄存器LR的是R14,作为程序计数器PC的是R15。 (分数:2.00) 解析:R0~R7寄存器 9.经典ARM处理器复位后自动进入的地址为 1,外部快速中断的向量地址为0x0000001C。

系统软件详细设计说明书

系统软件详细设计说明书 1.引言 1.1编写目的 本详细设计说明书是针对网络信息体系结构的课程作业而编写。目的是对该项目进行详 细设计,在概要设计的基础上进一步明确系统结构,详细地介绍系统的各个模块,为进行后面的实现和测试作准备。本详细设计说明书的预期读者为本项目小组的成员以及对该系统感兴趣,在以后想对系统进行扩展和维护的人员。 2.系统的结构 ui :系统界面部分,负责接受用户输入,显示系统输出,负责其他模块功能的协调调用,并含有站内搜索功能,即在用户指定的已打开的ftp站点中搜索用户需要的资源。ui 部分调用common部分的功能读取xml文件中保存的界面元素属性信息,用户最近访问过的10个ftp信息,用户选择的下载的ftp内容列表及其他需要通过xml文件保存的信息。 client :实现ftp客户端的功能,ftp连接,ftp上传及下载:上传或下载用户指定的

资源,并返回相应的信息。 search: 资源实时检索部分,根据用户输入的资源名称关键字,资源类型和选择的检索方式检索用户需要的资源,并验证资源的可用性,返回可用资源及其大小,速度等相关信息。 preview :资源预览部分,显示用户选择的资源的部分内容,以使用户决定是否需要该资源。 preview部分调用comm on部分读取属性文件的内容亦显示预览资源内容的显示格式。 3.模块1(ui )设计说明 3.1 模块描述实现用户界面的包,含有11个文件51 个类,是本系统中最复杂的代码。 3.2 功能负责接受用户输入,显示系统输出,其他模块功能的协调调用,并含有站内搜索功能,即在用户指定的已打开的ftp 站点中搜索用户需要的资源。 3.3 交互的模块 client ,search ,preview ,common。 3.4 模块设计该模块中的主要文件,文件中包含的主要类及其功能和与其它包的交互如下: MainFrame.java :MainFrame 是含有主函数的类,也是lyra 客户端开始执行的类,它先后进行资源的初始化,显示主界面等工作,根据屏幕大小设置界面大小,设置界面的观感。 FtpFrame_AboutBox.java: 显示关于窗口的类,当用户点击帮助菜单中的关于菜单项时会 弹出关于对话框。 Tools.java :FileTools 是文件操作辅助类,可以实现文件的递归删除等。 XMLController.java: JDOMTes是操作xml文件的类,用JDOM来操作xml文件, 实现的功能有: (1)保存ftp 服务器的文件列表(站内搜索时使用),递归的从ftp 服务器读取列表,并存入一个xml文件中(文件的命名方法是:ip+用户名.xml);以目录树的形式保存。 (2)根据文件名在文件中查找文件,站内搜索时使用。 (3)保存ftp 服务器的信息:ip ,端口(默认端口21 不保存),用户名(默认anonymous 不保存),密码,最多存10 个;存在resource\settings\ serversinfor.xml 文件中。 (4)读取已存储的ftp 服务器信息。 (5)从type.xml 读取搜索的类型。 Constants.java: 放置系统运行时使用的一些常量,initcontent ()函数对所有常量进行初始化,这个函数在MainFrame 中被调用一次。iconHashMap 是hash 表,用于存放文件的系统图标。 CustomizedController.java :包含自定义的控件类,java 中的控件可能不能满足需求,需要自己定义某些属性。这些控件会在创建界面时使用。其中含有的类有: (1)CustomizedJTable 是表格类,设置表格的某些属性,如字体等。 (2)CustomizedTableCellRenderer 是表格单元格绘制器类,主要用于显示文件的系统图标,和文件名。 (3)LeftPanel类的父类是JTabbedPane,用户显示主窗口左边的面板。 (4)RightPanel 类的父类是JPanel ,用户显示右边的主题部分,包括右上边的搜索及服务 器选项,和中间的显示服务器文件的TabbedPane。. (5)BottomPanel 类是右下放显示下载和服务器信息的JTabbedPane。 (6)CustomizedJButton 是定义按钮类,更改了按钮的字体,java 本身默认的字体不好看。 (7)CustomizedTableModel 是表格类,实现单元格的不可编辑。 (8 )CustomizedTableCellRenderer_Remote 类是表格绘制器,在远程文件浏览 器RemoteFilesPanel 使用,用于显示文件名和文件图标。

嵌入式Linux应用软件开发流程

从软件工程的角度来说,嵌入式应用软件也有一定的生命周期,如要进行需求分析、系统设计、代码编写、调试和维护等工作,软件工程的许多理论对它也是适用的。 但和其他通用软件相比,它的开发有许多独特之处: ·在需求分析时,必须考虑硬件性能的影响,具体功能必须考虑由何种硬件实现。 ·在系统设计阶段,重点考虑的是任务的划分及其接口,而不是模块的划分。模块划分则放在了任务的设计阶段。 ·在调试时采用交叉调试方式。 ·软件调试完毕固化到嵌入式系统中后,它的后期维护工作较少。 下面主要介绍分析和设计阶段的步骤与原则: 1、需求分析 对需求加以分析产生需求说明,需求说明过程给出系统功能需求,它包括:·系统所有实现的功能 ·系统的输入、输出 ·系统的外部接口需求(如用户界面) ·它的性能以及诸如文件/数据库安全等其他要求 在实时系统中,常用状态变迁图来描述系统。在设计状态图时,应对系统运行过程进行详细考虑,尽量在状态图中列出所有系统状态,包括许多用户无需知道的内部状态,对许多异常也应有相应处理。 此外,应清楚地说明人机接口,即操作员与系统间地相互作用。对于比较复杂地系统,形成一本操作手册是必要的,为用户提供使用该系统的操作步骤。为使系统说明更清楚,可以将状态变迁图与操作手册脚本结合起来。

在对需求进行分析,了解系统所要实现的功能的基础上,系统开发选用何种硬件、软件平台就可以确定了。 对于硬件平台,要考虑的是微处理器的处理速度、内存空间的大小、外部扩展设备是否满足功能要求等。如微处理器对外部事件的响应速度是否满足系统的实时性要求,它的稳定性如何,内存空间是否满足操作系统及应用软件的运行要求,对于要求网络功能的系统,是否扩展有以太网接口等。 对于软件平台而言,操作系统是否支持实时性及支持的程度、对多任务的管理能力是否支持前面选中的微处理器、网络功能是否满足系统要求以及开发环境是否完善等都是必须考虑的。 当然,不管选用何种软硬件平台,成本因素都是要考虑的,嵌入式Linux 正是在这方面具有突出的优势。 2、任务和模块划分 在进行需求分析和明确系统功能后,就可以对系统进行任务划分。任务是代码运行的一个映象,是无限循环的一段代码。从系统的角度来看,任务是嵌入式系统中竞争系统资源的最小运行单元,任务可以使用或等待CPU、I/O设备和内存空间等系统资源。 在设计一个较为复杂的多任务应用系统时,进行合理的任务划分对系统的运行效率、实时性和吞吐量影响都极大。任务分解过细会不断地在各任务之间切换,而任务之间的通信量也会很大,这样将会大大地增加系统的开销,影响系统的效率。而任务分解过粗、不够彻底又会造成原本可以并行的操作只能按顺序串行执行,从而影响系统的吞吐量。为了达到系统效率和吞吐量之间的平衡折中,在划分任务时应在数据流图的基础上,遵循下列步骤和原则:

ARM嵌入式系统基础教程第二版课后习题答案

第1xx 嵌入式系统概述 (1)举出3个本书中未提到的嵌入式系统的例子。 答:键盘、鼠标、扫描仪。 (2)什么叫嵌入式系统? 答:嵌入到对象体系中的专用计算机应用系统。 (3)什么叫嵌入式处理器?嵌入式处理器分为哪几类? 答:嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。 分为3类:1.注重尺寸、能耗和价格; 2.关注性能;3.关注全部4个需求——性能、尺寸、能耗和价格。 (4)什么是嵌入式操作系统?为何要使用嵌入式操作系统? 答:嵌入式操作系统是操作系统的一种类型,是在传统操作系统的基础上加入符合嵌入式系统要求的元素发展而来的。原因: 1.提高了系统的可靠性;2.提高了开发效率,缩短了开发周期。 3.充分发挥了32位CPU的多任务潜力。 第2章ARM7体系结构 1.基础知识 (1)ARM7TDMI中的T、D、M、I的含义是什么? 答:T:高密度16位Thumb指令集扩展;D:支持片上调试;M:64位乘法指令;I:Embedded ICE硬件仿真功能模块。 (2)ARM7TDMI采用几级流水线?使用何种存储器编址方式? 答:3级;冯·诺依曼结构。

(3)ARM处理器模式和ARM处理器状态有何区别? 答:ARM处理器模式体现在不同寄存器的使用上;ARM处理器状态体现在不同指令的使用上。 1 / 16 (4)分别列举ARM的处理器模式和状态? 答:ARM的处理器模式:用户模式、系统模式、管理模式、中止模 式、未定义模式、中断模式、快速模式;ARM的处理器状态:ARM状态、Thumb状态。 (5)PC和LR分别使用哪个寄存器? 答:PC:R15;LR: 14。 (6)R13寄存器的通用功能是什么? 答:堆栈指针SP。 (7)CPSR寄存器中哪些位用来定义处理器状态? 答:位31~28:N、Z、C、V,条件代码标志位;27~8:保留位;7~0: I、F、T、M4~0,控制标志位。 (8)描述一下如何禁止IRQ和FIQ的中断。 答:当控制位I置位时,IRQ中断被禁止,否则允许IRQ中断使能;当控制位F置位时,FIQ中断被禁止,否则允许FIQ中断使能。 2.存储器格式 答:无论是大端格式还是小端格式,R2的值与R1一致;地址0x4000

软件系统详细设计说明书模板

xxxxx系统详细设计说明书

版本历史

修改记录

目录 1引言 (5) 1.1编写目的 (5) 1.2背景 (5) 1.3参考资料 (5) 1.4术语定义及说明 (5) 2设计概述 (5) 2.1任务和目标 (5) 2.1.1需求概述 (5) 2.1.2运行环境概述 (5) 2.1.3条件与限制 (6) 2.1.4详细设计方法和工具 (6) 3系统详细需求分析 (6) 3.1详细需求分析 (6) 3.2详细系统运行环境及限制条件分析接口需求分析 (6) 4总体方案确认 (6) 4.1系统总体结构确认 (6) 4.2系统详细界面划分 (7) 4.2.1应用系统与支撑系统的详细界面划分 (7) 4.2.2系统内部详细界面划分 (7) 5系统详细设计 (7) 5.1系统程序代码架构设计 (7) 5.1.1UI(User Interface)用户界面表示层 (7) 5.1.2BLL(Business Logic Layer)业务逻辑层 (8) 5.1.3DAL(Data Access Layer)数据访问层 (8) 5.1.4Common类库 (8) 5.1.5Entity Class实体类 (8) 5.2系统结构设计及子系统划分 (8) 5.3系统功能模块详细设计 (9) 5.3.1XX子系统 (9) .1XX模块 (9) 列表和分页 (9) 创建XX (9) .2XX模块 (9) XX列表 (9) XX修改 (9) 5.3.2XX子系统 (9) 5.3.6.1用户管理模块 (9) 5.3.6.2角色管理模块 (14) 5.3.6.3系统设置模块 (14) 5.3.6.4系统登录注销模块 (14) 5.4系统界面详细设计 (14) 5.4.1外部界面设计 (14) 5.4.2内部界面设计 (14) 5.4.3用户界面设计 (14) 6数据库系统设计 (14) 6.1设计要求 (14) 6.2信息模型设计 (14) 6.3数据库设计 (14) 6.3.1设计依据 (14)

系统详细设计说明书

XXXXXX XXXXXXXXXXXXX 项目名称 详细设计说明书 XXX公司 二〇XX年X月

文档修改记录

目录 第一章引言............................................. 错误!未定义书签。 目的............................................. 错误!未定义书签。 背景............................................. 错误!未定义书签。 术语定义......................................... 错误!未定义书签。 参考资料......................................... 错误!未定义书签。第二章系统概述......................................... 错误!未定义书签。第三章程序1设计说明................................... 错误!未定义书签。 程序描述......................................... 错误!未定义书签。 模块架构图 ................................... 错误!未定义书签。 功能 ......................................... 错误!未定义书签。 类图 ......................................... 错误!未定义书签。 增加功能(功能点) ........................... 错误!未定义书签。 程序流程 ..................................... 错误!未定义书签。 测试和限制条件 ............................... 错误!未定义书签。 备注 ......................................... 错误!未定义书签。第四章程序2设计说明................................... 错误!未定义书签。第五章公用接口程序说明................................. 错误!未定义书签。 全局变量......................................... 错误!未定义书签。 公用界面或接口................................... 错误!未定义书签。 公用方法和过程................................... 错误!未定义书签。第六章附件............................................. 错误!未定义书签。详细设计评审意见.......................................... 错误!未定义书签。

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

第一章嵌入式处理器 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

周立功-ARM嵌入式系统基础教程课后习题答案11

第一章 思考与练习 1、举出3个书本中未提到的嵌入式系统的例子。 答:红绿灯控制,数字空调,机顶盒 2、什么叫嵌入式系统 嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系 统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 3、什么叫嵌入式处理器?嵌入式处理器分为哪几类? 嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。 嵌入式微处理器(Embedded Microprocessor Unit, EMPU) 嵌入式微控制器(Microcontroller Unit, MCU) 嵌入式DSP 处理器(Embedded Digital Signal Processor, EDSP) 嵌入式片上系统(System On Chip) 4、什么是嵌入式操作系统?为何要使用嵌入式操作系统? 是一段在嵌入式系统启动后首先执行的背景程序,首先,嵌入式实时操作系统提高了系统的可靠性。 其次,提高了开发效率,缩短了开发周期。再次,嵌入式实时操作系统充分发挥了32 位CPU 的多任务潜力。 第二章 1、嵌入式系统项目开发的生命周期分哪几个阶段?各自的具体任务是什么? 项目的生命周期一般分为识别需求、提出解决方案、执行项目和结束项目4 个阶段。 识别需求阶段的主要任务是确认需求,分析投资收益比,研究项目的可行性,分析厂商所应具备的条件。 提出解决方案阶段由各厂商向客户提交标书、介绍解决方案。 执行项目阶段细化目标,制定工作计划,协调人力和其他资源;定期监控进展, 分析项目偏差,采取必要措施以实现目标。 结束项目阶段主要包括移交工作成果,帮助客户实现商务目标;系统交接给维护人员;结清各种款项。 2、为何要进行风险分析?嵌入式项目主要有哪些方面的风险? 在一个项目中,有许多的因素会影响到项目进行,因此在项目进行的初期,在客户和开发团队都还未投入大量资源之前,风险的评估可以用来预估项目进行可能会遭遇的难题。 需求风险;时间风险;资金风险;项目管理风险 3、何谓系统规范?制定系统规范的目的是什么? 规格制定阶段的目的在于将客户的需求,由模糊的描述,转换成有意义的量化数据。 4、何谓系统规划?为何要做系统规划 系统规划就是拟定一个开发进程,使项目在合理的进程范围中逐渐建构完成。其目地是让客户可以进一步地掌握系统开发的进程,并确定检查点,以让双方确定项目是否如预期中的进度完成。 5、为什么在项目结束前需要进行项目讨论? 项目的讨论一个项目进行的反馈机制。通过这一个程序,项目团队的经验才可以被记录 下来,也就是说,这是一个撰写项目历史的过程。 第三章 1、ARM7TDMI中的T、D、M、I的含义是什么? 64 位乘法指令(带M 后缀的)、支持片上调试(带D 后缀的)、高密度16 位的Thumb 指令机扩展(带T 后缀的)和EmbededICE 观察点硬件(带I 后缀的) 2、ARM7TDMI采用几级流水线?使用何种存储器编址方式? 三级流水线(取指译码执行);使用了冯·诺依曼(V on Neumann )结构,指令和数据共用一条 32 位总线。 3、ARM处理器模式和ARM处理器状态有何区别? 处理器模式指的是处理器在执行程序时在不同时刻所处的不同状态,处理器状态指的是处理器当前所执行的指令集。 4、分别列举ARM的处理器模式和状态。 状态: ARM 状态32 位,这种状态下执行的是字方式的ARM 指令

2020年嵌入式系统设计师考试大纲内容

2020年嵌入式系统设计师考试大纲内容 一、考试说明 1、考试目标 通过本考试的合格人员能根据项目管理和工程技术的实际要求,按照系统总体设计规格进行软、硬件实际,编写系统开发规格说明书等相应的文档;组织和指导嵌入式系统靠法实施人员实施硬件电路、编写和调试程序,并对嵌入式系统硬件设备和程序进行优化和集成测试,开发出符合系统总体设计要求的高质量嵌入式系统;具有工程师的实际工作能力和业务水平。 2、考试要求: (1)掌握科学基础知识; (2)掌握嵌入式系统的硬件、软件知识; (3)掌握嵌入式系统分析的方法; (4)掌握嵌入式系统设计与开发的方法及步骤; (5)掌握嵌入式系统实施的方法; (6)掌握嵌入式系统运行维护知识; (7)了解信息化基础知识、信息技术引用的基础知识; (8)了解信息技术标准、安全,以及有关法律的基本知识;(9)了解嵌入式技术发展趋势; (10)正确阅读和理解计算机及嵌入式领域的英文资料。

3、考试科目 (1)嵌入式系统基础知识,考试时间为150分钟,笔试,选择题;(2)嵌入式系统应用技术(案例分析),考试时间为150分钟,笔试,问答题。 二、考试范围 考试科目1:嵌入式系统基础知识 1.计算机科学基础 1.1数制及转换 ·二进制、八进制、十进制和十六进制等常用数制及其相互转换 1.2数据的表示 ·数的机内表示(原码、反码、补码、移码,定点和浮点,精度和溢出) ·字符、汉字、声音、图像的编码方式 ·校验方法和校验码(奇偶验码、海明校验码、循环校验码) 1.3算术和逻辑运算 ·计算机中的二进制数运算方法 ·逻辑代数的基本运算和逻辑表达式的化简 1.4计算机系统结构和重要部件的基本工作原理 ·CPU和存储器的组成、性能、基本工作原理 ·常用I/O设备、通信设备的性能,以及基本工作原理 ·I/O接口的功能、类型和特点 ·虚拟存储存储基本工作原理,多级存储体系

相关文档
相关文档 最新文档