想将下列程序改成“排队机”以下是要实现的功能,可不知从哪里下手。
排队机功能:
实际应用的排队机在现实生活中已不鲜见,如中国移动营业厅、银行储蓄网点等等。具体功能:模拟客户到达取得排队号码([十进制4位顺序号]所谓登记):“挂号(排队)机”要记录登记号码、登记(到达)时间、办理业务类型(此处省略)等;“柜台机(3-5个)”:按登记号顺序受理客户业务,记录开始受理时间,客户登记号码,受理结束时间,并记录受理全部信息,结束工作以后输出相关记录(输出明细表)。
#include "includes.h"
#define TASK_STK_SIZE 512 //任务堆栈长度
#define N_MESSAGES 512
OS_STK StartTaskStk[TASK_STK_SIZE];
OS_STK MyTaskStk[TASK_STK_SIZE];
INT16S key;
INT8U err;
INT8U x=0,y=0,i=0;
OS_EVENT *Str_Q;
char *ss;
char *s[7];
void *MsgGrp[N_MESSAGES]; /*消息数组,消息数组存放着各消息的指针*/
INT8U a[7]={12,34,56,78,90};
void StartTask(void *data);
void MyTask(void *data);
void main (void)
{
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLUE);
OSInit();
PC_DOSSaveReturn();
PC_VectSet(uCOS, OSCtxSw);
Str_Q = OSQCreate( &MsgGrp[0], N_MESSAGES );
OSTaskCreate(StartTask, (void *)0, &StartTaskStk[TASK_STK_SIZE - 1], 0);
OSStart();
}
void StartTask(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
pdata = pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC);
OS_EXIT_CRITICAL();
OSStatInit();
OSTaskCreate(MyTask,(void *)0, &MyTaskStk[TASK_STK_SIZE - 1], 3);
for(;;)
{
for(i=0;i<7;i++)
{sprintf(&s,"%d",a);
PC_DispStr(0,x++,&s,DISP_BGND_BLUE + DISP_FGND_WHITE);
OSQPost(Str_Q,&s);
}
if( PC_GetKey(&key) == TRUE )
{
if( key == 'q' )
{
PC_DOSReturn();
}
}
OSTimeDlyHMSM(0,0,7,0);
}
}
void MyTask (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
pdata = pdata;
for (;;)
{
ss = OSQPend(Str_Q,0,&err); /*请求消息*/
PC_DispStr(10,y++,ss,DISP_BGND_BLUE + DISP_FGND_WHITE);
OSTimeDlyHMSM(0,0,1,0);
}
}