ucos-ii²Ù×÷ϵͳϰÌ⣨ǶÈëʽ·½Ïò£© ÏÂÔØ±¾ÎÄ

PC_DispChar(x, y, *(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE );//´òÓ¡×Ö·û¡±H¡±

PC_DispStr(5, 6, s, DISP_BGND_BLACK+DISP_FGND_WHITE );//²¢´òÓ¡×Ö·û´®£¨sÒÑÔÚ³ÌÐò¿ªÍ·¶¨Ò壩 x+=1; }

InterKey=FALSE; //ÖØÐ½«InterKey±êÖ¾µÄÖµÖÃΪ¼Ù

OSTimeDlyHMSM(0,0,1,0); // ´Ë´¦µÄÖµ¸ù¾ÝÌâĿҪÇó¸ü¸Ä£¬Ã»ÓÐÒªÇóµÄ»°¿ÉÒÔ¾ÍʹÓÃÕâ¸ö } }

//--ÏÂÃæµÄÄÚÈݺÍÉÏÃæµÄ²»ÔÚͬһ¸öÎļþÖУ¬¹³×Óº¯Êý¼¸ºõ¶¼ÊÇÔÚOS_CPU_C.cÎļþÖж¨ÒåµÄ---------------------------------

extern BOOLEAN InterKey; //ÉùÃ÷InterKeyÕâ¸ö±äÁ¿ÊÇÔÚ¸ÃÎļþÍⲿ¶¨ÒåµÄ INT16U InterCtr = 0; //ÓÃÁ˼ǼʱÖÓ½ÚÅÄÊý£¬¼´¸Ã¹³×Óº¯Êý±»µ÷ÓõĴÎÊý void OSTimeTickHook (void) {

if(InterCtr == 10000) //µ±Ê±ÖÓtick×ÜÊýµÈÓÚ10000(Õâ¸öÖµ°´ÌâÄ¿ÖеÄÒªÇó½øÐÐÉèÖÃ)ʱ InterKey = TRUE; //½«InterKey±êÖ¾µÄÖµÖÃÎªÕæ InterCtr++; }

Èý¡¢Éè¼ÆÒ»¸öÓ¦ÓóÌÐò£¬¸Ã³ÌÐòÓÐMyTaskºÎYouTaskÁ½¸öÈÎÎñ£¬ÔÚÈÎÎñMyTaskÖÐÓÃÒ»¸ö±äÁ¿¼Ç¼MyTaskµÄÔËÐдÎÊý£¬²¢½«Æä×÷ΪÏûÏ¢ÓÃÓÊÏäStr_Box·¢¸øÈÎÎñYouTask²¢ÓÐÈÎÎñYouTaskÏÔʾ³öÀ´¡£

(Õâ¸öÌâÊÇÊéÉϵÄÔ­Ìâ[page156£¬Àý5-8]£¬¿¼ÊÔ¹À¼ÆÒ²ÊÇÔ­Ì⣬ÎÒÖ»Êǽ«Ò»Ð©Ã»ÓÐÓõĴúÂëɾµôÁË)

#include \

#define TASK_STK_SIZE 512 //ÈÎÎñ¶ÑÕ»³¤¶È

OS_STK StartTaskStk[TASK_STK_SIZE]; //¶¨ÒåÈÎÎñ¶ÑÕ»Çø OS_STK MyTaskStk[TASK_STK_SIZE]; //¶¨ÒåÈÎÎñ¶ÑÕ»Çø OS_STK YouTaskStk[TASK_STK_SIZE]; //¶¨ÒåÈÎÎñ¶ÑÕ»Çø char*s; char*ss;

INT8U err; //ÓÃÀ´´æ·Å´íÎó´úºÅ INT8U y=0; //×Ö·ûÏÔʾλÖÃ

INT32U Times=0; //ÓÃÀ´¼Ç¼MyTaskÈÎÎñµÄÔËÐдÎÊý OS_EVENT *Str_Box; //¶¨ÒåÏûÏ¢ÓÊÏäµÄÖ¸Õë void StartTask(void *data); //ÉùÃ÷ÆðʼÈÎÎñ void MyTask(void *data); //ÉùÃ÷ÈÎÎñ void YouTask(void *data); //ÉùÃ÷ÈÎÎñ void main (void) {

OSInit( ); //³õʼ»¯uCOS_II

21

PC_DOSSaveReturn( ); //±£´æDos»·¾³

PC_VectSet(uCOS, OSCtxSw); //°²×°uCOS_IIÖжÏ

Str_Box = OSMboxCreate ((void*)0); //´´½¨»¥³âÐÍÐźÅÁ¿

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); //ÉèÖÃuCOS_IIʱÖÓÆµÂÊ OS_EXIT_CRITICAL( );

OSStatInit( ); //³õʼ»¯Í³¼ÆÈÎÎñ

OSTaskCreate(MyTask, (void*)0, &MyTaskStk[TASK_STK_SIZE - 1], 3); //×¢ÒâÓÅÏȼ¶£¬Òª·ûºÏÌâĿҪÇó

OSTaskCreate(YouTask, (void*)0, &YouTaskStk[TASK_STK_SIZE - 1], 4); //×¢ÒâÓÅÏȼ¶£¬Òª·ûºÏÌâĿҪÇó

// ÕâÁ½¸öÈÎÎñ´´½¨º¯ÊýµÄµÚ2¸ö²ÎÊý¶¼ÊÇ¡±(void*)0¡±£¬ÊÇÒòΪÔÚÕâ¸ö³ÌÐòÖв¢Ã»ÓÐÓõ½Õâ¸ö²ÎÊýÈ¥¸ø¶ÔÓ¦µÄº¯Êý´«µÝ²ÎÊý for (;;) {

OSTimeDlyHMSM(0, 0, 3, 0); //µÈ´ý3Ã룬°´ÕÕÌâÄ¿µÄÒªÇó½øÐиü¸Ä£¬Ã»ÓÐÒªÇóµÄ»°¿ÉÒÔ¾ÍʹÓÃÕâ¸ö } }

void MyTask (void *pdata) {

#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif

pdata = pdata; for (;;) {

sprintf(s,\//½«MyTaskµÄÔËÐдÎÊýTimesÒÔÊ®½øÖƵĸñʽת»»³É×Ö·û´®£¬²¢´æ·Åµ½sËùÖ¸ÏòµÄλÖÃ

OSMboxPost(Str_Box,s); //·¢ËÍÏûÏ¢ Times++;

OSTimeDlyHMSM(0, 0, 1, 0); //µÈ´ý1Ã룬°´ÕÕÌâÄ¿µÄÒªÇó½øÐиü¸Ä£¬Ã»ÓÐÒªÇóµÄ»°¿ÉÒÔ

22

¾ÍʹÓÃÕâ¸ö } }

void YouTask (void *pdata) {

#if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif pdata = pdata; for (;;) {

ss=OSMboxPend(Str_Box,10,&err); //¶ÁÈ¡ÏûÏ¢ÓÊÏäÖÐÊý¾Ý»º³åÇøµÄÊ×µØÖ·²¢¸³¸øssÖ¸Õë

PC_DispStr(10, ++y, ss, DISP_BGND_BLACK+DISP_FGND_WHITE); //´òÓ¡³öËùÊÕµ½µÄÏûÏ¢µÄÄÚÈÝ

OSTimeDlyHMSM(0, 0, 1, 0); //µÈ´ý1Ã룬°´ÕÕÌâÄ¿µÄÒªÇó½øÐиü¸Ä£¬Ã»ÓÐÒªÇóµÄ»°¿ÉÒÔ¾ÍʹÓÃÕâ¸ö } }

23