基于ucos的多任务管理的银行叫号模拟系统的实现.docx

上传人:b****6 文档编号:8263546 上传时间:2023-01-30 格式:DOCX 页数:11 大小:115.13KB
下载 相关 举报
基于ucos的多任务管理的银行叫号模拟系统的实现.docx_第1页
第1页 / 共11页
基于ucos的多任务管理的银行叫号模拟系统的实现.docx_第2页
第2页 / 共11页
基于ucos的多任务管理的银行叫号模拟系统的实现.docx_第3页
第3页 / 共11页
基于ucos的多任务管理的银行叫号模拟系统的实现.docx_第4页
第4页 / 共11页
基于ucos的多任务管理的银行叫号模拟系统的实现.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

基于ucos的多任务管理的银行叫号模拟系统的实现.docx

《基于ucos的多任务管理的银行叫号模拟系统的实现.docx》由会员分享,可在线阅读,更多相关《基于ucos的多任务管理的银行叫号模拟系统的实现.docx(11页珍藏版)》请在冰豆网上搜索。

基于ucos的多任务管理的银行叫号模拟系统的实现.docx

基于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日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1