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