/**********
任务My 中创建了任务YOU
任务YOU 中存在一个延时并且大于任务My的延时事件
这样虽然在任务YOU 中输出一个全局变量
但是在运行时输出的却是任务My 赋值的字符串
这就很好解释了 ucos ii 中
对任务发送事件和请求事件以及 对事件的操作都定义为全局函数
以便用程序的所有任务来调用
*************/
#include "includes.h"
#define TASK_STK_SIZE 64 //ÈÎÎñ¶ÑÕ»µÄ³¤¶È
char *ss;
OS_STK MyTaskStk[TASK_STK_SIZE]; //¶¨ÒåÈÎÎñµÄ¶ÑÕ»Çø
OS_STK YouTaskStk[TASK_STK_SIZE]; //¶¨ÒåÈÎÎñµÄ¶ÑÕ»Çø
INT16S key;
INT8U y1=0,y2=0;
char *s;
void MyTask(void *data);
void YouTask(void *data);
OS_STK MyTaskStk[TASK_STK_SIZE];
OS_STK YouTaskStk[TASK_STK_SIZE];
void MyTask(void *pdata)
{
#if OS_CRITICAL_METHOD==3
OS_CPU_SR cpu_sr;
#endif
INT8U err;
pdata = pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC); //
OS_EXIT_CRITICAL();
OSStatInit(); //³õʼ»¯Í³¼ÆÈÎÎñ
// OSTaskCreate(YouTask,
// (void *)0,
// &YouTaskStk[TASK_STK_SIZE-1], //ÉèÖÃÈÎÎñ¶ÑÕ»µÄÕ»¶¥¡¡Ö¸Õë¡¡
// 2);
for(;;)
{
s = "MyTaskMMMMMMMM";
PC_DispStr(5,++y1,s,DISP_BGND_BLACK+DISP_FGND_WHITE);
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1b)
{ PC_DOSReturn();}
}
OSTimeDly(400);
}
}
void YouTask(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT8U err;
pdata = pdata;
for(;;)
{
s = "YouTaskYYYYYY";
PC_DispStr(30,++y2,s,DISP_BGND_BLACK+DISP_FGND_WHITE);
OSTimeSet(0); //ÉèÖÃOSTime = 0
//ÉèÖõ±Ç°ÏµÍ³µÄʱÖÓ¡¡ÊýÖµ¡¡
while(OSTime<400)
{
sprintf(ss,"%d",OSTimeGet()); // »ñÈ¡µ±Ç°ÏµÍ³ÊýÖµ
PC_DispStr(55,y2,s,DISP_BGND_BLACK+DISP_FGND_WHITE);
OSTimeDly(200); //ÑÓʱ 200
}
}
}
void main(void)
{
OSInit(); //³õʼ»¯ucos ii
PC_DOSSaveReturn(); //±£´æDOS»·¾³
PC_VectSet(uCOS,OSCtxSw); //°²×°ucos II ÖжÏ
OSTaskCreate( MyTask,
(void *)0,
&MyTaskStk[TASK_STK_SIZE-1],
0); //ʹÓÃÈÎÎñµÄ ÓÅÏȼ¶
//Èç¹û¡¡°ÑYouTask ÈÎÎñ·ÅÔÚÖ÷º¯ÊýÖп´¿´¡¡Êä³öЧ¹û¡¡
OSTaskCreate(YouTask,
(void *)0,
&YouTaskStk[TASK_STK_SIZE-1], //ÉèÖÃÈÎÎñ¶ÑÕ»µÄÕ»¶¥¡¡Ö¸Õë¡¡
2);
OSStart(); //Æô¶¯ ¶àÈÎÎñ¹ÜÀí
}
2020-11-19
最新推荐文章于 2020-12-04 15:02:41 发布