嵌入式系统原理及应用:第四章 ucos-II嵌入式实时操作系统内核分析1_第1页
嵌入式系统原理及应用:第四章 ucos-II嵌入式实时操作系统内核分析1_第2页
嵌入式系统原理及应用:第四章 ucos-II嵌入式实时操作系统内核分析1_第3页
嵌入式系统原理及应用:第四章 ucos-II嵌入式实时操作系统内核分析1_第4页
嵌入式系统原理及应用:第四章 ucos-II嵌入式实时操作系统内核分析1_第5页
已阅读5页,还剩41页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、4C H A P T E Rc/os-II嵌入式实时操作系统内核分析1为什么要学习C/OS-II凡从事嵌入式系统开发工作的人,必须对嵌入式操作系统有足够的了解。对于初学者,从C/OS-II开始是个明智的选择。C/OS-II麻雀虽小,却五脏基本全(它是个微内核)。可以学习实时系统的一些编程技巧。可以把在学校中学到的操作系统抽象概念具体化。具有很强的实用性。学习数据结构应用的好例子。2如何学习C/OS-IIC/OS-II大部分源代码用c语言所写,少部分和具体硬件相关的,用汇编语言所写。必须熟悉c语言语法。数组函数结构指针预处理实践,实践,再实践!必须结合理论,阅读源代码并调试相关代码。3数据类型与

2、运算符(选讲-C语言复习)宏定义:用一个指定的标识符来代表一个字符串。 #define 标识符 字符串宏定义的基本思想:一次定义,多次使用。优点可以用简短的标识符来代替长的数据,减少需要输入的字符数;用易于理解的标识符来代替那些不太好记的具体的数据,便于程序的理解和维护;有利于程序的修改和升级,当这个数据需要修改时,只需改动宏定义之处即可。例如:#define PI 3.1415926 指定用标识符PI来代替“3.1415926”这个字符串,在编译预处理时,将程序中出现的所有PI都用“3.1415926”代替。4if ( myMoney 80.0 ) myShoes +; myMoney =

3、myMoney 80.0;#define COST_OF_SHOES 80.0if(myMoney COST_OF_SHOES) myShoes +; myMoney = myMoney COST_OF_SHOES;不用此法一次定义多次使用数据类型与运算符(选讲- C语言复习)5数据类型与运算符(选讲- C语言复习)将变量声明为常量有时希望在运行过程中,某些变量的值保存不变。以变量的形式来定义的一个量,且使用修饰符const来声明变量。例如:const int x = 1。算术运算整数的算术运算 最快带有硬件支持的浮点运算 较慢用软件来实现的浮点运算 非常慢, sin, log, sqrt,

