中科大软院算法导论区间树实验报告(定稿)

时间:2019-05-15 04:58:17下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《中科大软院算法导论区间树实验报告(定稿)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《中科大软院算法导论区间树实验报告(定稿)》。

第一篇:中科大软院算法导论区间树实验报告(定稿)

区间树实验报告

1.区间树的实验源码见另外一个文件

2.区间树实验分析

2.1 需求分析

基础数据结构选择红黑树,每个结点x 包含一个区间域int[x],x 的关键字为区间的低 端点low[int[x]],对树;进行中序遍历就可按低端点的次序列出个区间,结点还包含一个 max[x],即以x 为根的子树中所有区间的端点的最大值。如:

实验要求:将红黑树扩展为区间树(1)区间的端点为正整数,随机生成;

(2)内部节点数为n:2^4,2^6,2^8,2^10,2^12;

(3)测试插入,删除,查找的时间并绘出曲线,运行次数为10 次;

2.2 程序设计

区间树的操作基本和红黑树的相同,在其基础上增加了一个新方法: INTERVAL_SEARCH(T,i);它用来找出树中覆盖区间i 的那个结点。如果树中不存在,则返 回nil[T]指针。代码如下:

ITNode* IntervalTree::Interval_Search(Interval i){ ITNode* x=root;while(x!=Nil &&!x->Overlap(i)){ // x!= nil and i doesn't overlap int[x] if(x->left!=Nil && x->left->max>=i.low)x=x->left;else x=x->right;} return x;} 区间树的插入、删除除了有可能改变红黑树性质,还有可能改变结点的max 值。前者 向红黑树那样处理就可以了,又

max[x] = max(high[int[x]], max[left[x]], max[right[x]])为解决后者,增加一方法Nodemax(),让它来维护结点的max 值。Nodemax()如下: void ITNode::NodeMax(ITNode* xl, ITNode* xr){ Type tp=this->interval->high;if(tp < xl->max)tp=xl->max;if(tp < xr->max)tp=xr->max;this->max=tp;} 在左旋、右旋时调用此方法。

2.3 数据结构设计

基础数据结构选择红黑树,每个结点x 包含一个区间域int[x],x 的关键字为区间的低 端点low[int[x]],对树;进行中序遍历就可按低端点的次序列出个区间,结点还包含一个 max[x],即以x 为根的子树中所有区间的端点的最大.2.4 运行结果

为了增加算法运行时间减少误差,search、insert、delete 的都是树的最小关键字结点,让查找深度尽可能的深。运行时间如下所示,单位:us: T(us)方法

search insert delete 2^4 2.933 14.176 2.933 2^6 3.399 17.098 3.422 2^8 3.422 20.042 3.911 2^10 4.399 17.598 4.547 2^12 3.441 18.087 4.888 运行

2.5 结果分析

根据以上数据作如下t-lg(n)图像:

有图知当n=2^8 时,Insert 操作数据不是很好,出去它可得如下图:

在树规模较小的时候, 会对n 造成比较明显的影响, 3 条测量的曲线中, insert 与lgn 的 曲线增长率最符合,但都大致以lgn 增长。,在n 较小的时候, 算法执行时间受系统本身配置

影响较大, 数据也不会很准确, 这个也可以从表格中看出, 有一些与通常时间偏差较大的记 录, 这个应该和系统的任务调度, 和其他程序的影响有关.2.6 心得体会

由于区间树的很多操作与红黑书相似,此程序最大难点在维护结点的max 值。应仔细

分析左旋、右旋、插入、删除时改变那些结点的max 值、如何改变结点的max 值,这样编 程时会事半功倍。

区间树与红黑树差别不是很大,很多操作都相似,可考虑从红黑树继承,实现代码重用。例如:

class ITNode: public RBTNode{ private: Type NodeMax(ITNode* x);public: Type max;//以x 为根的子树中所有区间的端点最大值 Type low;Type high;ITNode(Type ilow=0, Type ihigh=0):RBTNode(ilow), low(ilow), high(ihigh){max=NodeMax(this)} };class IntervalTree : public RBTree{ public: IntervalTree(Type ilow=0, Type ihigh=0):RBTree(ilow){} void Interval_Insert(ITNode* x){RB_Insert(x);} void Interval_Insert(Type ilow, Type ihigh){Interval_Insert(new ITNode(ilow,ihigh));} void Interval_Delete(ITNode* x){RB_Delete(x);} ITNode* Interval_Search(Interval i);};

第二篇:中科大软院嵌入式期末总结重点讲义资料

复习提纲:(C语言翻译汇编)

一、概述

1.嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置 国内普遍认同的嵌入式系统定义为:

以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

2.嵌入式系统的几个重要特征(简述5特征)

(1)嵌入式系统工业是不可垄断的高度分散的工业

从某种意义上来说,通用计算机行业的技术是垄断的。

嵌入式系统则不同,它是一个分散的工业,充满了竞争、机遇与创新,没有哪一个系列的处理器和操作系统能够垄断全部市场。(2)操作系统内核小

由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。

比如ENEA公司的OSE分布式系统,内核只有5K,而Windows的内核则要大得多。

(3)专用性强

嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植。

即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。

同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全不同的概念。

(4)系统精简

嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。(5)高实时性OS 这是嵌入式软件的基本要求,而且软件要求固态存储,以提高速度。软件代码要求高质量和高可靠性、实时性。

6)嵌入式软件开发走向标准化

嵌入式系统的应用程序可以没有操作系统直接在芯片上运行。

为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS(Real-Time Operating System)开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。(7)嵌入式系统开发需要开发工具和环境

由于其本身不具备自主开发能力,即使设计完成以后,用户通常也是不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。

这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。

开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。(8)嵌入式系统运行环境差异很大:

(9)嵌入式系统比通用PC系统资源少得多:

(10)一般的嵌入式系统具有低功耗、体积小、集成度高、成本低等特点:(11)建立完整的嵌入式系统的系统测试和可靠性评估体系,保证嵌入式系统高效、可靠、稳定工作:(12)具有较长的生命周期

3.嵌入式系统的组成(最后的图,有印象)嵌入式硬件系统 嵌入式处理器 各种类型存储器 模拟电路及电源 接口控制器及接插件 嵌入式软件系统

实时操作系统(RTOS)板级支持包(BSP)

设备驱动(Device Driver)协议栈(Protocol Stack)应用程序(Application)

4.嵌入式系统的实时性

二、嵌入式系统设计方法、过程(2.3ppt)1.交叉开发环境、先在通用PC机上编程,然后通过交叉编译链接,将程序做成目标平台上可以运行的二进制代码格式。最后将程序下载到目标平台上的特定位置由目标板上启动代码运行这段二进制代码。

交叉开发:在一台通用计算机上进行软件的编辑编译,然后下载到嵌入式设备中运行调试的开发方式。

开发计算机一般称宿 主机,嵌入式设备称为目标机,在宿主机上编译好的程序,下载到目标机上运行。

交叉开发环境一般由运行于宿主机上的交叉开发软件、宿主机到目标机的调试通道组成。

如基于ARM9、µCOS的嵌入式系统开发,需要安装交叉编译工具ADS。基于VxWorks的开发环境:Tornado 2.几种常用的调试方法、指令集模拟器

一种利用PC机端的仿真开发软件模拟调试的方法。

如:Skyeye 清华大学陈渝主持的自由软件项目,http://www.xiexiebang.com

ARM公司的ARMulator模拟器 驻留监控软件

驻留监控程序运行在目标板上,PC机端调试软件可通过并口、串口、网口与之交互,以完成程序执行、存储器及寄存器读写、断点设置等任务

ARM公司的Angel是长驻在目标机Flash中的监控程序 JTAG仿真器(基于JTAG的ICD(In-Circuit Debugger))

通过ARM芯片的JTAG边界扫描口与ARM核进行通信,不占用目

标板的资源,是目前使用最广泛的调试手段 在线仿真器ICE(In-Circuit Emulator)

使用仿真头代替目标板上的CPU,可以完全仿真ARM芯片的行为。但结构较复杂,价格昂贵,通常用于ARM硬件开发中

(ARM-LINUX开发一般过程不要求)

三、Bootloader(3个常用)

1、什么是bootloader Bootloader,为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。

Bootloader的位置:通常固化在硬件上的某个固态存储设备上,加电后自启动。Bootloader功能:初始化硬件设备、建立内存空间的映射图(有的CPU没有内存映射功能如 S3C44B0x),将系统的软、硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。

Bootloader的地址:在嵌入式系统中,系统加电复位后,几乎所有的 CPU都从由复位地址上取指令。

2、Bootloader操作模式

两种不同的操作模式:“启动加载”模式和“下载”模式。其区别对于开发人员才有意义。从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别。启动加载(Bootloading)模式

启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。

启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。

下载(Downloading)模式

下载方式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。

下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH 类固态存储设备中。

下载模式应用场合:Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用到这种工作模式。

用户应用接口:工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。如在RedBoot下,将出现“RedBoot>”提示符;在vivi Bootloader 下出现“vivi>”提示符。

3、Bootloader启动过程

Bootloader的启动可以分为两个阶段

1、第一阶段

阶段1主要包含依赖于CPU体系结构及硬件设备的初始化等。通常都用汇编语言来实现。这个阶段的任务有5:

(1)、基本的硬件设备初始化

这是 Bootloader 一开始就执行的操作,其目的是为阶段2 的执行、以及随后kernel 的执行准备好一些基本的硬件环境。

它通常包括以下工作:

关闭处理器内部指令/数据cache等

关闭中断

关闭看门狗

配置PLL 配置内存

初始化各工作模式的堆栈

配置中断

拷贝RW段,初始化ZI段

(2)、为阶段2代码准备RAM空间

为了获得更快的执行速度,通常把 阶段2 的代码加载到 RAM 空间中来执行。

准备RAM空间考虑的因素:阶段2代码大小、堆栈、页大小(4KB的倍数)、安排位置等。

(3)、拷贝阶段2代码到RAM空间

(4)、设置好堆栈

堆栈指针sp设置在1MB 的 RAM 空间的最顶端(堆栈向下生长)。

(5)、跳转到阶段2的C程序入口点

在上述一切都就绪后,就可以跳转到 Bootloader 的 stage2 去执行了。

2、第二阶段

阶段2通常用C语言来实现,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的主要任务有5:

(1)、初始化本阶段要使用到的硬件

至少初始化一个串口,以便和终端用户进行 I/O 输出信息等。

(2)、检测系统内存映射(memory map)

所谓内存映射,就是指在整个物理地址空间中有哪些地址范围被分配用来作为系统的 RAM 单元。为后面使用RAM、运行程序做好准备。

(3)、将kernel和根文件系统映像从flash读到RAM空间

(4)、为kernel设置启动参数

这是在调用内核之前应该做的准备工作。Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。

启动参数标记列表方法:以ATAG_CORE标记开始,以ATAG_NONE标记结束。

在嵌入式 Linux 系统中,通常需要由 Boot Loader 设置的启动参数有:ATAG_CORE、ATAG_MEM(内存映射)、ATAG_NONE等。

(5)、调用内核

Bootloader调用Linux kernel的方法是直接跳转到内核的第一条指令处。在跳转时必须满足下列条件:

1)、CPU寄存器的设置:R0为0;R1为机器类型ID;R2为启动参数,标记列表在RAM中的起始基地址。(机器类型参见 linux/arch/arm/tools/mach-types目录)2)、CPU模式: CPU必须设置为SVC模式,必须禁止中断(IRQs和FIQs)。

