嵌入式实时操作系统复习.doc_第1页
嵌入式实时操作系统复习.doc_第2页
嵌入式实时操作系统复习.doc_第3页
嵌入式实时操作系统复习.doc_第4页
嵌入式实时操作系统复习.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

操作系统的基本功能:1、任务管理,2、内存管理,3、文件管理,4、CPU管理 5、I/O口设备管理。 操作系统基本特征:1、多任务操作系统,2、多级中断机制,3、优先级调度机制。任务的定义:程序的动态表现,在操作系统中体现为线程,是程序的一次执行过程。任务的状态有:1、睡眠态,2、就绪态,3、运行态,4、阻塞态,5、挂起态。调度算法:根据系统资源的资源分配策略所规定的资源分配算法。有“短作业优先算法”“轮转法”事件:实时操作系统运行过程中发生的重要事件事件处理对象: 1、信号量,2、互斥信号量,3、事件标志组,4 、邮箱,5、消息队列。信号量定义:资源是具体的显示东西,把它数字化后,操作系统就便于管理这些资源。信号量的用法:1、建立,2、请求,3、释放。互斥信号量: 是一种特殊的信号量,该信号不仅是只用于互斥资源的访问,还在于信号量管理需要解决的优先级反转问题。互斥信号量管理: 取值0或1,只能有一个任务访问的独占资源,应采用信号来管理,为了保证系统的定时性拒绝优先级反转,对互斥信号量的管理,采用优先级继承机制。时钟: 是一种特定的周期性中断,起“心脏”作用。时钟节拍是周期性中断,对应的中断服务程序成为时钟滴答服务。中断:在任务的执行过程中,当出现异常情况或特殊请求时,停止任务的执行,转而对这些异常或特殊进行处理,处理结束后返回当前任务的中断处。Uc/os内存管理方法:Uc/os采用内存控制块管理内存,内存控制块记录了“内存分区地址,分区内存块的大小和数量,空闲块数量信息”。 内存管理含有: “内存分区的创建,分配,释放,使用和等待系统调用时间标志节点,.”事件标志组管理的主要数据结构: 包括“事件标志组,(XX实体,XX列表,XX节点链表)。”用户调用两个函数创建任务,不允许用户进行修改,被称为系统服务。用户的程序以函数的形式由用户编写,为用户函数。和操作系统的服务划分了界限。Uc/os采用抢占式任务调度算法,所有信息保存在TCB中。任务就绪组是: 为了查找高级优先级的任务与正在运行任务的优先级进行比较,以确定是否进行切换。事件控制块(ECB):是核心的数据结构,被频繁访问,定义出现在操作系统的头文件ucos.h中承载了任务的相关信息。Typedef struct os event INT8UOSEventType;/*事件控制块的类型*/ Void*OSEventPtr;/*指向下一个ECB或消息队列的指针*/ INT16UOSEventCnt; /*信号量计数值,对除信号量意外其他事件无效*/ OS PRIOOSEventGrp;/*事件等待组*/ OS PRIOOSEventGblOS EVENT TBL SIZE;/*等待事件的任务表*/ INT8U *OSEventName; /*事件名称*/OS EVENT;移植步骤:1、使用开发软件MDK4.70,为uc/os操作系统建立一个目录,将系统的代码复制到该目录下,要有一个子目录。 2、在该目录下创建工程。 3、建立主程序main.c。 4、对os_cpu.h说明,根据硬件修改os_cpu.h。 5、修改os_cpu.c。 6、编译,下载,运行信号量函数列表:NameDescriptionOsSemCreat创建一个信号量OsSemSet设置信号量值OsSemDel删除一个信号量OsSemPend等待一个信号量OsSemAccept无等待请求信号OsSemPendAbort放弃等待信号量OsSemPost发出一个信号量OsSemQuery查询一个信号量 内存管理函数:NameDescriptionOS MemInit创建一个内存分区OsMemCreate、OsSemCreat分配一个内存块,创建一个信号量OsMemGet释放一个内存块OsMemPut,OsSemPend等待一个信号量,OsMemQuery,OsSemQuery查询一个内存分区状态,一个信号量OsMemNameSet设定一个内存分区名称OsMemNameGet获取一个内存分区名称编程题例子一、#include sys.h#include usart.h#include delay.h#include led.h #include includes.h#define START_TASK_PRIO 10 /设置任务优先级,开始任务的优先级设置为最低#define START_STK_SIZE 64/设置任务堆栈大小OS_STK START_TASK_STKSTART_STK_SIZE;/任务堆栈void start_task(void *pdata);/任务函数 #define LED0_TASK_PRIO 7 /设置任务优先级#define LED0_STK_SIZE 64/设置任务堆栈大小OS_STK LED0_TASK_STKLED0_STK_SIZE;/任务堆栈void led0_task(void *pdata);/LED0任务#define LED1_TASK_PRIO 6 /设置任务优先级#define LED1_STK_SIZE 64/设置任务堆栈大小OS_STK LED1_TASK_STKLED1_STK_SIZE;/任务堆栈void led1_task(void *pdata);/LED1任务int main(void) Stm32_Clock_Init(9); /系统时钟设置delay_init(72); /延时初始化LED_Init(); /初始化与LED连接的硬件接口OSInit(); OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STKSTART_STK_SIZE-1,START_TASK_PRIO );/创建起始任务OSStart(); /开始任务void start_task(void *pdata) OS_CPU_SR cpu_sr=0;pdata = pdata; OS_ENTER_CRITICAL();/进入临界区(无法被中断打断) OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STKLED0_STK_SIZE-1,LED0_TASK_PRIO); OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STKLED1_STK_SIZE-1,LED1_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO);/挂起起始任务.OS_EXIT_CRITICAL();/退出临界区(可以被中断打断)void led0_task(void *pdata)/LED0任务 while(1)LED0=0;delay_ms(80);LED0=1;delay_ms(920);void led1_task(void *pdata)/LED1任务 while(1)LED1=0;delay_ms(300);LED1=1;delay_ms(300);二、#include sys.h#include usart.h#include delay.h#include led.h #include includes.hOS_EVENT *myMBox;#define START_TASK_PRIO 10 /设置任务优先级,开始任务的优先级设置为最低#define START_STK_SIZE 64/设置任务堆栈大小OS_STK START_TASK_STKSTART_STK_SIZE;/任务堆栈void start_task(void *pdata);/任务函数 #define MBOX_SEN_PRIO 6 /设置任务优先级#define MBOX_SEN_STK_SIZE 64/设置任务堆栈大小OS_STK MBOX_SEN_STKMBOX_SEN_STK_SIZE;/任务堆栈void TaskMessageSen(void *pParam);/邮箱发送任务#define MBOX_REC_PRIO 7 /设置任务优先级#define MBOX_REC_STK_SIZE 64/设置任务堆栈大小OS_STK MBOX_REC_STKMBOX_REC_STK_SIZE ;/任务堆栈void TaskMessageRec(void *pParam);/邮箱接收任务int main(void) Stm32_Clock_Init(9); /系统时钟设置delay_init(72); /延时初始化 uart_init(72,9600);OSInit(); OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STKSTART_STK_SIZE-1,START_TASK_PRIO );/创建起始任务OSStart(); /开始任务void start_task(void *pdata) OS_CPU_SR cpu_sr=0;pdata = pdata; OS_ENTER_CRITICAL();/进入临界区(无法被中断打断) OSTaskCreate(TaskMessageSen,(void *)0,(OS_STK*)&MBOX_SEN_STKMBOX_SEN_STK_SIZE-1,MBOX_SEN_PRIO); OSTaskCreate(TaskMessageRec,(void *)0,(OS_STK*)&MBOX_REC_STKMBOX_REC_STK_SIZE-1,MBOX_REC_PRIO); OSTaskSuspend(START_TASK_PRIO);/挂起起始任务.OS_EXIT_CRITICAL();/退出临界区(可以被中断打断)void TaskMessageSen(void *pParam)INT32U scount;scount=0; myMBox=OSMboxCreate(&scount);if(myMBox=(OS_EVENT *)0)printf(时间:%d,TaskMessageSen创建邮箱失败n,OSTimeGet();OSTaskDel(OS_PRIO_SELF);return;printf(时间:%d,TaskMessageSen创建邮箱成功n,OSTimeGet();while(1)OSTimeDly(100);scount+;printf(时间:%d,任务TaskMessageSen准备发消息,消息为%dn,OSTimeGet(),scount);OSMboxPost(myMBox,&scount);void TaskMessageRec(void *pParam)INT8U *perr;INT8U err;INT32U *prcount;perr=&err;err=OS_ERR_NONE;if(myMBox=(OS_EVENT *)0)printf(时间:%d,TaskMessageRec判断邮箱不存在!n,OSTi

温馨提示

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

评论

0/150

提交评论