基于ucos的多任务管理的银行叫号模拟系统的实现.docx
《基于ucos的多任务管理的银行叫号模拟系统的实现.docx》由会员分享,可在线阅读,更多相关《基于ucos的多任务管理的银行叫号模拟系统的实现.docx(11页珍藏版)》请在冰豆网上搜索。
基于ucos的多任务管理的银行叫号模拟系统的实现
实时操作系统
期末设计报告
设计题目:
基于uc/os的多任务管理的银行叫号模拟系统的实现
学号:
姓名:
2011年12月
目录
摘要2
一、数据分析2
1.1数据分析2
1.2定义数据结构3
二、功能设计和实现3
2.1功能设计4
2.1.1系统设计图如下所示4
2.1.2任务的功能设计4
2.2代码设计5
2.2.1主菜单的设计5
2.2.2系统初始化5
2.2.3各任务的实现7
三、调试及运行结果8
3.1代码的调试过程8
3.2运行过程及结果截图9
四、结束语11
五、参考文献11
摘要
uc/os是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。
在嵌入式领域被广泛的应用,加上它的源代码开放,我们可以很好的对其进行二次开发。
在信息社会的今天,实现办公自动化是我们的目标,这样可以在很大程度上提高办公效率。
本设计是基于uc/os多任务管理的银行排队叫号模拟系统的实现。
在系统中主要对公业务、VIP业务、水电费业务、个人储蓄业务实现排队叫号管理。
最后我在bc31系统中进行模拟实现。
关键词uc/os多任务管理
一、数据分析
在模拟系统中,我们主要对公业务、VIP业务、水电费业务、个人储蓄业务实现排队叫号管理。
总之就是有四个任务,在实现时,我们首先要分析数据,定义数据结构。
1.1数据分析
系统模拟实现四个任务的排队叫号,当顾客需要办理业务时,只要选择相应的要办理的业务代号,然后系统就会给出一个号,当顾客办理完业务后,系统就会对相应的信息进行删除操作。
根据上面的分析,我们就要定义四个队列对四个业务进行相应的处理。
在同一个业务的办理中我们使用队列进行处理。
下面我就对相应的数据定义相应的数据结构。
1.2定义数据结构
首先我对堆栈长度做出定义,下面我就定义堆栈长度为512M在程序中的写法如下:
#defineTASK_STK_SIZE512//定义任务堆栈长度
下面是定义四个堆栈的长度,分别存储公业务、VIP业务、水电费业务、个人储蓄业务的信息,它们的长度用上面所定义的长度。
OS_STKPublicTaskStk[TASK_STK_SIZE];
OS_STKVIPTaskStk[TASK_STK_SIZE];
OS_STKWaterPowerTaskStk[TASK_STK_SIZE];
OS_STKPersonTaskStk[TASK_STK_SIZE];
定义用于接收用户选择的按键,戚数据类型为:
INT16S,具体如下所示:
INT16Skey;//用于键
经过上面的数据分析以后,我们可以进入相应的设计实现阶段。
二、功能设计和实现
本设计是基于uc/os多任务管理的银行排队叫号模拟系统的实现。
在系统中主要对公业务、VIP业务、水电费业务、个人储蓄业务实现排队叫号管理。
启动以后,用户选择自己相应的操作,待操作结束以后,系统回到主菜单等待第二个用户的到来,这样一直循环下去。
2.1功能设计
2.1.1系统设计图如下所示
如上图所示,用户选择公共业务、VIP业务、水电费业务、个人储蓄业务进行办理当办理完成以后,系统回到主菜单等待第二个用户的到来。
2.1.2任务的功能设计
在系统中有四个任务,当用户选择进入以后,实现相应的功能,当用户离开以后任务要结束自己的进程。
否则,系统就不能办理另外的任务。
具体的流程如下图所示:
2.2代码设计
在这小节中我给出部分任务的设计方法以及部分程序的源代码,并对一些程序做出一些解释。
2.2.1主菜单的设计
主菜单是用户进入系统看到的第一个界面,主要起着提示用户的作用,用户通过主菜单的提示选择相应的任务执行。
具体的代码如下所示:
voidprint()
{
printf("pleasechooseyouneedtask!
\n");
printf("1.publictask\n");
printf("2.viptask\n");
printf("3.waterandpowertask\n");
printf("4.persontask\n");
}
用户只要通过键盘上的1.2.3.4就可以选择进入相应的操作。
2.2.2系统初始化
系统初始化是对系统的一些功能进行初始化工作,例如,接口、时钟频率等等在这里用Init()实现。
除此之外,系统还要对按键等进行初始化工作,这里用TaskStart()实现,TaskStart()函数不仅实现系统的初始化,也是进入系统的引导程序。
是系统运行的接口。
初始化工作是为了以后的程序能够正常运行。
下面是两个函数的源代码:
voidInit()
{
#ifOS_CRITICAL_METHOD==3
OS_CPU_SRcpu_sr;
#endif
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);//设置uCOS_II时钟频率
OS_EXIT_CRITICAL();
OSStatInit();//初始化任务
PC_DOSSaveReturn();
PC_VectSet(uCOS,OSCtxSw);//安装中断
}
voidTaskStart(void*pdata)
{
Init();
pdata=pdata;
print();
for(;;)
{
if(PC_GetKey(&key)==TRUE)
{
if(key==0x31)
{
OSStatInit();
OSTaskCreate(PublicTask,(void*)0,&OutTaskStk[TASK_STK_SIZE-1],4);
}
if(key==0x32)
{
OSStatInit();
OSTaskCreate(VIPTask,(void*)0,&InterTaskStk[TASK_STK_SIZE-1],5);
}
if(key==0x33)
{
OSStatInit();
OSTaskCreate(WaterPowerTask,(void*)0,&DentTaskStk[TASK_STK_SIZE-1],6);
}
if(key==0x34)
{
OSStatInit();
OSTaskCreate(PersonTask,(void*)0,&PediTaskStk[TASK_STK_SIZE-1],7);
}
if(key==0x1B)
{
PC_DOSReturn();
}
}
}
}
2.2.3各任务的实现
在系统中有四个任务,即公共业务、VIP业务、水电费业务、个人储蓄业务。
在这里主要是对这四个模块的实现,实现它们相应的功能。
四个模块的源代码如下:
voidPublicTask(void*pdata)//对公业务
{
Init();
pdata=pdata;
printf("\n\nthisispublictask!
\n");
outcount=outcount+1;
printf("\nyourNumberis%d!
\n",outcount);
print();
OSTaskDel(OS_PRIO_SELF);
OSTaskResume
(1);
}
voidVIPTask(void*pdata)//VIP业务、
{
Init();
pdata=pdata;
printf("\n\nthisisVIPtask!
\n");
intercount=intercount+1;
printf("\nyourNumberis%d!
\n",intercount);
print();
OSTaskDel(OS_PRIO_SELF);
OSTaskResume
(1);
}
voidWaterPowerTask(void*pdata)//水电费业务、
{
Init();
pdata=pdata;
printf("\n\nthisiswaterandpower!
\n");
dentcount=dentcount+1;
printf("\nyourNumberis%d!
\n",dentcount);
print();
OSTaskDel(OS_PRIO_SELF);
OSTaskResume
(1);
}
voidPersonTask(void*pdata)//个人储蓄业务
{
Init();
pdata=pdata;
printf("\n\nthisispersontask!
\n");
pedicount=pedicount+1;
printf("\nyourNumberis%d!
\n",pedicount);
print();
OSTaskDel(OS_PRIO_SELF);
OSTaskResume
(1);
}
在系统中还有一些如结束进程等任务的实现,这里由于篇幅问题,就不把源代码附在上面。
三、调试及运行结果
3.1代码的调试过程
通过DosBox进入BC31下调试程序,进入程序的目录Term下的test目录,结果如下面所示:
1、建立虚拟盘
2、找到Term下的test目录
3、输入maketest命令,进入下面的环境
3.2运行过程及结果截图
1、在test文件中运行test.exe文件,如下图所示:
2、进入到主界面如下图所示:
3、选择publictask后如下图所示
4、再次选择publictask后如下图所示
5、选择waterandpower后如下面所示
6、然后选择相应的如下面所示:
7、第二次选择persontask
8、第六次选择persontask
9、第四次选择publictask
10、第五次选择publictask
四、结束语
实时操作系统是现在嵌入式领域不可少的一部分。
uc/os是运用得罪广泛的一种,由于其源代码开放,容易裁剪,有较高的灵活性,具有较高的竞争力。
这次的课程设计是实时操作系统的多任务管理的一个简单的例子。
在文章中我给出了部分源代码以及整个调试过程。
部分功能不够完善,请指正批评!
五、参考文献
【1】任哲.嵌入式实时操作系统µC/OS-II原理及应用.北京航天航空大学出版社.2009年10月
【2】尹江会.嵌入式实时操作系统uC/OS—II在ARM中的应用研究.硕士学位论文.2005年04月05日