3)、MMU 和 Cache的设置:MMU 必须关闭;指令 Cache 可以打开也可以关闭; 数据 Cache 必须关闭。

4、有哪些常用的Bootloader Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。

1、vivi vivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。

2、RedBoot

RedBoot即红帽(Red Hat)嵌入式调试引导程序,是一种用于嵌入式系统的独立开放源代码引导/装载器。

3、U-Boot

U-Boot(Universal Bootloader)由德国DENX小组开发,是一款目前功能较为强大的开源Bootloader程序,它支持多种处理器平台,包括ARM、PowerPC、MIPS等。

四、嵌入式微处理器

1、嵌入式系统硬件基础知识(体系结构,指令集)1)冯·诺依曼体系结构和哈佛体系结构 冯·诺依曼体系结构

地址存储器CPU数据PC

数据和指令都存储在一个存储器中的计算机被称为冯·诺依曼机 指令的执行周期T 1)取指令(Instruction Fetch):TF 2)指令译码(Instruction Decode):TD 3)执行指令(Instruction Execute):TE 4)存储(Storage):TS 每条指令的执行周期:T= TF+TD+TE+TS 冯·诺依曼体系结构特点:

1)数据与指令都存储在存储器中 2)被大多数计算机所采用

3)冯诺依曼体系: 英特尔公司的8086,英特尔公司的其他中央处理器、ARM的ARM7、MIPS公司的MIPS处理器。哈佛体系结构

