www.pudn.com > 44B0X_uCOS276.rar > Main.c
/****************************************************************************
【文 件 名 称】main.c
【功 能 描 述】三星S3C44B0X板 uC/OS-II 程序代码
【程 序 版 本】1.0
【创建人及创建日期】龚俊//2003-12-19 10:57
【修改人及修改日期】龚俊//2004-6-6 23:27
****************************************************************************/
#include "def.h"
#include "option.h"
#include "44blib.h"
#include "44b.h"
#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 4
OS_STK Task1_Stack[TASK_STACK_SIZE];
void Task1( void *Id ) ;
#define Task1_PRIO 5
OS_STK Task2_Stack[TASK_STACK_SIZE];
void Task2( void *Id ) ;
#define Task2_PRIO 6
OS_STK TestTaskStk[100];
void EINT0ISR(void)
{
Uart_Printf("EINT0! ");
}
//****************************************************************************
void Task1(void *Id)
{
ARMStartTimer();
// OSStatInit();
// Uart_Printf("Task1() called\n");
for (;;)
{
// OSSchedLock();
Uart_Printf("task 1 turned");
// OSSchedUnlock();
OSTimeDly(10);
}
}
void Task2(void *Id)
{
// Uart_Printf("Task2() called\n");
for (;;)
{
// OSSchedLock();
Uart_Printf("task 2 turned");
// OSSchedUnlock();
OSTimeDly(10);
}
}
//*****************************************************************************
/******************************************************************************
【功能说明】主任务,在本任务中启动系统定时器并创建其他任务
******************************************************************************/
/*
void Main_Task( void *Id )
{
U8 err ;
ARMStartTimer();
OSStatInit();
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], Task1_PRIO ) ;
for( ; ; )
{
OSTimeDly(2000);
OSSemPend(UART0_SEM, 0, &err) ; //挂起当前任务直至其他任务或中断置起信号量
Uart_Printf( "++++++++++++++++++++++++++++++++++++++" ) ;
Uart_Printf( "OSCPUUsage = %d%% \n", OSCPUUsage ) ;
OSSemPost(UART0_SEM) ; //置起指定的信号量
}
}
*/
INT32U count1=0;
void TestTask (void *pdata)
{
pdata=pdata;
ARMTargetStart();
ARMStartTimer();
Led_Set(0x0f);
while(1)
{
OSTimeDly(1);
count1++;
// if(count1>30000) Led_Set(0x0f);
// else Led_Set(0x0);
if(count1==60000) count1=0;
}
}
void Eint0Isr(void)
{
Uart_Printf("eint0");
rI_ISPC= BIT_EINT0;
}
/******************************************************************************
【功能说明】系统主函数
******************************************************************************/
void Main(void)
{
U16 ver ;
/* Uart_Init( 0, 115200 ); //设置串口0的速率为115200bps
Uart_Select(0);
rINTCON=0x5; // Non-vectored,IRQ enable,FIQ disable
rINTMOD=0x0; // All=IRQ mode
rPCONG=0x57ff; //PortG[0~4] EINT MODE,PortG[5~7] OU
pISR_EINT0=(int)Eint0Isr;//设置外部0的中断向量
rEXTINTPND=0xf; //clear EXTINTPND reg.
rI_ISPC= BIT_EINT0; //clear pending_bit
rINTMSK=~(BIT_GLOBAL | BIT_EINT0); //External interrupt0,1 check..
while(1)
{
Uart_Printf("yes");
Delay(10000);
}
Led_Set(0x0);
Led_Set(0x0f);
*/
ARMTargetInit();
// Uart_Printf("\n\nTarget Initing\n");
OSInit(); //uCOS-II初始化
// Uart_Printf("OS Initing\n");
OSTimeSet(0);
// Uart_Printf("OS Time setting\n");
ver = OSVersion();
Uart_Printf("OS Version: %d\n",ver);
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 ) ;
//Led_Set(0x0);
// OSTaskCreate(TestTask,(void *)0,&TestTaskStk[99],0);
//start the ARM target running
// Uart_Printf("OS Starting\n\n");
ARMTargetStart();
OSStart(); //Start uCOS-II
/* never reached */
}
//*****************************************************************************