4、etc快慢6数据类型与运算符(选讲- C语言复习)算术运算的结论:尽量使用整数(char、short、int和long)的加法和减法;如果没有硬件支持,尽量避免使用乘法;尽量避免使用除法;如果没有硬件支持,尽量避免使用浮点数;数学库函数使用得越少越好。7数据类型与运算符(选讲- C语言复习)位运算与操作: &或操作: |异或操作: 取反操作: 右移操作: 左移操作: 举例:a |= 0 x4b &= 0 x4 c &= (1 3)d = (1 = 2 / 把第2位设置为1 / 把第2位设置为0 / 把第3位设置为0 / 把第5位反转/ 把 e 除以48数据类型与运算符(选讲- C语言复习)in

5、t x, num = 99, count = 0;x = num;while(x) count +; x = x & (x 1);printf(result: %d, count);result: 4程序举例:9函数原型main ( ) 函数调用 函数定义函数的使用模式声明该函数定义一个函数使用该函数函数(选讲- C语言复习)10操作系统代码栈帧2栈帧1全局变量内存分布状况全局变量区域静态分配栈自动分配堆动态分配函数(选讲- C语言复习)11int z;void main( ) int x, y; x = 1; y = 2; z = x + y;main( ) z = 0全局变量区域栈帧(ma

6、in)x = y =程序123主函数的执行过程(选讲- C语言复习)程序代码在内存中的分布12函数调用过程(选讲- C语言复习)控制流 程序当前执行位置的流向;数据流 函数调用发生及结束时,数据在函数之间流转的过程。当一个函数被调用时:在内存的栈空间当中为其分配一个栈帧,用来存放该函数的形参和局部变量;把实参变量的值复制到相应的形参变量;控制转移到该函数的起始位置;该函数开始执行;控制流和返回值返回到函数调用点。13void main( ) double x, y, z; y = 6.0; x = Area( y / 3.0 ); . z = 3.4 * Area(7.88); ./* 给定半

7、径,计算一个圆的面积 */double Area(double r) return(3.14 * r * r);控制流的变化函数调用过程(选讲- C语言复习)14int Times2(int value);main ( ) int number; printf(“请输入一个整数:”); scanf(“%d”, &number); printf(“该数的两倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的栈帧number3函数调用过程(选讲- C语言复习)栈帧的分配15int Times2(int value)

8、;main ( ) int number; printf(“请输入一个整数:”); scanf(“%d”, &number); printf(“该数的两倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的栈帧number3Times2valueTimes2也得到一个栈帧,它的参数看成局部变量函数调用过程(选讲- C语言复习)栈帧的分配16int Times2(int value);main ( ) int number; printf(“请输入一个整数:”); scanf(“%d”, &number); pri

9、ntf(“该数的两倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的栈帧number3Times2value函数调用过程(选讲- C语言复习)栈帧的分配3“值传递”, 把实参的值传给形参。17int Times2(int value);main ( ) int number; printf(“请输入一个整数:”); scanf(“%d”, &number); printf(“该数的两倍是:%d”, Times2(number);int Times2(int value) return(2 * value);m

10、ain的栈帧number3函数调用过程(选讲- C语言复习)栈帧的分配Times2value3把Times2的栈帧叠在主函数的栈帧之上,表示在执行Times2函数时,主函数中的变量是不可见的。18int Times2(int value);main ( ) int number; printf(“请输入一个整数:”); scanf(“%d”, &number); printf(“该数的两倍是:%d”, Times2(number);int Times2(int value) return(2 * value);main的栈帧number3函数调用过程(选讲- C语言复习)栈帧的分配Times2

11、value36Times2函数的返回值被放在函数的调用位置上,然后,分配给Times2函数的堆栈区域被释放。19/* 全局变量,固定地址,其他源文件可见 */int global_static;/* 静态全局变量,固定地址,但只在本文件中可见 */static int file_static;/* 函数参数:位于栈帧当中,动态创建,动态释放 */int foo ( int auto_param ) /*静态局部变量,固定地址,只在本函数中可见 */ static int func_static; /* 普通局部变量,位于栈帧当中,只在本函数可见 */ int auto_i, auto_a10;

12、 /* 动态申请的内存空间,位于堆当中 */ double *auto_d = malloc(sizeof(double)*5); return auto_i;变量的存储与作用域(选讲- C语言复习)20可重入函数(选讲- C语言复习)可以被一个以上的任务调用,而不必担心数据的破坏可重入型函数任何时候都可被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数只使用局部变量,即变量保存在CPU寄存器或栈中。可重入函数举例:void swap(int *x, int *y) int temp; temp = *x; *x = *y; *y = temp; 21不可重入函数(选讲- C语言

13、复习)不可重入函数举例:int temp;void swap ( int *x, int *y ) temp = *x; *x = *y; *y = temp; 22本章提要1324任务的要素计算机操作系统的基本概念操作系统中常用的数据结构并发操作系统的概念235C/OS-II的任务管理(任务调度)6C/OS-II的中断和时钟7C/OS-II的任务的同步与通信8C/OS-II的移值1计算机操作系统的基本概念24操作系统是一种为应用程序提供服务的系统软件,是一个完整计算机系统的有机组成部分。从层次来看,操作系统位于计算机硬件之上,应用软件之下。所以也把它叫做应用软件的运行平台。什么是计算机操作系

14、统(Operating System,OS)25它在计算机应用程序与计算机硬件系统之间,屏蔽了计算机硬件工作的一些细节,并对系统中的资源进行有效的管理。通过提供函数(应用程序接口(API),从而使应用程序的设计人员得以在一个友好的平台上进行应用程序的设计和开发,大大地提高了应用程序的开发效率。 计算机操作系统的作用从用户的角度来看,它就是一大堆函数(API和系统函数),用户可以调用(普通调用或系统调用)它们来对系统资源进行操作。 API(Application Programming Intereface)计算机硬件用汇编语言编写的硬件抽象层高级语言的接口应用软件操作系统26操作系统计算机操作

15、系统的功能处理器的管理存储管理网络和通信的管理I/O设备管理文件管理任务管理 总之,需要一大堆表27本章提要2操作系统中常用的数据结构28OS中常用的数据结构(数组)数组同一数据类型数据的集合;占用连续内存空间;其中的所有元素名称都相同,但每个元素都有一个编号;元素名去掉编号(下标),得到的是数组名,数组名是个指针。int a10a0a1a2a3a9aa+1使用上的特点:分类存放。检索速度快且恒定;缺点:占用连续空间大。a+2a+3a+9应用:记录同类事物的表29OS中常用的数据结构(位图)位图是数组的一种特殊应用a10 (可以记录80个事物的状态)a0a1a2a3a9aa+1a+2a+3a+

16、9应用:登记表1/0D7 D6 D5 D4 D3 D2 D1 D030不同数据类型数据的集合;占用连续内存空间;struct Student int age; char *name; char sex;使用上的特点:不分类存放,但用来描述同一事物;检索速度快且恒定;应用:通讯录中的一条记录、工具箱等等OS中常用的数据结构(结构)31next next 两个元素的链表struct Student Student *next int age; char*name; char sex;同数据类型数据的集合。不占用连续内存空间。使用上的特点:分类存放,但空间上不连续(不需要大量的连续存储空间);检索速

17、度慢,且耗费的时间不固定;应用:存放大量的较大的表,类似档案柜OS中常用的数据结构(链表)32按照先进先出的规则组织的数据结构,可以用数组,也可以用链表来实现。主要用于对象的排队OS中常用的数据结构(队列)33按照先进后出的规则组织的数据结构,主要用数组来实现。主要用于程序模块的嵌套运行。OS中常用的数据结构(堆栈)34本章提要3并发操作系统的概念35什么是多任务系统简单地说,就是能用一个处理器并发(注意,不是同时! )地运行多个程序的计算机管理系统。并发:由同一个处理器轮换地运行多个程序。或者说是由多个程序轮流占用处理器这个资源。且在占用这个资源期间,并不一定能够把程序运行完毕。并发过程示意

18、图处理器如何进行程序的切换?36程序的切换(两句话)处理器对PC最忠诚,PC让它干啥,它就干啥。PC是个指路器,它指向哪儿,处理器就去哪儿。由此,哪个程序占有了PC,哪个程序就占有了处理器。 = PC深刻地理解PC是理解系统进行程序切换动作的关键。37所谓切换就是:PC 目标地址如何操作PC指令:不同的计算机类型的指令是不同的。数据传送指令子程序返回指令(由堆栈弹出)中断服务程序返回指令(由堆栈弹出)38小结系统是通过把待运行程序的地址赋予程序计数器PC来实现程序的切换的。39任务代码任务堆栈内存处理器PCSP任务运行时与处理器之间的关系处理器通过两个指针寄存器(PC和SP)来与任务代码和任务

19、堆栈建立联系并运行它寄存器组程序运行环境运行环境包括了两部分:处理器中的运行环境和内存中的运行环境40任务代码任务堆栈内存处理器PCSP多任务时的问题任务代码任务堆栈内存任务代码任务堆栈内存?当有多个任务时,处理器中的运行环境应该怎么办?寄存器组程序运行环境41程序 虚拟处理器PCSP 虚拟处理器PCSP 虚拟处理器PCSP 虚拟处理器PCSP多任务时任务与处理器之间关系的处理程序在内存中为每个任务创建一个虚拟的处理器(处理器部分的运行环境由操作系统的调度器按某种规则来进行这两个复制工作复制当需要运行某个任务时就把该任务的虚拟处理器复制到实际处理器中复制当需要中止当前任务时,则把任务对应的虚拟处理器复制到内存复制再把另一个需要运行的任务的虚拟处理器复制到实际处理器中寄存器组寄存器组也就是说,任务的切换是任务运行环境的切换。42虚拟处理器虚拟处理器应该存储的主要信息:1。程序的断点地址(PC)2。任务堆栈指针(SP)3。程序状态字寄存器(PSW)4。通用寄存器内容5。函数调用信息(已存在于堆栈)另外再用一个数据结构保存任务堆栈指针(SP),这个数据结构叫做任务控制块,它除了保存任务堆栈指针之外还要负责保存任务其他信息。这些内容通常保存在任务堆栈中,这些内容也常叫做任务的上下文。任务控制块是由

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论