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

📄 main.c

📁 ucos嵌入式在44b0x上的移植
💻 C
字号:
#include "..\startup\44b.h"
#include "..\inc\44blib.h"
#include "..\startup\option.h"
#include "..\inc\def.h"
#include "..\ucos-ii\includes.h"

void __irq Timer0Done(void);

void TimerInit(void)
{
  rINTCON = 0x1; // vectored IRQ enable
  rINTMOD = 0x0; // IRQ mode
  rINTMSK = ~(BIT_GLOBAL | BIT_TIMER0);

  pISR_TIMER0 = (int) OSTickISR;
//pISR_TIMER1 = (int) Timer1Done;



//  rTCFG0=0xf0f0f;	//dead zone=0,pre2=0xf,pre1=0xf,pre0=0xf
  rTCFG0 = 0x4a;
  rTCFG1 = 4;
  rTCNTB0 = 250;    //1ms 中断一次
//  rTCNTB0=0xffff;	//(1/(66MHz/15/32))*0xffff=0.48s
//   rTCNTB1=0xffff;	//(1/(66MHz/15/16))*0xffff=0.24s
   rTCON  = 2; 
   rTCON  = 9; 
 // rTCON=0x2222202;	//update T5/T4/T3/T2/T1/T0     
 //rTCON=0x5999909;	//T5/T4/T3/T2/T1=auto reload,T0=one shot,all_start

}


//**********************************************************
// THE MAIN FUNCTION BODY
//**********************************************************
#define	N_TASKS			8					// Number of tasks
#define	TASK_STK_SIZE	1024				// Stack size, in sizeof OS_STK, or int 32bit

OS_STK	TaskStk[N_TASKS][TASK_STK_SIZE];	// Tasks stacks

volatile int variable1;

void StartUp(void *);
void Task1(void *);
void Task2(void *);
void Task3(void *);

int Main(int argc, char **argv)
{
    Port_Init();
    ChangePllValue(0x48,0x02,0x01);
//     ChangePllValue(M_DIV,P_DIV,S_DIV);
//    rSYSCFG=CACHECFG;	// Using 8KB Cache//
    Uart_Init(0,115200);
    Uart_Select(0);
    Delay(0);

    Uart_Printf("\n ### Main Starts !\n");
    Delay(3000);


	OSInit();

    OSTaskCreate(StartUp,(void*)0, &TaskStk[0][TASK_STK_SIZE-1], 7);
	OSTaskCreate(Task1,  (void*)0, &TaskStk[1][TASK_STK_SIZE-1], 8);
	OSTaskCreate(Task2,  (void*)0, &TaskStk[2][TASK_STK_SIZE-1], 9);
    OSTaskCreate(Task3,  (void*)0, &TaskStk[3][TASK_STK_SIZE-1], 10);

	OSStart();
	return 0;
}

void StartUp(void *data)
{
    TimerInit();
    Uart_Init(0,115200);
    Uart_Select(0);

    for (;;) {
	
//     OSTaskDel (OS_PRIO_SELF); 
//       OSTaskSuspend(OS_PRIO_SELF);                          
	OSTaskDel(OS_PRIO_SELF);
    }
}

void Task1(void *data)
{
    UBYTE task_data1;

    task_data1 = 0;

    for (;;) {
	
        task_data1++;
        Uart_Printf("\ntask1 is running\n");

        OSSchedLock();
		Uart_Printf( "@@@\n");
		Uart_Printf( "@@@  task 1 running ... \n" );
		Uart_Printf( "@@@     Q__Q    \n" );
		Uart_Printf( "@@@    /____\\   \n" );
		Uart_Printf( "@@@    \\____/   \n" );
		Uart_Printf( "@@@     /\\/\\    \n" );
		Uart_Printf( "@@@  __(\\\\//)__ \n" );
		Uart_Printf( "@@@  >__/w w\\__< \n" );
		Uart_Printf( "@@@\n" );
		Uart_Printf( "@@@  go to sleep 200 time-ticks\n" );
		Uart_Printf( "@@@\n" );
		OSSchedUnlock();
        OSTimeDly(200);                            
    }
}

void Task2(void *data)
{
    UBYTE task_data2;

    task_data2 = 0;

    for (;;) {
	
        task_data2++;
        Uart_Printf("\ntask2 is running\n");

	OSSchedLock();
		Uart_Printf( "+++ \n" );
		Uart_Printf( "+++  task 2 running ... \n" );
		Uart_Printf( "+++  ╭︿︿︿╮ \n" );
		Uart_Printf( "+++ {/ o o \\} \n" );
		Uart_Printf( "+++  ( (oo) ) \n" );
		Uart_Printf( "+++      ︶ \n" );
		Uart_Printf( "+++ \n" );
		Uart_Printf( "+++  go to sleep 300 time-ticks\n" );
		Uart_Printf( "+++ \n" );
	OSSchedUnlock();
        OSTimeDly(300);                            
    }
}
void Task3(void *data)
{
    UBYTE task_data3;

    task_data3 = 0;

    for (;;) {
	
        task_data3++;
        Uart_Printf("\ntask3 is running\n");
        OSTimeDly(400);                            
    }
}
/*
void __irq Timer0Done(void)
{
    rI_ISPC=BIT_TIMER0;
    
    OS_ENTER_CRITICAL();
    OSIntNesting++;
    OS_EXIT_CRITICAL();

    OSTimeTick();
    OSIntExit();   
}

*/

⌨️ 快捷键说明

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