www.pudn.com > uCOSII_no.rar > Main.c, change:2005-05-14,size:5047b


/**************************************************************************** 
【文  件  名  称】main.c 
【功  能  描  述】三星S3C44B0X板 uC/OS-II 程序代码 
【程  序  版  本】1.0 
【创建人及创建日期】龚俊//2003-12-19 10:57 
【修改人及修改日期】龚俊//2004-6-6 23:27 
****************************************************************************/ 
#include    "rtc.h" 
 
#include    "os_cpu.h" 
#include	"ucos_ii.h"               /* uC/OS interface */ 
#include	"target.h" 
//*************************************************************************** 
/* allocate memory for tasks' stacks */ 
#ifdef SEMIHOSTED 
	#define STACKSIZE       (SEMIHOSTED_STACK_NEEDS+64) 
#else 
	//#define  TASK_STACK_SIZE	(  256+64 ) 
	#define  TASK_STACK_SIZE	(  512+64 ) 
	//#define  TASK_STACK_SIZE	( 8192+64 ) 
#endif 
 
//*************************************************************************** 
 
OS_STK Main_Task_Stack[TASK_STACK_SIZE]; 
void Main_Task(void *Id); 
#define Main_Task_PRIO   5  
 
OS_STK Task1_Stack[TASK_STACK_SIZE]; 
void Task1( void *Id ) ; 
#define Task1_PRIO       6 
 
OS_STK  Task2_Stack[TASK_STACK_SIZE]; 
void Task2( void *Id ) ; 
#define Task2_PRIO       7 
 
 
 
OS_EVENT *UART0_SEM ;		   //UART 0信号量 
OS_EVENT *Key_Mbox ;		   //按键消息邮箱 
OS_EVENT *OK_Mbox;		      //按键消息邮箱 
 
/****************************************************************************** 
【功能说明】主任务,在本任务中启动系统定时器并创建其他任务 
******************************************************************************/ 
void rtc_tick_init( char tick ) 
{ 
    rRTCCON  = 0x01;	 
     
    rTICNT  = (tick&0x7f)|0x80;		/*TICK 中断使能,周期为(1+tick)/128秒*/ 
   // tick=rTICNT; 
	//printf("TICNT=%d/n",tick); 
    rRTCCON  = 0x00; 
} 
/* 
******************************************************************************************************** 
* 函数: void __irq OS_TICK_ISR (void). 
* 描述: 1. Timer4 中断服务程序, 提供 uC/OS 节拍. 
*       2. 其它 IRQ 中断服务函数请参照该函数. 
******************************************************************************************************** 
*/ 
void  __irq OS_TICK_ISR (void) 
{ 
    OSIntEnter(); 
 
    OSTimeTick();                                   /* 系统节拍服务程序.    */ 
 
    OSIntExit(); 
 
    ClearPending (BIT_TICK);                      // 清中断悬挂位. 
} 
 
void __irq rtc_irq(void) 
{ 
	ClearPending(BIT_TICK); 
	printf("into tick\n"); 
} 
 
 
void Main_Task( void *Id ) 
{ 
	//U8 err ; 
	 
	//ARMStartTimer(); 
	EnableInt(); 
	rINTMOD = 0x0 ;	 
	rtc_tick_init(50); 
	//Init_Timer4(); 
	pISR_TICK= (unsigned)OSTickISR; 
	//pISR_TICK= (unsigned)rtc_irq; 
	ClearPending(BIT_TICK);  
	EnableIrq(BIT_TICK); 
	 
	printf("OSStatInit\n"); 
	OSStatInit(); 
	printf("into Main_Task \n"); 
	 
	//OSTaskCreate( Task_KeyScan, (void *)0, (OS_STK *)&Task_KeyScan_Stack[TASK_STACK_SIZE-1], Task_KeyScan_PRIO ) ; 
	//OSTaskCreate( Task1, (void *)0, (OS_STK *)&Task1_Stack[TASK_STACK_SIZE-1],Task1_PRIO ) ; 
	//OSTaskCreate( Task2, (void *)0, (OS_STK *)&Task2_Stack[TASK_STACK_SIZE-1],Task2_PRIO ) ; 
	for( ; ; )	 
	{ 
		 
		printf( "++++++++++++++++++++++++++++++++++++++" ) ; 
		printf( "OSCPUUsage = %d%% \n", OSCPUUsage ) ; 
		OSTimeDly(10); 
		 
	} 
} 
 
/****************************************************************************** 
【功能说明】通过串口向超级终端发送数据 
******************************************************************************/ 
void Task1(void *Id) 
{ 
  for(;;) 
   { 
     printf("##############run Task1!!!################\n"); 
     OSTimeDly(5); 
   } 
} 
 
/****************************************************************************** 
【功能说明】任务2,通过串口向超级终端发送数据 
******************************************************************************/ 
void Task2(void *Id) 
{ 
  for(;;) 
   { 
     printf("**************run Task2!!!****************\n"); 
     OSTimeDly(5); 
    } 
 } 
 
 
/****************************************************************************** 
【功能说明】系统主函数 
******************************************************************************/ 
void Main(void) 
{ 
	U16 ver ; 
	 
	//BoardInitStart(); 
	SystemClockInit(); 
	TimerInit(TIMER_FREQ); 
	MemCfgInit(); 
	PortInit(); 
 
	SerialSwitch(0); 
	SerialChgBaud(115200); 
	 
	printf("\n\nTarget Initing\n"); 
 
	 
	OSInit();		//uCOS-II初始化 
	printf("OS Initing\n"); 
 
	//OSTimeSet(0); 
   	printf("OS Time setting\n"); 
  
    ver = OSVersion(); 
    printf("OS Version: %d\n",ver); 
   
 
 
	OSTaskCreate( Main_Task, (void *)0, (OS_STK *)&Main_Task_Stack[TASK_STACK_SIZE-1], Main_Task_PRIO ) ; 
	OSTaskCreate( Task1, (void *)0, (OS_STK *)&Task1_Stack[TASK_STACK_SIZE-1],Task1_PRIO ) ; 
	OSTaskCreate( Task2, (void *)0, (OS_STK *)&Task2_Stack[TASK_STACK_SIZE-1],Task2_PRIO ) ; 
         
   // ARMTargetInit();     
	//ARMTargetStart();		//start the ARM target running 
	//EnableIrq(BIT_TIMER0); 
    printf("OS Starting\n\n"); 
 
	OSStart();		//Start uCOS-II 
 
     
} 
//*****************************************************************************