发布时间 : 星期四 文章ucosII嵌入式实时操作系统实验更新完毕开始阅读bf5ef91959eef8c75fbfb346
x += 1;
//如果按下Esc键则退出uCOS_II if (PC_GetKey(&key) == TRUE)
{
if (key == 0x1B)
{
PC_DOSReturn(); } }
OSTimeDlyHMSM(0, 0, 4, 0); //等待
} }
/************************
任
YouTask*****************************************/
void YouTask (void *pdata) {
#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif
char *s1=\ char *s2=\ pdata = pdata; for (;;) {
if(OSTaskDelReq(OS_PRIO_SELF)==OS_TASK_DEL_REQ) {
PC_DispStr(10, 10,
//显示字符的位置 s1,
DISP_BGND_BLACK+DISP_FGND_BLUE );
OSTimeDlyHMSM(0, 0, 10, 0);
务
PC_DispStr(10, 12, //显示字符的位置
s2,
DISP_BGND_BLACK+DISP_FGND_BLUE );
OSTaskDel(OS_PRIO_SELF); }
if (x>50) { x=0; y+=2;
}
PC_DispChar(x, y,
//显示字符的位置
*(char*)pdata,
DISP_BGND_BLACK+DISP_FGND_BLUE );
x += 1;
OSTimeDlyHMSM(0, 0, 4, 0); //等待
} }
/************************
任HerTask*****************************************/
void HerTask (void *pdata) {
#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif
char *s3=\ char *s4=\ pdata = pdata; for (;;) {
if(OSTaskDelReq(OS_PRIO_SELF)==OS_TASK_DEL_REQ)
务
{
PC_DispStr(10, 14,
s3,
DISP_BGND_BLACK+DISP_FGND_YELLOW );
//显示字符的位置
OSTimeDlyHMSM(0, 0, 10, 0); PC_DispStr(10, 16,
s4,
DISP_BGND_BLACK+DISP_FGND_YELLOW );
//显示字符的位置
OSTaskDel(OS_PRIO_SELF); }
if (x>50)
{ x=0; y+=2;
}
//显示字符的位置
PC_DispChar(x, y,
*(char*)pdata,
DISP_BGND_BLACK+DISP_FGND_YELLOW );
x += 1;
//等待
OSTimeDlyHMSM(0, 0, 1, 0); } }
五、实验现象与结果分析
5.1习题13运行结果如下:
分析:因为分别将3个任务的延迟时间分别设为2ms,4ms,6ms会出现交替显示GYH,但G显示的频率要高于YH。 5.2习题第15题的运行结果:
分析:在YouTask和MyTask删除时间到来之前,两个任务运行并交替显示字符Y,H,且H显示频率要高,在适合的时间(编写者自己规定)YouTask和MyTask要求删除自身,于是YouTask和MyTask被删除,后面只显示字符M。