嵌入式系统设计与实例开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文由oucaimci贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
嵌入式系统设计与实例开发
——ARM与C/OS-Ⅱ ARM与 C/OSARM
第五讲 嵌入式软件的移植
1
第四讲、 第四讲、嵌入式系统的移植
1 移植的概念和目的 2 操作系统移植 3 4 5 软件移植
2
一、移植的概念和目的
移植:程序或应用软件从一个系统平台移动另一个系统平台, 移植:程序或应用软件从一个系统平台移动另一个系统平台,其 功能、结构、执行结果保持不变。 功能、结构、执行结果保持不变。 移植的目的: 移植的目的: 1、硬件平台的升级 、 2、实现软件重用 、 3、实现软件/硬件并行设计 、实现软件 硬件并行设计 移植的要求: 移植的要求: 1、移植对象具有硬件无关性 、 2、移植对象具有系统无关性 、 3、移植对象采用标准语言编程 、
3
二、嵌入式操作系统的移植——C/OS-II 嵌入式操作系统的移植
μC/OS-II的软硬件体系结构 μC/OS-II的软硬件体系结构 μC/OS-II的移植需要满足的要求 μC/OS-II的移植需要满足的要求 C/OS-II移植的主要工作 移植的主要工作 BSP的概念及应用 的概念及应用
4
2.1 C/OS-II的软硬件体系结构 的软硬件体系结构
5
2.2 C/OS-II的移植需要满足以下要求 的移植需要满足以下要求
(1)处理器的C编译器可以产生可重入代码; )处理器的C 临界区代码) (2)可以使用C调用进入和退出Critical Code(临界区代码); )可以使用C调用进入和退出Critical Code(临界区代码 (3)处理器必须支持硬件中断,并且需要一个定时中断源; (4)处理器需要能够容纳一定数据的硬件堆栈; (5)处理器需要有能够在 )处理器需要有能够在CPU寄存器与内存和堆栈交换数据的指令 寄存器与内存和堆栈交换数据的指令 。
6
打开/关闭中断 打开 关闭中断
在COS-II中,可以通过: 中 可以通过: OS_ENTER_CRITICAL () OS_EXIT_CRITICAL() 宏来控制系统关闭或者打开中断。这需要处理器的支持。 宏来控制系统关闭或者打开中断。这需要处理器的支持。 的处理器上, 在ARM7TDMI的处理器上,可以设置相应的寄存器来关闭或者打 的处理器上 开系统的所有中断。 开系统的所有中断。
7
处理器支持中断并且 能产生定时中断
COS-II是通过处理器产生的定时器的中断来实现多任务 是通过处理器产生的定时器的中断来实现多任务 之间的调度的。 的处理器上可以产生定时器中断。 之间的调度的。ARM7TDMI的处理器上可以产生定时器中断。 的处理器上可以产生定时器中断 本系统工作在60MHz的主频下,定时器
的中断的频率为 的主频下, 本系统工作在 的主频下 1000Hz。也就是系统的响应时间为 。也就是系统的响应时间为1ms。 。
8
处理器支持硬件堆栈
进行任务调度的时候, COS-II进行任务调度的时候,会把当前任务的 进行任务调度的时候 会把当前任务的CPU寄存 寄存 器存放到此任务的堆栈中,然后, 器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢 复原来的工作寄存器,继续运行另一个任务。所以, 复原来的工作寄存器,继续运行另一个任务。所以,寄存器的 入栈和出栈是 多任务调度的基础。 入栈和出栈是COS-II多任务调度的基础。 多任务调度的基础 ARM7处理器中有专门的指令处理堆栈,可以灵活的使 处理器中有专门的指令处理堆栈, 处理器中有专门的指令处理堆栈 用堆栈。 用堆栈。
9
2.3 C/OS-II移植的主要工作 移植的主要工作
处理器和编译器相关代码
C/OS-II的BSP的编写 的 的编写
10
COS-II在S3C44B0X上的移植 在 上的移植
设置OS_CPU.H中与处理器和编译器相关的代码 中与处理器和编译器相关的代码 设置 语言编写六个操作系统相关的函数( 用C语言编写六个操作系统相关的函数(OS_CPU_C.C) 语言编写六个操作系统相关的函数 ) 用汇编语言编写四个与处理器相关的函数( 用汇编语言编写四个与处理器相关的函数(OS_CPU.ASM) )
11
OS_CPU.H中需要设置一个常量来标识堆栈增长方向; 中需要设置一个常量来标识堆栈增长方向; 中需要设置一个常量来标识堆栈增长方向 OS_CPU.H中需要声明几个用于开关中断和任务切换的宏; 中需要声明几个用于开关中断和任务切换的宏; 中需要声明几个用于开关中断和任务切换的宏 OS_CPU.H中需要针对具体处理器的字长重新定义一系列数据类 中需要针对具体处理器的字长重新定义一系列数据类 型; OS_CPU_A.ASM需要改写 个汇编语言的函数; 需要改写4个汇编语言的函数 需要改写 个汇编语言的函数; OS_CPU_C.C需要用 语言编写 个简单函数; 需要用C语言编写 个简单函数; 需要用 语言编写6个简单函数
12
设置与处理器和编译器 相关的代码
OS_CPU.H中定义了与编译器相关的数据类型。比如: 中定义了与编译器相关的数据类型。比如: 中定义了与编译器相关的数据类型 INT8U、INT8S等。 、 等 与 ARM处理器相关的代码,使用 处理器相关的代码, 处理器相关的代码 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL() 宏开启/关闭中断 宏开启/ 设施堆栈的增长方向 :堆栈由高地址向低地址增长
13
用C语言编写六个 语言编写六个 操作系统相关的函数
void *OSTaskStkInit (void (*task
)(void *pd),void *pdata, void *ptos, INT16U opt) void OSTaskCreateHook (OS_TCB *ptcb) void OSTaskDelHook (OS_TCB *ptcb) void OSTaskSwHook (void) void OSTaskStatHook (void) void OSTimeTickHook (void) 个函数为钩子函数, 后5个函数为钩子函数,可以不加代码 个函数为钩子函数
14
用汇编语言编写四个 与处理器相关的函数
OSStartHighRdy() OSCtxSw() OSIntCtxSw() OSTickISR()
15
实现方法
在每个硬件时钟到来后,C/OS-II会在中断服务例程中调用 在每个硬件时钟到来后, 会在中断服务例程中调用 OSIntCtxSw()进行任务调度;另外,当某个任务因等待资源而 ()进行任务调度;另外, ()进行任务调度 被挂起时,没有必要等到自己的时间片全都用完, 被挂起时,没有必要等到自己的时间片全都用完,可以自己主动 放弃CPU,这可以通过调用一个任务级的任务调度函数 放弃 , OSCtxSw()来实现。 来实现。 来实现 其中相对复杂的是OSIntCtxSw()。由于OSTickISR()调用了 其中相对复杂的是 。由于 ()调用了 () OSIntExit(), (),OSIntExit()又再次调用了OSIntCtxSw(),如 ()又再次调用了 , (), ()又再次调用了 果进行任务切换,那么两次调用都不会返回,而不同的C编译器、 果进行任务切换,那么两次调用都不会返回,而不同的 编译器、 编译器 不同的编译选项处理C调用时对堆栈的使用也不尽相同。因此 不同的编译选项处理 调用时对堆栈的使用也不尽相同。 调用时对堆栈的使用也不尽相同 OSIntCtxSw()是编译器相关的。 是编译器相关的。 是编译器相关的
16
C/OS-II任务堆栈初始化 任务堆栈初始化
C/OS-II中每个任务都有自己的任务堆栈,在任务创建初期由 中每个任务都有自己的任务堆栈, 中每个任务都有自己的任务堆栈 OSTaskStkInit()初始化。初始化堆栈的目的就是模拟一次中断 ()初始化 ()初始化。 任务堆栈中保存了任务代码的起始地址和一些CPU寄存器(初 寄存器( 。任务堆栈中保存了任务代码的起始地址和一些 寄存器 值是无关紧要的),这样一旦条件满足,就可以执行该任务了。 ),这样一旦条件满足 值是无关紧要的),这样一旦条件满足,就可以执行该任务了。
17
2.4 C/OS-II BSP编写 编写
BSP(板级支持包)是介于底层硬件和操作系统之间的软件层次, BSP(板级支持包)是介于底层硬件和操作系统之间的软件层次, 它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行 封装,使得操作系统不再面对具体的操作。 BSP的特点: BSP的特点: 硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性, 硬件相关性:因为嵌入式实时系统的
硬件环境具有应用相关性, 所以,作为高层软件与硬件之间的接口, 所以,作为高层软件与硬件之间的接口,BSP必须为操作系统提 必须为操作系统提 供操作和控制具体硬件的方法。 供操作和控制具体硬件的方法。 操作系统相关性:不同的操作系统具有各自的软件层次结构, 操作系统相关性:不同的操作系统具有各自的软件层次结构,因 不同的操作系统具有特定的硬件接口形式。 此,不同的操作系统具有特定的硬件接口形式。
18
BSP的功能 的功能
操作系统初始化 A、片级初始化 、 B、板级初始化 、 C、系统级初始化 、
硬件相关的设备驱动程序
19
嵌入式系统初始化过程及BSP功能 功能 嵌入式系统初始化过程及
20
系统调用通用设备驱动程序与BSP的关系 的关系 系统调用通用设备驱动程序与
21
设计BSP的方法 的方法 设计
一、以典型的BSP做为参考 以典型的 做为参考
二、参照操作系统或芯片厂商提供的BSP模板 参照操作系统或芯片厂商提供的 模板
22
C/OS-II BSP
for ARM
C/OS-II编写一个简单的 编写一个简单的BSP。它首先设置 编写一个简单的 。它首先设置CPU内部寄存器和系 内部寄存器和系 统堆栈,并初始化堆栈指针,建立程序的运行和调用环境; 统堆栈,并初始化堆栈指针,建立程序的运行和调用环境; 然后可以方便地使用C语言设置 片选地址( 然后可以方便地使用 语言设置ARM片选地址(CS0~CS7)、 语言设置 片选地址 ~ )、 GPIO以及 以及SDRAM控制器,初始化串口(UART0)作为默认打印 控制器, 以及 控制器 初始化串口( ) 并向操作系统提供一些硬件相关例程和函数如dprintf(),以方 口,并向操作系统提供一些硬件相关例程和函数如 , 便调试; 便调试; 在CPU、板级和程序自身初始化完成后,就可以把 、板级和程序自身初始化完成后,就可以把CPU的控制 的控制 权交给操作系统了
23
二、向嵌入式平台移植软件
大部分嵌入式开发人员选用的软件开发模式是先在PC机上编写 大部分嵌入式开发人员选用的软件开发模式是先在 机上编写 软件,再进行软件的移植工作。 机上编写软件时, 软件,再进行软件的移植工作。在PC机上编写软件时,要注意软 机上编写软件时 件的可移植性。 件的可移植性。 语言) 1、选用具有较高移植性的编程语言(如C语言) 选用具有较高移植性的编程语言( 语言 2、尽量少调用操作系统函数 3、注意屏蔽不同硬件平台带来的字节顺序、字节对齐等问题。 注意屏蔽不同硬件平台带来的字节顺序、字节对齐等问题。
24
字节顺序
字节顺序是
指占内存多于一个字节类型的数据在内存中的存放 顺序,通常有小端、大端两种字节顺序。 顺序,通常有小端、大端两种字节顺序。小端字节序指低字节数 据存放在内存低地址处,高字节数据存放在内存高地址处; 据存放在内存低地址处,高字节数据存放在内存高地址处;大端 字节序是高字节数据存放在低地址处, 字节序是高字节数据存放在低地址处,低字节数据存放在高地址 基于X86平台的PC机是小端字节序的, X86平台的PC机是小端字节序的 处。基于X86平台的PC机是小端字节序的,而有的嵌入式平台则是 大端字节序的。因而对int uint16、uint32等多于 int、 等多于1 大端字节序的。因而对int、uint16、uint32等多于1字节类型的 数据,在这些嵌入式平台上应该变换其存储顺序。 数据,在这些嵌入式平台上应该变换其存储顺序。 通常我们认为, 通常我们认为,在空中传输的字节的顺序即网络字节序为标准 顺序,考虑到与协议的一致以及与同类其它平台产品的互通, 顺序,考虑到与协议的一致以及与同类其它平台产品的互通,在 程序中发数据包时,将主机字节序转换为网络字节序, 程序中发数据包时,将主机字节序转换为网络字节序,收数据包 处将网络字节序转换为主机字节序。 处将网络字节序转换为主机字节序。
25
字节对齐
有的嵌入式处理器的寻址方式决定了在内存中占2字节的int16、uint16等类 有的嵌入式处理器的寻址方式决定了在内存中占2字节的int16、uint16等类 int16 型数据只能存放在偶数内存地址处, 字节的int32 型数据只能存放在偶数内存地址处,占4字节的int32 、uint32 等类型数据只能 存放在4的整数倍的内存地址处; 字节的类型数据只能存放在8 存放在4的整数倍的内存地址处;占8字节的类型数据只能存放在8的整数倍的内存 地址处;而在内存中只占1字节的类型数据可以存放在任意地址处。 地址处;而在内存中只占1字节的类型数据可以存放在任意地址处。由于这些限制 在这些平台上编程时有很大的不同。首先,结构体成员之间会有空洞, ,在这些平台上编程时有很大的不同。首先,结构体成员之间会有空洞,比如这 样一个结构: 样一个结构: typedef struct test{ char a; uint16 b; }TEST 结构TEST在单字节对齐的平台上占内存三个字节, 结构TEST在单字节对齐的平台上占内存三个字节,而在以上所述的嵌入式平 TEST在单字节对齐的平台上占内存三个字节 台上有可能占三个或四个字节,视成员a的存储地址而定。 台上有可能占三个或四个字节,视成员a的存储地址而定。当a存储地址为偶数时 该结构占四个字节, 之间存在一个字
节的空洞。 ,该结构占四个字节,在a与b之间存在一个字节的空洞。对于通信双方都是对结 构成员操作的,这种情况不会出错,但如果有一方是逐字节读取内容的( 构成员操作的,这种情况不会出错,但如果有一方是逐字节读取内容的(通信协 议大都如此),就会错误地读到其它字节的内容。其次, ),就会错误地读到其它字节的内容 议大都如此),就会错误地读到其它字节的内容。其次,若对内存中数据以强制 类型转换的方式读取,字节对齐的不同会引起数据读取的错误。 类型转换的方式读取,字节对齐的不同会引起数据读取的错误。因为假如指针指 在基数内存地址处,我们想取得占内存两个字节的数据存放在uint16 uint16型的变量中 在基数内存地址处,我们想取得占内存两个字节的数据存放在uint16型的变量中 ,强制类型转换的结果是取得了该指针所指地址与前一地址处的数据,并没有按 强制类型转换的结果是取得了该指针所指地址与前一地址处的数据, 照我们的愿望取该指针所指地址与后一地址处的数据, 照我们的愿望取该指针所指地址与后一地址处的数据,这样就导致了数据读取的 错误。 错误。
26
位 段
由于位段的空间分配方向因硬件平台的不同而不同, X86平台 由于位段的空间分配方向因硬件平台的不同而不同,对X86平台 位段是从右向左分配的;而一些嵌入式平台, ,位段是从右向左分配的;而一些嵌入式平台,位段是从左向右 分配的。分配顺序的不同导致了数据存取的错误。 分配的。分配顺序的不同导致了数据存取的错误。解决这一问题 的一种方法是采用条件编译的方式, 的一种方法是采用条件编译的方式,针对不同的平台定义顺序不 同的位段;也可以在前面所述的两个函数中加上对位段的处理。 同的位段;也可以在前面所述的两个函数中加上对位段的处理。
27
代码优化的问题 代码优化的问题
嵌入式系统对应用软件的质量要求更高, 嵌入式系统对应用软件的质量要求更高,因而在嵌入式开发 中尤其须注意对代码进行优化,尽可能地提高代码的效率, 中尤其须注意对代码进行优化,尽可能地提高代码的效率,减少 代码的大小。虽然现代C C++编译器都提供了一定程度的代码优 代码的大小。虽然现代C和C++编译器都提供了一定程度的代码优 化,但大部分由编译器执行的优化技术仅涉及执行速度和代码大 小的平衡,不可能使程序既快又小, 小的平衡,不可能使程序既快又小,因而必须在编写嵌入式软件 时采取必要的措施。 时采取必要的措施。
28
(1)提高代码的效率
语句。
在程序中经常会使用switch case语句 switch①switch-case 语句。在程序中经常会使用switch-case语句 switch,每一个由机器语言实现的测试和跳转仅仅是为了决定下一步要 做什么,就浪费了处理器时间。为了提高速度, 做什么,就浪费了处理器时间。为了提高速度,可以把具体的情 况按照它们发生的相对频率排序。 况按照它们发生的相对频率排序。即把最可能发生的情况放在第 最不可能发生的情况放在最后, 一,最不可能发生的情况放在最后,这样会减少平均的代码执行 时间。 时间。 全局变量。使用全局变量比向函数传递参数更加有效率, ② 全局变量。使用全局变量比向函数传递参数更加有效率, 这样做去除了函数调用前参数入栈和函数完成后参数出栈的需要 当然,使用全局变量会对程序有一些负作用。 。当然,使用全局变量会对程序有一些负作用。
29
(2)减小代码的大小
嵌入式系统编程应避免使用标准库例程, 嵌入式系统编程应避免使用标准库例程,因为很多大的库例 程设法处理所有可能的情况,所以占用了庞大的内存空间, 程设法处理所有可能的情况,所以占用了庞大的内存空间,因而 应尽可能地减少使用标准库例程。 应尽可能地减少使用标准库例程。
30
(3)避免内存泄漏
用户内存空间( 用户内存空间(堆)为RAM中全局数据和任务堆栈空间都分配 RAM中全局数据和任务堆栈空间都分配 后的剩余空间,为了使程序能有足够的内存运行, 后的剩余空间,为了使程序能有足够的内存运行,必须在申请的 内存不用后及时地将其释放,以确保再次申请时能有空间。 内存不用后及时地将其释放,以确保再次申请时能有空间。如果 程序中存在内存泄漏(即申请内存后没有及时释放)的情况, 程序中存在内存泄漏(即申请内存后没有及时释放)的情况,程 序最终会因为没有足够的内存空间而无法运行。 序最终会因为没有足够的内存空间而无法运行。
31
谢谢各位
32
本TXT由“文库宝”下载:/wenkubao本文由威4威4贡献
ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。
嵌入式系统设计与实例开发
——ARM与μC/OS-Ⅱ ARM与 C/OSARM
第二讲 嵌入式系统的基本概念
1
课程大纲
讲课 时间 第二周 3.4/二 第三周 3.11 第四周 3.18 第六周 4.1 第八周 题目 1.引言 2.嵌入式系统 的基本知识 3.嵌入式实时 操作系统 4.嵌入式硬件 平台 5.嵌入式系统 的设计方法 6.嵌入式系统 的硬件设计 讲稿 内容 嵌入式系统技术前沿、应用领域、 发展趋势及相关领
域研究成果 嵌入式系统的特点、分类、基本概 念 介绍主流实时操作系统,深入剖析 WinCE、Linux、μC/OS,包括系 统结构、实时性、应用 介绍主流硬件平台,详细介绍ARM、 DSP、ATMEL单片机功能及应用 介绍嵌入式系统设计的一般方法, 以嵌入式工程机械智能监控器与 嵌入式控制器为例 简要介绍外围接口设计,以LCD、触 摸屏为例,着重讲解人机交互接 口设计 简要介绍嵌入式软件的体系结构, 着重讲解嵌入式GUI的编程方法 实验 时间 内容
第五周 第七周
实验一、ARM SDT 2.5开发环境 及ARM开发平台简介 实验二、ARM的输入输出接口实 验:I/O、A/D、键盘驱动 实验三、ARM的串行通讯实验 实验四、ARM的触摸屏驱动实验 实验五、μC/OS-Ⅱ在ARM上的 移植实验 实验六、基于μC/OS-Ⅱ的嵌入式 编程实验:消息循环、文件 系统 实验七、GUI编程实验 综合实验:LCD、UDP编程
第九周
第十周 第十一周 第十二周 第十四周
第十三周
7.嵌入式系统 编程
第十五周 第十六周 8.嵌入式技术 演讨 9.考试 选择5-8名有嵌入式开发经验的学生 第十七周 做报告,师生点评,探讨。
2
参考资料
1.王田苗 主编 嵌入式系统设计及实例开发 主编. 嵌入式系统设计及实例开发——ARM与μC/OS与
北京:清华大学出版社, Ⅱ. 北京:清华大学出版社,2002.9 2.(美)Jean brosse, 邵贝贝译 μC/OS-Ⅱ——源码公开 .(美 邵贝贝译. .( Ⅱ 源码公开 的实时嵌入式操作系统. 北京:中国电力出版社, 的实时嵌入式操作系统 北京:中国电力出版社,2001.8
简介:是目前学习嵌入式操作系统最好的入门教材, 简介:是目前学习嵌入式操作系统最好的入门教材,书中对一个完整的 嵌入式实时内核——μC/OS-Ⅱ进行了剖析,详细讲述了实时内核的 嵌入式实时内核 Ⅱ进行了剖析, 设计和创建方法,以及多任务实时系统的原理和编程思想。 设计和创建方法,以及多任务实时系统的原理和编程思想。
4.
马忠梅等著. ARM嵌入式微处理器体系结构。北航出版社 马忠梅等著 嵌入式微处理器体系结构。 嵌入式微处理器体系结构
3.(美)Wayne Wolf,孙玉方等译 嵌入式计算机系统设计原 .(美 .( ,孙玉方等译. 北京:机械工业出版社, 理. 北京:机械工业出版社,2002.2
简介:被称为“嵌入式计算系统设计的第一本教科书” 简介:被称为“嵌入式计算系统设计的第一本教科书”,书中重点介绍 了嵌入式技术和基本原理和技术, 了嵌入式技术和基本原理和技术,涉及到嵌入式系统的相关的指令 系统、 系统、CPU、计算平台、程序设计与分析、进程和操作
系统、硬件 、计算平台、程序设计与分析、进程和操作系统、 加速器、网络、系统设计技术等方面。 加速器、网络、系统设计技术等方面。
3
嵌入式系统的基本概念
1、什么是嵌入式系统 、 2、硬件基础 、 3、嵌入式操作系统 、
4
一、嵌入式系统的定义
发展历史
嵌入式系统本身是一个相对模糊的定义。一个手持的 嵌入式系统本身是一个相对模糊的定义。一个手持的MP3 和一个PC104的微型工业控制计算机都可以认为是嵌入式系统。 的微型工业控制计算机都可以认为是嵌入式系统。 和一个 的微型工业控制计算机都可以认为是嵌入式系统 嵌入式系统已经有了近30年的发展历史, 嵌入式系统已经有了近 年的发展历史,它是硬件和软件 年的发展历史 交替发展的双螺旋式发展。 交替发展的双螺旋式发展。 第一款微处理器是Intel的4004,它出现在 的 第一款微处理器是 ,它出现在1971年,然后是 年 公司的8048,它出现在 是Intel公司的 公司的 ,它出现在1976年。Motorola同时推出了 年 同时推出了 68HC05,Zilog公司推出了 公司推出了Z80系列,这些早期的单片机均含有 系列, , 公司推出了 系列 256字节的 字节的RAM、4K的ROM、4个8位并口、1个全双工串行口、 位并口、 个全双工串行口 个全双工串行口、 字节的 、 的 、 个 位并口 两个16位定 两个 位定 时 器。 之后在80年代初, 又进一步完善了8048,在它的基础 之后在 年代初,Intel又进一步完善了 年代初 又进一步完善了 , 上研制成功了8051。 上研制成功了 。
5
1981年Ready System发展了世界上第 个商业嵌入式实 年 发展了世界上第1个商业嵌入式实 发展了世界上第 时内核( 时内核(VTRX32)包含了许多传统操作系统的特征,包括任务 )包含了许多传统操作系统的特征, 管理、任务间通讯、同步与相互排斥、中断支持、 管理、任务间通讯、同步与相互排斥、中断支持、内存管理等功 能。 随后,出现了如 随后,出现了如Integrated System Incorporation (ISI)的 的 PSOS、IMG的VxWorks、QNX公司的 公司的QNX 等,Palm OS, 、 的 、 公司的 , WinCE,嵌入式 ,嵌入式Linux,Lynx,uCOS、Nucleus,以及国内的 , , 、 , Hopen、Delta OS等嵌入式操作系统。 等嵌入式操作系统。 、 等嵌入式操作系统 今天RTOS已经在全球形成了 个产业,根据美国 已经在全球形成了1个产业 根据美国EMF(电 今天 已经在全球形成了 个产业, ( 子市场分析)报告, 年全球RTOS市场产值达 亿美元, 市场产值达3.6亿美元 子市场分析)报告,1999年全球 年全球 市场产值达 亿美元, 而相关的整个嵌入式开发工具(包括仿真器、逻辑分析
仪、 而相关的整个嵌入式开发工具(包括仿真器、逻辑分析仪、软件 编译器和调试器)则高达9亿美元 亿美元。 编译器和调试器)则高达 亿美元。
6
IEEE定义 IEEE定义
根据IEEE(国际电气和电子工程师协会)的定义: (国际电气和电子工程师协会)的定义: 根据
嵌入式系统是“用于控制、 嵌入式系统是“用于控制、监视或者辅助操作 机器和设备的装置” 原文为devices used to 机器和设备的装置”(原文为 control, monitor, or assist the operation of equipment, machinery or plants)。 )。
可以看出此定义是从应用上考虑的, 可以看出此定义是从应用上考虑的,嵌入式系 统是软件和硬件的综合体, 统是软件和硬件的综合体,还可以涵盖机电等附属 装置。 装置。
7
一般定义
“以应用为中心、以计算机技术为基础、软件 以应用为中心、以计算机技术为基础、 为中心 硬件可裁剪、功能、可靠性、成本、体积、 硬件可裁剪、功能、可靠性、成本、体积、功耗严 格要求的专用计算机系统 计算机系统。 格要求的专用计算机系统。”
8
3、嵌入式系统的几个重要特征 、
(1)系统内核小 )
由于嵌入式系统一般是应用于小型电子装置的, 由于嵌入式系统一般是应用于小型电子装置的,系 统资源相对有限, 统资源相对有限,所以内核较之传统的操作系统要 小得多。 小得多。
比如ENEA公司的 公司的OSE分布式系统,内核只有 , 分布式系统, 比如 公司的 分布式系统 内核只有5K, 的内核则要大得多。 而Windows的内核则要大得多。 的内核则要大得多
9
(2)专用性强 嵌入式系统的个性化很强,其中的软件系统和硬件 嵌入式系统的个性化很强, 的结合非常紧密,一般要针对硬件进行系统的移植。 的结合非常紧密,一般要针对硬件进行系统的移植。 即使在同一品牌、 即使在同一品牌、同一系列的产品中也需要根据系 统硬件的变化和增减不断进行修改。 统硬件的变化和增减不断进行修改。 同时针对不同的任务, 同时针对不同的任务,往往需要对系统进行较大更 程序的编译下载要和系统相结合, 改,程序的编译下载要和系统相结合,这种修改和通用 软件的“升级”是完全不同的概念。 软件的“升级”是完全不同的概念。
10
(3)系统精简 嵌入式系统一般没有系统软件和应用软件的明显 嵌入式系统一般没有系统软件和应用软件的明显 区分, 不要求其功能设计及实现上过于复杂, 这样一 区分 , 不要求其功能设计及实现上过于复杂 , 方面利于控制系统成本,同时也利于实现系统安全。 方面利于控
制系统成本,同时也利于实现系统安全。
(4)高实时性OS 高实时性 这是嵌入式软件的基本要求, 这是嵌入式软件的基本要求,而且软件要求固态 嵌入式软件的基本要求 存储,以提高速度。 存储,以提高速度。软件代码要求高质量和高可靠性 实时性。 、实时性。
11
(5)嵌入式软件开发走向标准化 )
嵌入式系统的应用程序可以没有操作系统直接在 芯片上运行。 芯片上运行。
为了合理地调度多任务、利用系统资源、 为了合理地调度多任务、利用系统资源、系统函 数以及和专家库函数接口, 用户必须自行选配RTOS 数以及和专家库函数接口 , 用户必须自行选配 (Real-Time Operating System)开发平台,这样才 - )开发平台, 能保证程序执行的实时性、可靠性, 能保证程序执行的实时性、可靠性,并减少开发时间 保障软件质量。 ,保障软件质量。
12
(6)嵌入式系统开发需要开发工具和环境 )
由于其本身不具备自主开发能力,即使设计完成以后, 由于其本身不具备自主开发能力,即使设计完成以后,用户通常也是不能对其 中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。 中的程序功能进行修改,必须有一套开发工具和环境才能进行开发。 这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、 这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、 混合信号示波器等。 混合信号示波器等。 开发时往往有主机和目标机的概念,主机用于程序的开发, 开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的 执行机,开发时需要交替结合进行。 执行机,开发时需要交替结合进行。
13
嵌入式系统与PC之间的区别 嵌入式系统与 之间的区别
嵌入式系统一般是专用系统, 嵌入式系统一般是专用系统,而PC是通用计算平台 是通用计算平台 嵌入式系统的资源比PC少得多 嵌入式系统的资源比 少得多 嵌入式系统软件故障带来的后果比PC机大得多 嵌入式系统软件故障带来的后果比 机大得多 嵌入式系统一般采用实时操作系统 嵌入式系统大都有成本、 嵌入式系统大都有成本、功耗的要求 嵌入式系统得到多种微处理体系的支持 嵌入式系统需要专用的开发工具
14
典型嵌入式系统基本组成- 典型嵌入式系统基本组成-硬件
电源 模块 时钟
外围电路 微处理器
Flash
RAM
MPU
复位 ROM
外设
USB LCD Keyboard Other
15
典型嵌入式系统基本组成- 典型嵌入式系统基本组成-软件
应用程序 操作系
统 输入 处理器 存储器
16
软件 结构
输出 硬件 结构
嵌入式系统一般指非PC系统,它包括硬件和软件两部分。 嵌入式系统一般指非 系统,它包括硬件和软件两部分。 系统 硬件包括处理器/微处理器、存储器及外设器件和 / 端口 端口、 硬件包括处理器/微处理器、存储器及外设器件和I/O端口、图 形控制器等。 形控制器等。 软件部分包括操作系统软件(OS)(要求实时和多任务操作)和 )(要求实时和多任务操作 软件部分包括操作系统软件( )(要求实时和多任务操作) 应用程序编程。有时设计人员把这两种软件组合在一起。 应用程序编程。有时设计人员把这两种软件组合在一起。 应用程序控制着系统的运作和行为; 应用程序控制着系统的运作和行为;而操作系统控制着应用程序 编程与硬件的交互作用。 编程与硬件的交互作用。
17
嵌入式系统的核心是嵌入式微处理器。 嵌入式系统的核心是嵌入式微处理器。嵌入式微处理器一般就具 备以下4个特点 备以下 个特点 1)对实时多任务有很强的支持能力,能完成多任务并且有较短的 )对实时多任务有很强的支持能力, 中断响应时间, 中断响应时间,从而使内部的代码和实时内核心的执行时间减少 到最低限度。 到最低限度。 2)具有功能很强的存储区保护功能。这是由于嵌入式系统的软件 )具有功能很强的存储区保护功能。 结构已模块化, 结构已模块化,而为了避免在软件模块之间出现错误的交叉作用 需要设计强大的存储区保护功能,同时也有利于软件诊断。 ,需要设计强大的存储区保护功能,同时也有利于软件诊断。 3)可扩展的处理器结构,以能最迅速地开展出满足应用的最高性 )可扩展的处理器结构, 能的嵌入式微处理器。 能的嵌入式微处理器。 4)嵌入式微处理器必须功耗很低,尤其是用于便携式的无线及移动 )嵌入式微处理器必须功耗很低, 的计算和通信设备中靠电池供电的嵌入式系统更是如此, 的计算和通信设备中靠电池供电的嵌入式系统更是如此,如需要 功耗只有mW甚至 甚至μW级。 功耗只有 甚至 级
18
嵌入式处理器
嵌入式处理器是嵌入式系统的核心,是控制、 嵌入式处理器是嵌入式系统的核心,是控制、 辅助系统运行的硬件单元。 位单片机, 辅助系统运行的硬件单元。 4位、 8位单片机,16 位嵌入式CPU。 位、 32位、64位嵌入式 位 位嵌入式 。
实时操作系统
实时操作系统是嵌入式系统目前最主要的组成 部分。 部分。实时性需要调度一切可利用的资源完成实时 控制任务,着眼于提高计算机系统的使用效率,
控制任务,着眼于提高计算机系统的使用效率,满 足对时间的限制和要求。 足对时间的限制和要求。
19
系统响应时间( time) - 系统响应时间(System response time):
系统发出处理要求,到系统给出应答信号的时间。 系统发出处理要求,到系统给出应答信号的时间。
- 任务切换时间(Context-switching time): 任务切换时间(Contexttime)
任务之间切换而使用的时间。 任务之间切换而使用的时间。
中断延迟( latency) - 中断延迟(Interrupt latency):
计算机接收到中断信号到操作系统作出响应, 计算机接收到中断信号到操作系统作出响应,并完成切换转入中 断服务程序的时间。 断服务程序的时间。
20
二、硬件基础
冯·诺依曼体系结构和哈佛体系结构 诺依曼体系结构和哈佛体系结构 CISC与RICS 与 影响CPU性能的因素 性能的因素 影响 存储器系统 I/O接口 接口
21
冯·诺依曼体系结构模型 诺依曼体系结构模型
存储器
指令寄存器 控制器
程序 指令0 指令 指令1 指令 指令2 指令 指令3 指令 指令4 指令
数据通道 输入 中央处理器
输出
数据 数据0 数据 数据1 数据 数据2 数据
22
指令的执行周期T 指令的执行周期
1)取指令(Instruction Fetch):TF )取指令( : 2)指令译码(Instruction Decode): D )指令译码( ):T ): 3)执行指令(Instruction Execute): E )执行指令( ):T ): 4)存储(Storage): S )存储( ):T ): 每条指令的执行周期: 每条指令的执行周期:T= TF+TD+TE+TS
23
冯·诺依曼体系的特点 诺依曼体系的特点
1)数据与指令都存储在存储器中 )
2)被大多数计算机所采用 )
3)ARM7——冯诺依曼体系 ) 冯诺依曼体系
24
哈佛体系结构
地址 程序存储器 指令0 指令 指令1 指令 指令2 指令
指令寄存器 控制器
指令
地址 数据通道 输入 中央处理器 输出 数据
数据存储器 数据0 数据 数据1 数据 数据2 数据
25
哈佛体系结构的特点
1)程序存储器与数据存储器分开 ) 2)提供了较大的数存储器带宽 )
3)适合于数字信号处理 )
4)大多数DSP都是哈佛结构 )大多数 都是哈佛结构
5)ARM9是哈佛结构 ) 是哈佛结构
26
CISC和RISC 和
CISC:复杂指令集(Complex Instruction Set Computer) :复杂指令集( ) 具有大量的指令和寻址方式 ?8/2原则:80%的程序只使用 原则: 的程序只使用20%的指令 原则 的程序只使用 的指令 ?大多数程序只使用少量的指令就能够运行。 大多数程序只使用少量的指令就能够运行。 大多数程序只
使用少量的指令就能够运行
RISC:精简指令集(Reduced Instruction Set Computer) :精简指令集( ?在通道中只包含最有用的指令 在通道中只包含最有用的指令 ?确保数据通道快速执行每一条指令 确保数据通道快速执行每一条指令 ?使CPU硬件结构设计变得更为简单 使 硬件结构设计变得更为简单
27
CISC与RISC的数据通道 与 的数据通道
开始
IF
ID
ALU
MEM
微操作通道
REG
退出
开始
IF
ID
REG
ALU
MEM
退出
单通数据通道
28
影响CPU性能的因素:流水线、超标量和缓存 性能的因素:流水线、 影响 性能的因素
流水线技术: 流水线技术:几个指令可以并行执行 提高了CPU的运行效率 的运行效率 提高了 内部信息流要求通畅流动
Add Sub Cmp 时间
取指
译码 取指
执行add 译码 取指 执行sub 译码 执行cmp
29
超标量执行
超标量执行:超标量 超标量执行:超标量CPU采用多条流水线结构 采用多条流水线结构
指令CACHE
预取
预取
流 水 线 1
译码1 译码2 执行1 执行2
流 水 线 2
译码1 译码2 执行1 执行2
数据
30
高速缓存( 高速缓存(CACHE) )
1、为什么采用高速缓存 、 微处理器的时钟频率比内存速度提高快得多, 微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高 内存的平均性能。 内存的平均性能。 2、高速缓存的工作原理 、 高速缓存是一种小型、快速的存储器, 高速缓存是一种小型、快速的存储器,它保存部分主存内容的 拷贝。 拷贝。
高 速 缓 存 控 制 器
数据
CACHE 主存
CPU
地址 数据
31
总线和总线桥
CPU
低速设备
高速总线
桥
低速总线
存储器
高速设备
数据
高速设备
32
存储器系统
RAM:随机存取存储器, SRAM:静态随机存储器, :随机存取存储器, :静态随机存储器, DRAM:动态随机存储器 : 1)SRAM比DRAM快 ) 比 快 2)SRAM比DRAM耗电多 ) 比 耗电多 3)DRAM存储密度比 ) 存储密度比SRAM高得多 存储密度比 高得多 4)DRM需要周期性刷新 ) 需要周期性刷新 ROM:只读存储器 : FLASH:闪存 :
33
SRAM和DRAM 和
1)SRAM ) 2)DRAM )
CS CS R/W Addr Data R/W RAS CAS Addr Data
34
输入输出接口
1)I/O ) 2)A/D、D/A ) 、 3)键盘 ) 4)LCD ) 5)存储器接口 ) 6)设备接口 )
35
三、嵌入式操作系统
操作系统的分类 嵌入式实时操作系统 多任务,任务优先级, 多任务,任务优先级,调度 前台与后台 非占先式与占先式、可重入型函数 非占先
式与占先式、
36
3.1 操作系统的分类
(1)顺序执行系统:系统内只含有一个程序,独占 )顺序执行系统:系统内只含有一个程序,独占CPU的运行时间 的运行时间 按语句顺序执行该程序,直至执行完毕, ,按语句顺序执行该程序,直至执行完毕,另一程序才能启动运 操作系统。 行。如DOS操作系统。 操作系统
2)分时操作系统:系统内同时可以有多个程序运行, CPU的时 (2)分时操作系统:系统内同时可以有多个程序运行,把CPU的时 间分按顺序分成若干片,每个时间片内执行不同的程序。 间分按顺序分成若干片,每个时间片内执行不同的程序。如UNIX
(3)实时操作系统:系统内有多个程序运行,每个程序有不同的优 )实时操作系统:系统内有多个程序运行, 先级,只有最高优先级的任务才能占有CPU的控制权。 的控制权。 先级,只有最高优先级的任务才能占有 的控制权
37
按实时性分类
● 具有强实时特点的嵌入式操作系统
● 具有弱实特点的嵌入式操作系统
● 没有实时特点的嵌入式操作系统
38
1.强实时系统,其系统响应时间在毫秒或微秒 强实时系统, 强实时系统 数控机床) 级(数控机床); 2.一航实时系统,其系统响应时间在毫秒-几 一航实时系统,其系统响应时间在毫秒- 一航实时系统 秒的数量级上, 秒的数量级上,其实时性的要求比强实时系统要差 一些(电子菜谱的查询)。 一些(电子菜谱的查询)。 3.弱实时系统,其系统响应时间约为数十秒或 弱实时系统, 弱实时系统 更长(工程机械) 更长(工程机械)。
39
按软件结构分类
循环轮询系统:( (1).循环轮询系统:( ) 循环轮询系统:(Polling Loop) ) 最简单的软件结构是循环轮询, 最简单的软件结构是循环轮询,程序依次检查系统的每一个 输入条件,一旦条件成立就进行相应的处理。 输入条件,一旦条件成立就进行相应的处理。 Initialize() While(true){ if(condition_1) action_1(); if(condition_2) action_2(); …… if(condition_n) acition_n(); }
40
事件驱动系统:( (2).事件驱动系统:( ) 事件驱动系统:(Event-Driven system) )
事件驱动系统是能对外部事件直接响应的系统。 事件驱动系统是能对外部事件直接响应的系统。它包括前后 实时多任务、多处理器等,是嵌入式实时系统的主要形式。 台、实时多任务、多处理器等,是嵌入式实时系统的主要形式。 应用程序是一个无限的循环,循环中调用相应的函数完成相 应用程序是一个无限的循环, 应的操作,这部分可以看成后台行为( )。中断服 应的操作,这
部分可以看成后台行为(background)。中断服 )。 务程序处理异步事件,这部分可以看成前台行为( 务程序处理异步事件,这部分可以看成前台行为(foreground)。 。 后台也可以叫做任务级,前台也叫中断级。 后台也可以叫做任务级,前台也叫中断级。
例如,很多基于微处理器的产品采用前后台系统设计, 例如,很多基于微处理器的产品采用前后台系统设计,如微 波炉、电话机、玩具等。从省电的角度出发, 波炉、电话机、玩具等。从省电的角度出发,平时微处理器处在 停机状态,所有的事都靠中断服务来完成。 停机状态,所有的事都靠中断服务来完成。
41
前后台系统(后台循环、前台中断) 前后台系统(后台循环、前台中断)
后台
前台
ISR
时间
ISR
ISR
42
3.2 嵌入式实时操作系统
实时操作系统的特点: 实时操作系统的特点: 1、多任务 、
休眠、就绪、运行、挂起、 休眠、就绪、运行、挂起、被中断 任务 n …… 任务 控制 块1 寄存器 CPU CPU寄存器 寄存器
43
任务 1
任务 2
任务 控制 块2
任务 控制 块n
一个任务,也称作一个线程, 一个任务,也称作一个线程,是一个简单的运行 程序。每个任务都是整个应用的某一部分, 程序。每个任务都是整个应用的某一部分,每个任务被 赋予一定的优先级, 有它自己的一套CPU寄存器和自 赋予一定的优先级, 有它自己的一套 寄存器和自 己的栈空间。 己的栈空间。 多任务运行的实现实际上是靠CPU(中央处理单 ( 多任务运行的实现实际上是靠 在许多任务之间转换、调度。 元)在许多任务之间转换、调度。 CPU只有一个,轮番服务于一系列任务中的某一 只有一个, 只有一个 多任务运行使CPU的利用率得到最大的发挥,并使 的利用率得到最大的发挥, 个。多任务运行使 的利用率得到最大的发挥 应用程序模块化。 应用程序模块化。 在实际应用中,多任务的最大特点是, 在实际应用中,多任务的最大特点是,开发人员 可以将很复杂的应用程序层次化-综合实验(时钟、 可以将很复杂的应用程序层次化-综合实验(时钟、位 图、USB、KEY)。 、 )。
44
2、任务的事件驱动 、
事件驱动 实时任务 任务 非实时任务 时间驱动
内部事件:运算结果、设备请求等 内部事件:运算结果、 外部事件:开关量输入等 外部事件: 绝对时间驱动 相对时间驱动
45
3、中断与中断优先级 、
中断控 制器1 外部事件 中断控 制器2
CPU
46
4、同步与异步 、
一系列时间相关事件称为同步事件, 一系列时间相关事
件称为同步事件,驱动的任务为同步任务 随机发生的事件称为异步事件,驱动的任务为异步任务, 随机发生的事件称为异步事件,驱动的任务为异步任务,如中断
47
5、资源与临界资源 、 程序进行时可使用的软硬件环境称为资源, 个以上任务可同 程序进行时可使用的软硬件环境称为资源,2个以上任务可同 时访问的共享资源称为临界资源。 时访问的共享资源称为临界资源。 任何任务所占用的实体都可称为资源。 任何任务所占用的实体都可称为资源。资源可以是输入输出设备 例如打印机、键盘、显示器,资源也可以是一个变量、 ,例如打印机、键盘、显示器,资源也可以是一个变量、一个结 构或一个数组等。 构或一个数组等。
任 务 1
任 务 2 共享内存
任 务 N
48
6、容错与安全 、 容错:当系统软、硬件发生故障时, 容错:当系统软、硬件发生故障时,系统仍能正常运 完成预定的任务或某些重要的不允许间断的任务。 转,完成预定的任务或某些重要的不允许间断的任务。包 括系统自论断、自恢复、自动切换等功能。 括系统自论断、自恢复、自动切换等功能。 安全性:是指系统对自身文件和用户文件的存取合法 安全性: 性的控制。如口令、加密。 性的控制。如口令、加密。
49
实时系统的评价指标
实时系统是面向具体应用, 实时系统是面向具体应用,对外来事件在限定时间内能做 面向具体应用 出反应的系统。限定时间的范围很广可以从微秒级 如信号处理) 从微秒级( 出反应的系统。限定时间的范围很广可以从微秒级(如信号处理) 到分级(如联机查询系统)。 到分级(如联机查询系统)。 在实时系统中主要有三个指标来衡量系统的实时性, 在实时系统中主要有三个指标来衡量系统的实时性,即响 应时间( )、生存时间 )、吞吐 应时间(Response Time)、生存时间(Survival Time)、吞吐 )、生存时间( )、 量(Throughput)。 )。 响应时间(Response Time):是计算机识别一个外部 ):是计算机识别一个外部 响应时间( ): 事件到作出响应的时间,在控制应用中它是最重要的指标, 事件到作出响应的时间,在控制应用中它是最重要的指标,如果事 件不能及时的处理,系统可能就会崩溃。 件不能及时的处理,系统可能就会崩溃。 生存时间( ):是数据有效等待时间 生存时间(Survival Time):是数据有效等待时间,在 ):是数据有效等待时间, 这段时间里数据是有效的。 这段时间里数据是有效的。 吞吐量( ):是在一给定时间内 吞吐量(Throughput):是在一给定时间内(秒),系 )
:是在一给定时间内( ),系 统可以处理的事件总数。 统可以处理的事件总数。例如通讯控制器用每秒钟处理的字符数来 表示吞吐量,吞吐量是平均响应时间的倒数。 表示吞吐量,吞吐量是平均响应时间的倒数。
50
系统内核
多任务系统中,内核负责管理各个任务, 多任务系统中,内核负责管理各个任务,或者说为每个任 务分配CPU时间,并且负责任务之间的通信。 时间, 务分配 时间 并且负责任务之间的通信。
内核提供的基本服务是任务切换。 内核提供的基本服务是任务切换。内核本身也增加了应用 程序的额外负荷,代码空间增加ROM用量,内核本身的数据结 用量, 程序的额外负荷,代码空间增加 用量 构增加了RAM的用量。内核本身对 的用量。 的占用时间一般在2到 构增加了 的用量 内核本身对CPU的占用时间一般在 到5 的占用时间一般在 个百分点之间。 个百分点之间。
51
调度( 调度(dispatcher) )
这是操作系统的主要职责之一, 这是操作系统的主要职责之一,它决定该轮到哪个任 务运行了。 务运行了。 往往调度是基于优先级的,根据其重要不同被 往往调度是基于优先级的, 赋予任务不同的优先级。 赋予任务不同的优先级。 CPU总是让处在就绪态 总是让处在就绪态 的优先级最高的任务先运行。 的优先级最高的任务先运行。 何时让高优先级任务掌握CPU的使用权,有两 的使用权, 何时让高优先级任务掌握 的使用权 种不同的情况,这要看用的是什么类型的内核, 种不同的情况,这要看用的是什么类型的内核,是 非占先式的还是占先式的内核 的内核。 非占先式的还是占先式的内核。
52
任务优先级(priority) 任务优先级(priority)
每个任务都有其优先级( ),静态 每个任务都有其优先级(priority),静态 ), 优先级和动态优先级。 优先级和动态优先级。 应用程序执行过程中诸任务优先级不变, 应用程序执行过程中诸任务优先级不变, 则称之为静态优先级。在静态优先级系统中, 则称之为静态优先级。在静态优先级系统中, 诸任务以及它们的时间约束在程序编译时是已 知的。 知的。 应用程序执行过程中, 应用程序执行过程中,如果任务的优先级 是可变的,则称之为动态优先级. 是可变的,则称之为动态优先级
53
非占先式与占先式
非占先式( 非占先式(non-preemptive) ) 非占先式调度法也称作合作型多任务( 非占先式调度法也称作合作型多任务(cooperative multitasking),各个任务彼此合作共享一个 ),各个任务彼此合作共享一个 ),各个任务彼此合作共享一个CPU。 。 中
断服务可以使一个高优先级的任务由挂起状态变为就绪 状态。 状态。但中断服务以后控制权还是回到原来被中断了的那个任务 直到改任务主动放弃CPU的使用权时,那个高优先级的任务才 的使用权时, ,直到改任务主动放弃 的使用权时 能获得CPU的使用权。 的使用权。 能获得 的使用权 非占先式内核的一个特点是几乎不需要使用信号量保护共 非占先式内核的一个特点是几乎不需要使用信号量保护共 一个特点 享数据。运行着的任务占有CPU,而不必担心被别的任务抢占。 享数据。运行着的任务占有 ,而不必担心被别的任务抢占。 非占先式内核的最大缺陷在于其响应高优先级的任务慢, 最大缺陷在于其响应高优先级的任务慢 非占先式内核的最大缺陷在于其响应高优先级的任务慢, 任务已经进入就绪态,但还不能运行,也许要等很时间, 任务已经进入就绪态,但还不能运行,也许要等很时间,直到当 前运行着的任务释放CPU。内核的任务级响应时间是不确定的, 前运行着的任务释放 。内核的任务级响应时间是不确定的, 不知道什么时候最高优先级的任务才能拿到CPU的控制权,完全 的控制权, 不知道什么时候最高优先级的任务才能拿到 的控制权 取决于应用程序什么时候释放CPU。 取决于应用程序什么时候释放 。
54
非占先式(Non-Preemptive) 非占先式
低优先级任务 (1) ) (2) )
ISR
(4) ) (5) ) (6) )
(3) ) TIME 中断服务程序使 高优先级任务就绪 高优先级任务 (7) )
低优先级任务释放 CPU使用权 使用权
55
占先式( 占先式(preemptive) )
当系统响应时间很重要时,要使用占先式( 当系统响应时间很重要时,要使用占先式( preemptive)内核。最高优先级的任务一旦就绪,总 )内核。最高优先级的任务一旦就绪, 能得到CPU的控制权。 的控制权。 能得到 的控制权 当一个运行着的任务使一个比它优先级高的任务 进入了就绪态,当前任务的CPU使用权就被剥夺了, 使用权就被剥夺了, 进入了就绪态,当前任务的 使用权就被剥夺了 或者说被挂起了, 或者说被挂起了,那个高优先级的任务立刻得到了 CPU的控制权。 的控制权。 的控制权 使用占先式内核时, 使用占先式内核时,应用程序不应直接使用不可 重入型函数。如果调入可重入型函数时,低优先级的 重入型函数。如果调入可重入型函数时, 任务CPU的使用权被高优先级任务剥夺,不可重入型 的使用权被高优先级任务剥夺, 任务 的使用权被高优先级任务剥夺 函数中的数据有可能被破坏。 函数中的数据有可能被破坏。
56
占先式(Pree
mptive) 占先式
中断服务程序使 高优先级任务就绪
低优先级任务 (1) ) (2) )
ISR
(5) )
(3) )
高优先级任务 TIME (4) )
(6) )
高优先级任务得到 CPU使用权 使用权
57
可重入型函数
可以被一个以上的任务调用,而不必担心数据的破坏。 可以被一个以上的任务调用,而不必担心数据的破坏。 可重入型函数任何时候都可以被中断, 可重入型函数任何时候都可以被中断,一段时间以后又可 以运行,而相应数据不会丢失。 以运行,而相应数据不会丢失。可重入型函数或者只使用 局部变量,即变量保存在CPU寄存器中或堆栈中。 寄存器中或堆栈中。 局部变量,即变量保存在 寄存器中或堆栈中 一个不可重入型函数的例子 int Temp; Void swap (int *x,int*y) { Temp=*x; *X=*Y; *y=Temp; }
58
一个可重入型函数的例子 Void swap (int *x,int*y) { int Temp; Temp=*x; *X=*Y; *y=Temp; }
59
代码的临界区
代码的临界区也称为临界区, 代码的临界区也称为临界区,指处理时不可分割 的代码。一旦这部分代码开始执行, 的代码。一旦这部分代码开始执行,则不允许任何中 断打入。 断打入。 在进入临界区之前要关中断, 在进入临界区之前要关中断,而临界区代码执行 完以后要立即开中断(在任务切换时,地址、指令、 完以后要立即开中断(在任务切换时,地址、指令、 数据等寄存器堆栈保护) 数据等寄存器堆栈保护)。
60
6、嵌入式技术的发展趋势 、
宏观方面发展趋势: 宏观方面发展趋势: — 经济性(POS开发失败,几十万、几万、5千、5百) 经济性( 开发失败, 开发失败 几十万、几万、 千 百 计算机要很便宜,让更多的人能买得起; 计算机要很便宜,让更多的人能买得起; — 小型化(笔记本、PDA) 小型化(笔记本、 ) 人们携带方便; 人们携带方便; — 可靠性(汽车VCD,挑动问题) 可靠性(汽车 ,挑动问题) 能够在一般环境条件下或者是苛刻的环境条件下运行; 能够在一般环境条件下或者是苛刻的环境条件下运行; — 高速度(飞机刹车系统) 高速度(飞机刹车系统) 能够迅速地完成数据计算或数据传输; 能够迅速地完成数据计算或数据传输; — 智能性(知识推理、模糊查询、识别、感知运动) 智能性(知识推理、模糊查询、识别、感知运动) 使人们用起来更习惯,对人们更有使价值。 使人们用起来更习惯,对人们更有使价值。
61
芯片方面- 芯片方面-SOC
芯片技术能降低电子产品成本的速度, 芯片技术能降低电子产品成本的速度,就连当代 电子学革命之父, 年诺贝