📄 main.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 + -