地址数据存储器数据地址程序存储器数据 CPUPC

数据和指令存储在各自独立的存储器中的计算机体系结构称为哈佛体系结构 哈佛体系结构特点:

1)程序存储器与数据存储器分开 2)提供了较大的数据存储器带宽 3)适合于数字信号处理

4)大多数DSP都是哈佛结构

5)Microchip公司的PIC16芯片、摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11。

很难在哈佛机上编写出一个自修改程序(写入数据值然后使用这些值作为指令的程序

2)CISC与RISC CISC:复杂指令集(Complex Instruction Set Computer)8/2原则:80%的程序只使用20%的指令 具有大量变长形式的不同指令

大多数程序只使用少量的指令就能够运行。PUSH AX MOV AL,80H MOV AX,1090H RISC:精简指令集(Reduced Instruction Set Computer)RISC是在开发高性能微处理器过程中的一个进步 在通道中只包含最有用的指令(少而简单)确保数据通道快速执行每一条指令 使CPU硬件结构设计变得更为简单

指令格式和长度固定,且指令类型很少、指令功能简单、寻址方式少而简单,指令译码控制器采用硬布线逻辑,这样易于流水线的实现,进而获得高性能;

由于RISC指令系统强调了对称、均匀、简单,使得程序的优化编译效率更高; 大多数指令单周期完成;

