⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex1.c

📁 ucos2 for c8051f060 在目标板上运行5小时
💻 C
字号:
#include <includes.h>
#include <cygnalcon.h>

#include <stdio.h>
sbit LED = P0^7;                          // LED: '1' = ON; '0' = OFF


void TaskA(void*) reentrant;
void TaskB(void*) reentrant;
void TaskC(void*) reentrant;
void TaskD(void*) reentrant;
void TaskE(void*) reentrant;
//void TaskS(void*) reentrant;
void TaskS(void *pdat) ;

OS_STK TaskStartStkS[MaxStkSize];
OS_STK TaskStartStkA[MaxStkSize];//注意:在ASM文件中设置?STACK空间为40H即64。
OS_STK TaskStartStkB[MaxStkSize];
OS_STK TaskStartStkC[MaxStkSize];
OS_STK TaskStartStkD[MaxStkSize];
OS_STK TaskStartStkE[MaxStkSize];

OS_EVENT    *TxMbox;	//声明一个邮箱

OS_EVENT	*CommQ;
void     	*CommMsg[10];
 
char code FILEMSG[]="编译日期:" __DATE__ 	"   | 编译时间:" __TIME__					;
unsigned char code STARTMSG[]={	"\n"
								"+------------------------+-----------------------+\n"
								"| Starting ......                                |\n"
								"+------------------------+-----------------------+\n"
								"| %s    |  \n"
								"+------------------------+-----------------------+\n"
								"| CPU:        C8051F060  | OS:    UCOS II 2.51   |\n"
								"+------------------------+-----------------------+\n"
								"| RAM:        20K        | ROM:   64K            |\n"
								"+------------------------+-----------------------+\n"
							};

void main(void)
{
	INT8U err;

	config();
	SFRPAGE = UART0_PAGE;

	printf (STARTMSG,FILEMSG);
	printf ("UCOSII Ver=%d\n",(int)OS_VERSION);
	printf ("OSTime=%d,%d\n",(int)(OSTimeGet()/1000000),(int)(OSTimeGet()%1000000));

    OSInit();

   	OSTaskCreate(TaskS, (void *)0, TaskStartStkS,2);
    
	TxMbox  = OSMboxCreate((void *)0);		//创建一个邮箱
	CommQ 	= OSQCreate(&CommMsg[0], 10);   //建立消息队列       
    err = OSQFlush(CommQ);
 

	OSTimeSet (100);
	SFRPAGE = UART0_PAGE;
	printf ("UCOSII Verson=%d\n",(int)OSVersion ());
	printf ("UCOSII Starting  OK ...\n");
    InitTimer0();
    OSStart();


}
void TaskS(void *pdat)
{

	INT8U err;
	pdat=pdat;	
	OSStatInit();
 /*  	err=OSTaskCreateExt(TaskA, 
						(void *)0, 
						TaskStartStkA,
						8,
						8,
						TaskStartStkA,
						MaxStkSize,
						(void *)0, 
						OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR
						);
*/
 /*  	err=OSTaskCreateExt(TaskB, 
						(void *)0, 
						TaskStartStkB,
						9,
						9,
						TaskStartStkB,
						MaxStkSize,
						(void *)0, 
						OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR
						);
*/
	OSTaskCreate(TaskA, (void *)0, TaskStartStkA,8);
	OSTaskCreate(TaskB, (void *)0, TaskStartStkB,9);
    OSTaskCreate(TaskC, (void *)0, TaskStartStkC,5);
	OSTaskCreate(TaskD, (void *)0, TaskStartStkD,6);
//	OSTaskCreate(TaskE, (void *)0, TaskStartStkE,7);
	



	while(1)
	{
		printf ("taskstart OK...\n");
		OSTaskDel(OS_PRIO_SELF);
	} 
	 
}
void TaskA(void *pdat) reentrant
{
	static int i;
	pdat=pdat;

 	for(;;)
	{
		printf("TASKA  %d\n",i);
		if (i==1)	OSTaskCreate(TaskE, (void *)0, TaskStartStkE,7);
		if (i==5)  
		{
			OSTaskDel(7);  
			while (OSTaskDelReq(7) != OS_TASK_NOT_EXIST)
 		    {
	            OSTimeDly(1); 
			 }
		}
		if (++i>=30) i=0;
		if (i==10) OSSchedLock();
		if (i==15) OSSchedUnlock ();
		OSTimeDly(1*OS_TICKS_PER_SEC);   
		LED=!LED;
	}    
}

void TaskB(void *pdat) reentrant
{
	static int i;
	INT8U  err;
	void  *msg;
	pdat=pdat; 
	
	for(;;)
	{
		msg = OSQPend(CommQ, 500,&err);
        if (err == OS_NO_ERR) 
		{   /* 在指定时间内接受到消息      */
			printf("TASKB %s ----------------------------------------\n",msg);
        } 
		else 
		{	/* 在指定的时间内没有接受到指定的消息  */
			printf("TASKB 没有接到消息  %d,_____________________________\n",i++);
        }
	}
}

void TaskC(void *pdat) reentrant
{
	static int i;
    char   txmsg[10];
	pdat=pdat; 

	for(;;)
	{
		sprintf(txmsg,"msg  c %d",i);
		OSMboxPost(TxMbox, (void *)&txmsg);      /* Send message to Task #5                            */
		OSQPost(CommQ, "TASKC的消息");
		printf("TASKC  %d\n",i++);
		OSTimeDly(2*OS_TICKS_PER_SEC);   
	    //OSTimeDlyHMSM(0,0,5,00);
	}    
}

void TaskD(void *pdat) reentrant
{	
	static int i;
	char  *rxmsg;
    OS_STK_DATA stk_data;
	INT32U      stk_size;
	INT8U  err;
	pdat=pdat;
	for(;;)
	{	
        rxmsg = (char *)OSMboxPend(TxMbox, 0, &err);                  /* Wait for message from Task #4 */
	  	printf( "TASKD TIME=%06d%06d  "
				"CPU利用率%02d, "
				"邮件接收: c %s, %d\n",
				(unsigned int)(OSTimeGet()/1000000),	(unsigned int)(OSTimeGet()%1000000),
				(int)OSCPUUsage,rxmsg,i++);
	/*	for (i=8;i<=9;i++)
		{
			err = OSTaskStkChk(3, &stk_data);
			if (err == OS_NO_ERR) 
			{
				stk_size = stk_data.OSFree + stk_data.OSUsed;
	            printf("TASKD  TASKID=%04d,RAM=%04d,Free=%04d,Used=%04d",i,stk_size,stk_data.OSFree , stk_data.OSUsed);
	 		}
			else 
			{
				printf("TASKD 检查任务堆栈状态");
			}
         }
 */
		//OSTimeDly(15);
	    //OSTimeDlyHMSM(0,0,2,000);
	}
}
void TaskE(void *pdat) reentrant
{	
	pdat=pdat;
	for(;;)
	{	
		OSMboxPost(TxMbox, "任务E邮件");
	  	//printf("TaskE runing  %d\n",i++);
		OSQPost(CommQ, "======TASKe的消息    hello ha ha");
		OSQPost(CommQ, "******TASKe的消息    hello ha ha");
		OSTimeDly(100);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -