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

📄 main.c

📁 基于S3C2440移植的uC/OS-II最新源码(V2.83)
💻 C
字号:

// *************************************************
// 这是学ARM9和ADS1.2的一个很好的例程,这个例程简单易懂。
// 这个例程可以用开发板是的LED灯和仿真器来测试硬件的好坏,
// 还可以CACHE对程序运行速度的影响,测试设置FCLK的频率。
// LED test
//2004.10.25
//***************************************************

#include "config.h"


//=======================================
#include "app_cfg.h"
#include "Printf.h"
//=========================================
OS_STK  MainTaskStk[MainTaskStkLengh];
OS_STK	Task0Stk [Task0StkLengh];       // Define the Task0 stack 
OS_STK	Task1Stk [Task1StkLengh];       // Define the Task1 stack 
OS_STK	Task2Stk [Task2StkLengh];       // Define the Task1 stack 

int rYear, rMonth,rDay,rDayOfWeek,rHour,rMinute,rSecond;


void Rtc_Init(void);

void Task_LCD(void *p);

OS_EVENT *Semp;                         //Creat semp
U8 err;

int Main(int argc, char **argv)
{
	
	//初始化目标板
	TargetInit(); 
	
	//初始化uC/OS   
   	OSInit ();	 
   	
   	//初始化系统时基
   	OSTimeSet(0);
   	
   	//创建系统初始任务
   	OSTaskCreate (MainTask,(void *)0, &MainTaskStk[MainTaskStkLengh - 1], MainTaskPrio);																										
	
	OSStart ();
	
	return 0;
}

void MainTask(void *pdata) //Main Task create taks0 and task1
{
   
   #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */
   OS_CPU_SR  cpu_sr;
   #endif
   OS_ENTER_CRITICAL();
  	
	Timer0Init();//initial timer0 for ucos time tick
	ISRInit();   //initial interrupt prio or enable or disable
	//GUI_Init();
	OS_EXIT_CRITICAL();
	
	OSPrintfInit();//use task to print massage to Uart 
	
	OSStatInit();
	OSTaskCreate (Task0,(void *)0, &Task0Stk[Task0StkLengh - 1], Task0Prio);	
	OSTaskCreate (Task1,(void *)0, &Task1Stk[Task1StkLengh - 1], Task1Prio);	
	OSTaskCreate (Task2,(void *)0, &Task2Stk[Task2StkLengh - 1], Task2Prio);	 
	 while(1)
	 {
	 
	   //  GUI_DispString("hello word");
	  OSPrintf("\nEnter Main Task\n");
	  OSTimeDly(OS_TICKS_PER_SEC);
	 	 
	 }

}

void Task0	(void *pdata)//Init lwip and create task2
{
 
	char *s="msg";
	char i;
	
	while (1)
	{
    	
    OSPrintf("Enter Task0\n");	
    OSPrintf("CPU Usage: %d%%\n",OSCPUUsage); //cpu usage XX%

     OSTimeDly(OS_TICKS_PER_SEC);

	}
}

void Task1	(void *pdata) //task for test
{
	
	
	U16 TestCnt=0;
	U16 Version;


	Version=OSVersion();	
	
			
	while (1)
	{
	
	 TestCnt++;
     OSPrintf("********************************\n");
     OSPrintf("Enter Task1 Cnt=%d\n",TestCnt);	
     OSPrintf("Enter Task1\n");
     OSPrintf("uC/OS Version:V%4.2f\n",(float)Version*0.01);//ucos version 
     OSPrintf("********************************\n");
     
     //led 
     if(TestCnt%2)
     	rGPBDAT = 0x0000;
     else
    	rGPBDAT = 0x07fe;
    	
     OSTimeDly(OS_TICKS_PER_SEC);

	}
}



#define RGB(r,g,b)   (unsigned int)( (r << 16) + (g << 8) + b )
#define FROM_BCD(n)		((((n) >> 4) * 10) + ((n) & 0xf))
#define TO_BCD(n)		((((n) / 10) << 4) | ((n) % 10))

void Task2(void *pdata)
{
    unsigned int i, x, m, n, k, y;
    int tmp,key;         

    int width = 10;
    int height = 100;
        
    OSPrintf("Task LCD Running...\r\n");


    //===========================
    // RTC初始化
    //===========================
    Rtc_Init();
	
	//LCD 初始化
	Lcd_N35_Init();

    while(1)
    {
    
    	i++;
    	if(i>99)i=0;

		if(rBCDYEAR==0x99)
			rYear = 1999;
		else
			rYear    = (2000 + rBCDYEAR);
			rMonth   = FROM_BCD(rBCDMON & 0x1f);
			rDay		= FROM_BCD(rBCDDAY & 0x03f);
			rDayOfWeek = rBCDDATE-1;
			rHour    = FROM_BCD(rBCDHOUR & 0x3f);
			rMinute     = FROM_BCD(rBCDMIN & 0x7f);
			rSecond     = FROM_BCD(rBCDSEC & 0x7f);

        
       OSTimeDly( 5 );
       OSPrintf("Task LCD.\n");
       //在LCD上打印时间
       Lcd_printf(100,0,RGB( 0xFF,0xFF,0xFF),RGB( 0x00,0x00,0x00),0,"%02d:%02d:%02d\n", rHour, rMinute, rSecond);
       //在LCD上打印日期,星期
       Lcd_printf(0,15,RGB( 0xFF,0xFF,0xFF),RGB( 0x00,0x00,0x00),0,"%4d-%02d-%02d 星期%d      中国移动\n",
        	      rYear, rMonth, rDay,rDayOfWeek);
       
       Lcd_printf(0,230,RGB( 0xFF,0xFF,0xFF),RGB( 0x00,0x00,0x00),0," 友善之臂uC/OS2任务演示中:%02d" , i);
       
 	   OSTimeDly(OS_TICKS_PER_SEC/5);
	 //  mydelay(100);
	
    }
}

//************************[ Rtc_Init ]*********************************
void Rtc_Init(void)
{
	int wYear, wMonth,wDay,wDayOfWeek,wHour,wMinute,wSecond;

    wYear = 2008;
    wMonth = 9;
    wDay = 5;
    wDayOfWeek = 5;
    wHour= 9;
    wMinute = 41;
    wSecond = 30;
	
	rRTCCON = 1 ;		//RTC read and write enable

	rBCDYEAR = (unsigned char)TO_BCD(wYear%100);	//年
    rBCDMON  = (unsigned char)TO_BCD(wMonth);		//月
    rBCDDAY	 = (unsigned char)TO_BCD(wDay);			//日	
	rBCDDATE = wDayOfWeek+1;						//星期
	rBCDHOUR = (unsigned char)TO_BCD(wHour);		//小时
	rBCDMIN  = (unsigned char)TO_BCD(wMinute);		//分
	rBCDSEC  = (unsigned char)TO_BCD(wSecond);		//秒
	
	rRTCCON &= ~1 ;		//RTC read and write disable
}

⌨️ 快捷键说明

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