分开的load-store结构的存取指令,也只有load-store结构的存取指令访问存储器,而数据处理指令只访问寄存器。而CISC处理器一般允许将存储器中的数据作为数据处理指令的操作数;

3)流水线、超标量

4)缓存

如何减少CPU与内存之间的速度差异?(4种)

1、为什么采用高速缓存

微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。

2、高速缓存的工作原理

高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝。

5)总线和总线桥

ARM微控制器使用的是AMBA总线体系结构

AMBA(Advanced Microcontroller Bus Architecture)是ARM公司公布的总线标准,先进的AMBA规范定义了三种总线:

AHB总线(Advanced High-performance Bus):用于连接高性能系统模块。它支持突发数据传输方式及单个数据传输方式,所有时序 参考同一个时钟沿。

ASB总线(Advanced System Bus):用于连接高性能系统模块,它支持突发数据传输模式。

APB总线(Advance Peripheral Bus):是一个简单接口支持低性能的外围接口。

2、ARM编程模型(2工作状态,7种模式,重点)

ARM处理器的几大特点如下:

小体积、低功耗、成本低、高性能;

支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件; 大量使用寄存器,大多数数据操作都在寄存器中完成,指令执行速度更快; 寻址方式灵活简单,执行效率高; 指令长度固定;

全球众多的合作伙伴。

当前ARM体系结构的扩充包括:

Thumb:16位指令集,用以改善代码密度;

DSP:用于DSP应用的算术运算指令集;

Jazeller:允许直接执行Java代码的扩充。

ARM7TDMI 处理器有两种工作状态:******************* ARM-32-bit, 按字排列的ARM指令集

Thumb-16-bit, 按半字排列的Thumb指令集

测试编译器属哪种模式

下面这段代码可以用来测试一下你的编译器是大端模式还是小端模式:

short int x;

char x0,x1;

x=0x1122;

x0=((char*)&x)[0];//低地址单元

x1=((char*)&x)[1];//高地址单元

若x0=0x11,则是大端;若x0=0x22,则是小端......上面的程序还可以看出,数据寻址时,用的是低位字节的地址。

3、ARM 指令集中常用指令(寻址方式、数据处理指令、加载/存储指令等)*

4、汇编语言与C/C++的混合编程(3种编程方式,APCS,ATPCS)

APCS(ARM Produce Call Standard)是ARM程序中子程序调用的基本规则,目的是为了使单独编译的C语言程序和汇编程序之间能够相互调用。这些基本规则包括子程序调用过程中寄存器的使用规则、数据栈的使用规则和参数的传递规则。

汇编语言与C/C++的混合编程通常有以下几种方式:

- 在C/C++代码中嵌入汇编指令。

- 在汇编程序和C/C++的程序之间进行变量的互访。

- 汇编程序、C/C++程序间的相互调用。

在以上的几种混合编程技术中,必须遵守一定的调用规则,如物理寄存器的使用、参数的传递等。

一般情况:

程序的初始化部分用汇编语言完成,然后用C/C++完成主要的编程任务,汇编程序和C/C++程序之间一般没有参数的传递,也没有频繁的 相互调用,因此,整个程序的结构显得相对简单,容易理解。

5、嵌入式程序设计技巧(时间换空间,8个例子)变量定义 参数传递 循环条件 以空间换时间 数学方法解决问题 使用位操作 嵌入汇编

