实时操作系统课程实验报告专业:通信1001学号:3100601025姓名:陈治州完成时间:2013年6月11日实验简易电饭煲的模拟一.实验目的:掌握在基于嵌入式实时操作系统µC/OS-II的应用中,基于多任务的模式的编程方法。
锻炼综合应用多任务机制,任务间的通信机制,内存管理等的能力。
二.实验要求:1.按“S”开机,系统进入待机状态,时间区域显示当前北京时间,默认模式“煮饭”;2.按“C”选择模式,即在“煮饭”、“煮粥”和“煮面”模式中循环选择;3.按“B”开始执行模式命令,“开始”状态选中,时间区域开始倒计时,倒计时完成后进入“保温”状态,同时该状态显示选中,时间区域显示保温时间;4.按“Q”取消当前工作状态,系统进入待机状态,时间区域显示北京时间,模式为当前模式;5.按“X”退出系统,时间区域不显示。
6.煮饭时长为30,煮粥时长为50,煮面时长为40.三.实验设计:1.设计思路:以老师所给的五个程序为基础,看懂每个实验之后,对borlandc的操作有了大概的认识,重点以第五个实验Task_EX为框架,利用其中界面显示与按键扫描以及做出相应的响应,对应实现此次实验所需要的功能。
本次实验分为界面显示、按键查询与响应、切换功能、时钟显示与倒计时模块,综合在一起实验所需功能。
2.模块划分图:(1)界面显示:Main()Taskstart()Taskstartdispinit()在TaskStartDispInit()函数中,使用PC_DispStr()函数画出界面。
(2)按键查询与响应:Main()Taskstart()在TaskStart()函数中,用if (PC_GetKey(&key) == TRUE)判断是否有按键输入。
然后根据key 的值,判断输入的按键是哪一个;在响应中用switch语句来执行对应按键的响应。
(3)切换功能:l计数“C”按键的次数M=l%3Switch(m)M=0,1,2对应于煮饭,煮粥,煮面,然后使用PC_DispStr()函数在选择的选项前画上“@”指示,同时,在其余两项钱画上“”以“擦出”之前画下的“@”,注意l自增。
四.主要代码:#include "stdio.h"#include "includes.h"#include "time.h"#include "dos.h"#include "sys/types.h"#include "stdlib.h"#define TASK_STK_SIZE 512#define N_TASKS 2OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];OS_STK TaskStartStk[TASK_STK_SIZE];INT8U TaskData[N_TASKS];void Task0(void *pdata);void TaskStart(void *pdata);static void TaskStartDispInit(void);void main (void){PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK);OSInit();PC_DOSSaveReturn();PC_VectSet(uCOS, OSCtxSw);OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4);OSStart();}void TaskStart (void *pdata){#if OS_CRITICAL_METHOD == 3OS_CPU_SR cpu_sr;#endifINT8U l,m;INT16S key;l=0;pdata = pdata;TaskStartDispInit();OS_ENTER_CRITICAL();PC_VectSet(0x08, OSTickISR);PC_SetTickRate(OS_TICKS_PER_SEC);OS_EXIT_CRITICAL();OSStatInit();for (;;){if (PC_GetKey(&key) == TRUE){switch(key){case 0x1B: PC_DOSReturn();break;case 0x43:{m=(l%3);switch(m){case 0:{PC_DispStr( 26,6, "@", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 40,6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 55,6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); }break;case 1:{PC_DispStr( 26,6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 40,6, "@", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 55,6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); }break;case 2:{PC_DispStr( 26,6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 40,6, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 55,6, "@", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); }break;}l++;}break;}}OSCtxSwCtr = 0;OSTimeDlyHMSM(0, 0, 1, 0);}}static void TaskStartDispInit (void){PC_DispStr( 0, 0, " uC/OS-II, The Real-Time Kernel ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);PC_DispStr( 0, 1, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 2, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 3, " dianfanbao shiyan", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 4, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 5, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 6, " kai shi. zhu fan. zhu zhou. zhu mian. ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 7, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 8, " bao wen.", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 9, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 10, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 11, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 12, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 13, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 14, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 15, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 16, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 17, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 18, "", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 19, " 'S':kai ji.", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr( 0, 20, " 'C':mo shi qie huan.", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr( 0, 21, " 'B':kai shi zhi xin.", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr( 0, 22, " 'Q':qu xiao dang qian gong zuo zhuang tai.", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr( 0, 23, " 'X':tui chu xi tong.", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);PC_DispStr( 0, 24, " <-PRESS 'ESC' TO QUIT-> ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);}五.运行界面:(1)主界面:(2)显示北京时间:(3)模式切换:(4)倒计时:(5)保温执行时间:六.总结:本次实验主要以老师所给的实验事例为基础,并结合老师课堂讲的内容,理解编写程序。