嵌入式实时操作系统复习

上传人:鲁** 文档编号:513649047 上传时间:2023-12-23 格式:DOCX 页数:7 大小:16.85KB
返回 下载 相关 举报
嵌入式实时操作系统复习_第1页
第1页 / 共7页
嵌入式实时操作系统复习_第2页
第2页 / 共7页
嵌入式实时操作系统复习_第3页
第3页 / 共7页
嵌入式实时操作系统复习_第4页
第4页 / 共7页
嵌入式实时操作系统复习_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《嵌入式实时操作系统复习》由会员分享,可在线阅读,更多相关《嵌入式实时操作系统复习(7页珍藏版)》请在金锄头文库上搜索。

1、操作系统的基本功能:1、任务管理,2、内存管理,3、文件管理,4、CPU管理5、I/O 口设备管理。操作系统基本特征: 1、多任务操作系统,2、多级中断机制,3、优先级调度机制。任务的定义:程序的动态表现,在操作系统中体现为线程,是程序的一次执行过程。任务的状态有: 1、睡眠态,2、就绪态,3、运行态,4、阻塞态,5、挂起态。调度算法: 根据系统资源的资源分配策略所规定的资源分配算法。有“短作业优先算法”“轮转法” 事件:实时操作系统运行过程中发生的重要事件事件处理对象: 1、信号量, 2、互斥信号量, 3、事件标志组, 4 、邮箱, 5、消息队列。信号量定义: 资源是具体的显示东西,把它数字

2、化后,操作系统就便于管理这些资源。 信号量的用法:1、建立,2、请求,3、释放。互斥信号量: 是一种特殊的信号量,该信号不仅是只用于互斥资源的访问,还在于信号量管理需要 解决的优先级反转问题。互斥信号量管理: 取值0或1,只能有一个任务访问的独占资源,应采用信号来管理,为了保证系 统的定时性拒绝优先级反转,对互斥信号量的管理,采用优先级继承机制。时钟: 是一种特定的周期性中断,起“心脏”作用。时钟节拍是周期性中断,对应的中断服务程序成 为时钟滴答服务。中断:在任务的执行过程中,当出现异常情况或特殊请求时,停止任务的执行,转而对这些异常或特 殊进行处理,处理结束后返回当前任务的中断处。Uc/os

3、内存管理方法:Uc/os采用内存控制块管理内存,内存控制块记录了“内存分区地址,分区内存 块的大小和数量,空闲块数量信息”。内存管理含有: “内存分区的创建,分配,释放,使用和等待系统调用时间标志节点,.”事件标志组管理的主要数据结构:包括“事件标志组,(XX实体,XX列表,XX节点链表)。”用户调用两个函数创建任务,不允许用户进行修改,被称为系统服务。用户的程序以函数的形式由用户编写,为用户函数。和操作系统的服务划分了界限。Uc/os采用抢占式任务调度算法,所有信息保 存在TCB中。任务就绪组是: 为了查找高级优先级的任务与正在运行任务的优先级进行比较,以确定是否进行切换。事件控制块(ECB

4、):是核心的数据结构,被频繁访问,定义出现在操作系统的头文件ucos.h中承 载了任务的相关信息。Typedef struct os eventINT8U OSEventType;/*事件控制块的类型*/Void *OSEventPtr;/*指向下一个ecb或消息队列的指针*/INT16UOSEventCnt;/*信号量计数值,对除信号量意外其他事件无效*/OS PRIOOSEventGrp;/*事件等待组*/OS. PR1OOSEventGblOS.EVENT.TBL.SlZE;/*等待事件的任务表*/INT8U*OSEventName;/*事件名称*/OS_EVENT;移植步骤:1、使用开

5、发软件MDK4.70,为uc/os操作系统建立一个目录,将系统的代码复制到该目 录下,要有一个子目录。2、在该目录下创建工程。3、建立主程序main.c。4、对os_cpu.h说明,根据硬件修改os_cpu.h。5、修改 os_cpu.c。6、编译,下载,运行信号量函数列表:NameDescripti onOsSemCreat创建信号量OsSemSet设置信号量值OsSemDel删除一个信号量OsSemPend等待一个信号量OsSemAccept无等待请求信号OsSemPendAbort放弃等待信号量OsSemPost发出一个信号量OsSemQuery查询一个信号量内存管理函数:NameDes

6、cripti onOS 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_PRIO10

7、 /设置任务优先级,开始任务的优先级设置为最低#define START_STK_SIZE64/设置任务堆栈大小OS_STK START_TASK_STKSTART_STK_SIZE;/任务堆栈void start_task(void *pdata); 任务函数#define LED0_TASK_PRIO7 /设置任务优先级#define LED0_STK_SIZE64/设置任务堆栈大小OS_STK LEDO_TASK_STKLEDO_STK_SIZE;任务堆栈 void led0_task(void *pdata);/LED0 任务#define LED1_TASK_PRIO6 /设置任务优

8、先级#define LED1_STK_SIZE64/设置任务堆栈大小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_PRI

9、O );/创/ 建起始任务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);

10、 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#includ

11、e led.h#include includes.hOS_EVENT *myMBox;#define START_TASK_PRIO10 /设置任务优先级,开始任务的优先级设置为最低#define START_STK_SIZE64/设置任务堆栈大小OS_STK START_TASK_STKSTART_STK_SIZE;/任务堆栈void start_task(void *pdata); 任务函数#define MBOX_SEN_PRIO6 /设置任务优先级#define MBOX_SEN_STK_SIZE64/设置任务堆栈大小OS_STK MBOX_SEN_STKMBOX_SEN_STK_SI

12、ZE; 任务堆栈 void TaskMessageSen(void *pParam); 由 E 箱发送任务#define MBOX_REC_PRIO7 /设置任务优先级#define MBOX_REC_STK_SIZE64/设置任务堆栈大小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();OSTa

13、skCreate(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_P

14、RIO);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(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号