欢迎来到天天文库
浏览记录
ID:9995158
大小:137.50 KB
页数:6页
时间:2018-05-20
《操作系统应用实验1》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统应用实验一、实验目的1、熟悉ucos-II下系统函数使用的基本原则2、理解任务编程方式与前后台编程方式的区别。3、掌握用ucos-II下任务的五种状态,以及五种状态之间的相互关系二、实验要求用一个按键来控制一个LED灯的亮和灭。三实验设备1.电脑一台2.Proteus-ARM实验箱四、实验电路及连线1.实验电路原理图图1操作系统应用实验原理图2.硬件连接CPU板主板P0.16KEY1P0.7LED五、实验原理图2是μC/OS-Ⅱ控制下的任务状态转换图。在任一给定的时刻,任务的状态一定是在这五种状态之一。图2任务的状态图休眠态(DORMANT)指任务驻留在程序空间之中,还没
2、有交给μC/OS-Ⅱ管理。把任务交给μC/OS-Ⅱ是通过调用下述两个函数之一:OSTaskCreate()或OSTaskCreateExt()。当任务一旦建立,这个任务就进入就绪态准备运行。任务的建立可以是在多任务运行开始之前,也可以是动态地被一个运行着的任务建立。如果一个任务是被另一个任务建立的,而这个任务的优先级高于建立它的那个任务,则这个刚刚建立的任务将立即得到CPU的控制权。一个任务可以通过调用OSTaskDel()返回到睡眠态,或通过调用该函数让另一个任务进入睡眠态。调用OSStart()可以启动多任务。OSStart()函数运行进入就绪态的优先级最高的任务。就绪的任务
3、只有当所有优先级高于这个任务的任务转为等待状态,或者是被删除了,才能进入运行态。正在运行的任务可以通过调用两个函数之一将自身延迟一段时间,这两个函数是OSTimeDly()或OSTimeDlyHMSM()。这个任务于是进入等待状态,等待这段时间过去,下一个优先级最高的、并进入了就绪态的任务立刻被赋予了CPU的控制权。等待的时间过去以后,系统服务函数OSTimeTick()使延迟了的任务进入就绪态。正在运行的任务可以通过调用OSTaskSuspend(),使相应的任务进入挂起状态,若要使被挂起的任务重新进入就绪状态,可以使用OSTaskResume()使相应的任务进入就绪状态。六、
4、实验内容本实验要求用一个按键来控制一个LED灯的亮和灭。根据实验的要求,创建3个任务(不包括统计任务和空闲任务):Task0由main()函数创建,负责目标板初始化和创建其它任务,优先级为2;TaskLed由Task0创建,优先级为3,先将自身挂起,等待恢复,恢复后让LED灯闪烁一次;TaskKey由Task0创建,优先级为4,负责检测按键,并恢复TaskLed。1.画出实验流程图2.实验程序#include"config.h"#include"stdlib.h"#defineled1<<7#definekey1<<16#defineTaskStkLengh64//Definet
5、heTask0stacklength定义用户任务0的堆栈长度OS_STKTaskStk[TaskStkLengh];//DefinetheTask0stack定义用户任务0的堆栈OS_STKTaskledStk[TaskStkLengh];//DefinetheTask1stack定义用户任务0的堆栈OS_STKTaskkeyStk[TaskStkLengh];//DefinetheTask2stack定义用户任务0的堆栈voidTask0(void*pdata);//Task0任务0voidTaskLed(void*pdata);//Taskled任务1voidTaskKey(
6、void*pdata);//TaskKey任务2intmain(void){OSInit();OSTaskCreate(Task0,(void*)0,&TaskStk[TaskStkLengh-1],2);OSStart();return0;}/***********************************************************************************************************Task0任务0*******************************************************
7、*************************************************/voidTask0(void*pdata){pdata=pdata;TargetInit();//初始化目标板PINSEL0=(PINSEL0&0xFFFF3FFF);//P0.7为GPIOPINSEL1=(PINSEL1&0xFFFFFFFC);//P0.16为GPIOIO0DIR&=~key;//设置key为输入IO0DIR
8、=led;//设置led为输出IO0SET=led;
此文档下载收益归作者所有