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

📄 main.c

📁 在S3C44B0X依植的多任务UCOD-II操作系统的范例源程序。
💻 C
字号:
#include	"ucos-ii/includes.h"               /* uC/OS interface */
#include    "uhal/uhal.h"
#include    "Target/44b.h"

//task stack size
#ifdef SEMIHOSTED
	#define	TASK_STACK_SIZE	(64+SEMIHOSTED_STACK_NEEDS)
#else
	#define	TASK_STACK_SIZE	10*1024
#endif

extern void  EXINT4_ISR(void);
OS_EVENT        *ISRTaskMbox; 
//Task definition

OS_STK TaskISR_Stack[TASK_STACK_SIZE]= {0, };
void TaskISR_Task(void *Id);
#define TaskISR_PRIO  17

OS_STK TaskA_Stack[TASK_STACK_SIZE]= {0, };
void TaskA_Task(void *Id);
#define TaskA_PRIO    18

OS_STK TaskB_Stack[TASK_STACK_SIZE]= {0, };
void TaskB_Task(void *Id);
#define TaskB_PRIO    19

OS_STK TaskC_Stack[TASK_STACK_SIZE]= {0, };
void TaskC_Task(void *Id);
#define TaskC_PRIO    20

char isrtxmsg;

void _Delay(void)
{
	int j,k;
	for(j=0;j<255;j++)
	{
		for(k=0;k<255;k++);
	}
}

void TaskA_Task(void *Id)
{
	int i;

	while(1)
	{
		for(i=0;i<10;i++)
		{
		   OS_ENTER_CRITICAL();
	       uHALr_printf(" Task1\n");
	       OS_EXIT_CRITICAL();
	       _Delay();
	    }
		OSTimeDly(500);
	}
}
void TaskB_Task(void *Id)
{
	int i;

	while(1)
	{
		for(i=0;i<10;i++)
		{
		   OS_ENTER_CRITICAL();
	       uHALr_printf("             Task2\n");
	       OS_EXIT_CRITICAL();
	       _Delay();
	    }	       
		OSTimeDly(500);
	}
}
void TaskC_Task(void *Id)
{
	int i;

	while(1)
	{
		for(i=0;i<10;i++)
		{
		   OS_ENTER_CRITICAL();
    	   uHALr_printf("                           Task3\n");
    	   OS_EXIT_CRITICAL();
    	   _Delay();
	    }    	   
		OSTimeDly(500);
	}
}

void TaskISR_Task(void *Id)
{
	unsigned char err;
	char *rxmsg=0;
	int i;
	
	ARMTargetStart();
	
	pISR_EINT4567=(int)EXINT4_ISR;//指向中断处理程序
	
	rPCONG|=0xff00;//设置EXINT7为外部中断输入脚
	rPUPG&=0x0f;
	rEXTINT&=0x0000ffff;
	rEXTINT|=0x22220000;
	ISRTaskMbox = OSMboxCreate((void *)0);//创建邮箱
	rINTMSK&=~(BIT_EINT4567);//开启中断
	
	OSTaskCreate(TaskA_Task, (void *)0, (OS_STK *)&TaskA_Stack[TASK_STACK_SIZE-1],  TaskA_PRIO);//创建其它3个任务
  	OSTaskCreate(TaskB_Task, (void *)0, (OS_STK *)&TaskB_Stack[TASK_STACK_SIZE-1],  TaskB_PRIO);
  	OSTaskCreate(TaskC_Task, (void *)0, (OS_STK *)&TaskC_Stack[TASK_STACK_SIZE-1],  TaskC_PRIO);
	
	while(1)
	{
		  rxmsg=(char *)OSMboxPend(ISRTaskMbox, 0, &err);//接收邮箱消息
		  if(*rxmsg)
	      {	
		    rINTMSK&=(~BIT_TIMER0);//禁止外部中断,但注意不能够禁止节拍中断
		    rINTMSK|=BIT_EINT4567;
	    
	        switch(*rxmsg)
	        {
	        	case '4':
	        	   OS_ENTER_CRITICAL();
    	           uHALr_printf("EXINT4 is pressed!\n");
    	           OS_EXIT_CRITICAL();
    	           break;
    	        case '5':
    	           OS_ENTER_CRITICAL();
    	           uHALr_printf("EXINT5 is pressed!\n");
    	           OS_EXIT_CRITICAL(); 
    	           break;
    	        case '6':
    	           OS_ENTER_CRITICAL();
    	           uHALr_printf("EXINT6 is pressed!\n");
    	           OS_EXIT_CRITICAL();
    	           break;
    	        case '7':
    	           OS_ENTER_CRITICAL();
    	           uHALr_printf("EXINT7 is pressed!\n");
    	           OS_EXIT_CRITICAL();
    	        default:
    	           break;
    	     }
    	    OS_ENTER_CRITICAL();
    	    uHALr_printf("Wait for key released!\n");
    	    OS_EXIT_CRITICAL();
    	    for(i=0;i<60;i++)    //延时消抖!这一步很重要
    	       _Delay();
    	    OS_ENTER_CRITICAL();
    	    uHALr_printf("OK!\n");
    	    OS_EXIT_CRITICAL();
    	    rEXTINTPND=0xf;		 //clear EXTINTPND reg.
	        rI_ISPC|=BIT_EINT4567;
    	    rINTMSK&=~(BIT_EINT4567);
	     }
	  /*else
	  {
	  	rEXTINTPND=0xf;		//clear EXTINTPND reg.
	  	rI_ISPC|=BIT_EINT4567;
	  	rINTMSK&=(~BIT_TIMER0); 
	  	rINTMSK&=~(BIT_EINT4567);
	  }*/
	    
	    OSTimeDly(500);
	}
}

void EXINT4isr(void)
{

    isrtxmsg='7';
    OSMboxPost(ISRTaskMbox, (void *)&isrtxmsg);
}

int Main()
{
	ARMTargetInit();//initialize Target
	
	// Init uCOS-II
	OSInit();

	//Create the Main Task
	OSTaskCreate(TaskISR_Task, (void *)0, (OS_STK *)&TaskISR_Stack[TASK_STACK_SIZE-1],  TaskISR_PRIO);
	/* Start uCOS-II */
	OSStart();
	return 0;
}                              


⌨️ 快捷键说明

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