五、硬件系统结构

1、S3C2410存储系统组织(8个端口,确定宽度)S3C2410X有117个输入/输出端口。这些端口是:

A口(GPA):23个输出口

B口(GPB):11个输入/输出口

C口(GPC):16个输入/输出口 D口(GPD):16个输入/输出口 E口(GPE):16个输入/输出口 F口(GPF):8个输入/输出口 G口(GPG):16个输入/输出口 H口(GPH):11个输入/输出口

2、S3C2410的外设管理

3、I/O口的组织及一般应用(引脚)、4、UART

S3C2410 的UART(通用异步串行口)有三个独立的异步串行I/O 端口:UART0、UART1、UART2,每个串口都可以在中断和DMA 两种模式下进行收发。UART支持的最高波特率达230.4kbps。

每个UART 包含:波特率发生器、接收器、发送器和控制单元。波特率发生器以PCLK或UCLK为时钟源。发送器和接收器各包含1个16 字节的FIFO 寄存器和移位寄存器。

S3C2410 的3个UART都有遵从1.0规范的红外传输功能,UART0、UART1有完整的握手信号,可以连接MODEM。

当发送数据的时候,数据先写到FIFO 然后拷贝到发送移位寄存器,然后从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO 中。

编写一程序,使用S3C2410X的UART2进行串行数据收发,要求用脉冲请求中断的方式、使用收/发FIFO,8个数据位、1个停止位、不校验,波特率为125kb/s。设Pclk为50MHz。(提示:主程序对UART2初始化、引脚配置、中断初始化等,并进行一次发送;中断服务程序进行数据收发,标签清除中断请求标志和中断服务标志)

解:

(1)计算波特率除数:

由公式:

UBRDIVn=(int)(CLK/(f B*16))- 1

这里: Pclk=50MHz,f B = 125kb/s 计算得:

UBRDIVn=25-1=24

(2)UART2控制寄存器:

线路控制寄存器: ULCON2=0 0 000 0 11=0x03 含义:非红外、不校验、1个停止位、8个数据位 控制寄存器:

UCON2=0b 0 0 0 0 0 0 0 01 01=0x05 含义:选Pclk、发/收中断脉冲请求、关闭接收超时中断、允许接收错误中断、不回送、不发送暂停信号、发/收用中断方式。

FIFO控制寄存器:UFCON2=0b 10 01 0 0 0 1=0x91 含义:发/收FIFO选8字节触发、保留位为0、不复位发/收FIFO、使能FIFO。

(3)引脚配置

需要设置TxD2、RxD2,它们对应GPH6、GPH7,在GPH配置寄存器GPHCON中的位置为:

0b 1 0 0

**

**

**

**

**

** 方法:GPHCON= GPHCON&~(0xF<<12)|(0xA<<12)

(4)中断寄存器设置

中断模式寄存器:INTMOD&=~(1<<15)INT_UART2位于第15位,将UART2设置为IRQ中断

中断屏蔽寄存器:INTMSK&=~(1<<15)

中断优先级寄存器PRIORITY:

不设置,使用固定优先级。

子中断屏蔽寄存器:INTSUBMSK&=~(7<<6)

INT_ERR2、INT_TXD2、INT_RXD2位于子中断屏蔽寄存器中的8、7、6位。

(5)在中断服务程序中对寄存器的操作

清除中断标志寄存器相应位:

SRCPND&=~(1<<15)

清除中断服务寄存器相应位:

INTPND&=~(1<<15)

5、时钟和功耗管理(解决方案 简述2410的功耗解决方案)时钟功能

有两个锁相环MPLL、UPLL(Phase-Locked Loop)产生系统所需要的不同频率的时钟。

(1)为CPU产生FCLK时钟(2)为AHB产生HCLK时钟 使用HCLK的设备:中断控制器、存储器管理器、DMA控制器、LCD控制器、FLASH控制器、USB Host(不用PLL时)、总线控制器、片外设备。

(3)为APB产生PCLK时钟

使用PCLK的设备: 117个通用I/O口GPIO、ADC、5个定时器与4个PWM、3个UART、2个SPI、IIC、USB Device(不用PLL时)、RTC、WDT、SD卡接口、IIS接口

(4)为USB(Host and Device)产生UCLK时钟(48MHz)

2、电源管理功能

具有4种电源管理模式:正常模式、慢时钟模式、空闲模式、掉电模式。

(1)正常模式:

1)锁相环工作;2)为CPU和所 有片内外设提供时钟。

此模式系统功耗最大。(2)慢时钟模式:

锁相环不工作,CPU等直接使用原始时钟、或原始时钟的分频工作。

此模式工作时钟频率低而使功耗低,并且锁相环不工作也使功耗降低。(3)空闲模式:

停止为CPU提供时钟,CPU不工作(其外设均工作)。

退出方法:任何中断请求可唤醒CPU工作,退出空闲模式。(4)断电模式:

时钟模块断电,除了唤醒电路之外所有部分均不供电。系统需分成两部分供电。此模式功耗最低。必须设置有外中断

退出方法:用中断唤醒。(1)外部中断EINT0---15;(2)实时钟报警中断。

如何降低2410的功耗

在能够满足功能正常的前提下,尽可能选择低电压工作的CPU能够在总体功耗方面得到较好的效果。对于已经选定的CPU来讲,降低供电电压和工作频率,也是一条节省功率的可行之路。CPU采用内置Flash的方式

如果可以通过选取合适的前后级芯片来避免Buffer的使用,对于能量来讲是一个很大的节约。

我们可以通过控制CPU进入不同的模式来达到省电的目的 关闭不需要的外设控制器

在适当的情况下使用DC-DC的电压转换线路,可以有效地节约能量

6、程序实例

六、实时操作系统

1、实时操作系统概念(可重入,任务集翻转)RTOS的基本特征: 高效的任务管理

1.支持多任务

2.优先级管理

3.任务调度:基于优先级的抢占式调度、时间片轮转调度的算法

4.支持快速而确定的上下文切换 快速灵活的任务间通信

1.信号量:二进制、互斥、计数器

2.通信机制:消息队列、管道等 高度的可剪裁性

动态链接与部件增量加载

快速有效的中断和异常事件处理 优化的浮点支持 动态内存管理 可重入型函数

可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中,或对全局变量予以保护。

一个不可重入型函数的例子 int Temp;Void swap(int *x,int*y){ Temp=*x;*X=*Y;*y=Temp;} 使用以下技术之一即可使Swap()函数具有可重入性: l 把Temp定义为局部变量

l 调用Swap()函数之前关中断,调用后再开中断 l 用信号量禁止该函数在使用过程中被再次调用

一个可重入型函数的例子 Void swap(int *x,int*y){ int Temp;Temp=*x;*X=*Y;*y=Temp;} 优先级反转

多任务内核应允许动态改变任务的优先级以避免发生优先级反转现象。为防止发生优先级反转,内核能自动变换任务的优先级,这叫做优先级继承(Priority inheritance)但μC/OS-Ⅱ不支持优先级继承,一些商业内核有优先级继承功能/

2、系统时钟和定时器

C/OS的性能特点(列举性能特点)可移植性(Portable)

C/OS-II的源码是用移植性很强的ANSI C写的。

和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经

C/OS-II便于移植到其他微处理器上。

汇编语言写的部分只有200行左右。

C/OS-II可以在绝大多数8位、16位、32位以至64位微处理器、微控制器、数字信号处理器(DSP)上运行。移植范例的源代码可以从因特网上下载。

可裁剪(Scalable)

C/OS-II中应用程序需要的那些系统服务。也就是说某产品可 C/OS-II C/OS-II

C/OS-II所需的存储器空间(RAM和ROM)。这种可剪裁性是靠条件编译实现的。多任务

C/OS-II可以管理64个任务,然而,目前这一版本保留8个给系统。应用程序最多可以有56个任务 占先式(Preemptive)可确定性

C/OS-II的函数调用与服务的执行时间具有可确定性。任务栈

每个任务有自己单独的栈,C/OS-II允许每个任务有不同的栈空间,以便压低应用程序对RAM的需求。系统服务

C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理

中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。

可固化(ROMable)

C/OS-II是为嵌入式应用而设计的,这就意味着,只要读者有固化手段(C编译、连接、下载和固化),C/OS-II可以嵌入到读者的产品中成为产品的一部分。

稳定性与可靠性

3、C/OS-Ⅱ内核(任务、任务状态、任务控制块、就绪表、调度、任务切换、中断等)

C/OS-Ⅱ移植(开关中断、类型定义、堆栈初始化、任务切换等))

下载中科大软院算法导论区间树实验报告(定稿)word格式文档
下载中科大软院算法导论区间树实验报告(定稿).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