📄 taskswitch.c
字号:
#define EX3_GLOBALS
#include "includes.h"
extern void HW_Bd_Init(void);
extern void HW_Bd_Test(void);
extern void Do_LCD_Init(void);
extern void Do_Clear_Screen(unsigned char,INT8U,INT8U,INT8U);
extern unsigned char Disp_Word(unsigned char PosX,unsigned char PosY,unsigned int unicode,unsigned char Type);
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define TASK_START_PRIO 0 /* Application tasks priorities */
#define TASK_1_PRIO 1
#define TASK_2_PRIO 2
#define TASK_3_PRIO 3
#define TASK_4_PRIO 4
#define TASK_5_PRIO 5
#define TASK_6_PRIO 6
#define TASK_7_PRIO 7
#define TASK_8_PRIO 8
#define TASK_9_PRIO 9
#define TASK_10_PRIO 10
#define TASK_11_PRIO 11
#define TASK_12_PRIO 12
#define TASK_13_PRIO 13
#define MSG_QUEUE_SIZE 8 /* Size of message queue used in example */
#define TASK_STK_SIZE 256 /* Size of each task's stacks */
#define N_TASKS 14 /* Number of identical tasks */
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
OS_EVENT *RandomSem;
INT8U chrCurHandle;
INT8U CheckBytes[16];
rom INT8U *CheckAddr;
#pragma romdata EXTSTK
OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];
//OS_STK TaskStartStk[TASK_STK_SIZE]; /* Startup task stack */
//OS_STK Task1Stk[TASK_STK_SIZE]; /* Task #1 task stack */
//OS_STK Task2Stk[TASK_STK_SIZE]; /* Task #2 task stack */
//OS_STK Task3Stk[TASK_STK_SIZE]; /* Task #3 task stack */
//OS_STK Task4Stk[TASK_STK_SIZE]; /* Task #4 task stack */
//OS_STK Task5Stk[TASK_STK_SIZE]; /* Task #5 task stack */
//OS_STK Task6Stk[TASK_STK_SIZE]; /* Task #6 task stack */
//OS_STK Task7Stk[TASK_STK_SIZE]; /* Task #7 task stack */
//OS_STK Task8Stk[TASK_STK_SIZE]; /* Task #8 task stack */
//OS_STK Task9Stk[TASK_STK_SIZE]; /* Task #9 task stack */
#pragma romdata EXTMEM
rom unsigned char MemFill[6];
rom unsigned char MemArea[24570];
#pragma udata
// rom char one[]="1--The first message--1";
// rom char two[]="2--The first message--2";
// rom char three[]="3--The first message--3";
//OS_EVENT *MsgQueue; /* Message queue pointer */
OS_MEM *MemPtr;
INT8U ResForTest[50];
#pragma romdata EXTRAM
//rom INT8U * rom UnusedMem[32];
OS_EVENT *rom MsgQueue[N_TASKS]; /* Message queue pointer */
rom void *rom MsgQueueTbl[N_TASKS][MSG_QUEUE_SIZE]; /* Storage for messages */
/*
*********************************************************************************************************
* FUNCTION PROTOTYPES
*********************************************************************************************************
*/
void TaskStart(void *data); /* Function prototypes of tasks */
void Task1(void *data);
void Task2(void *data);
void Task3(void *data);
void Task4(void *data);
void Task5(void *data);
void Task6(void *data);
void Task7(void *data);
void Task8(void *data);
void Task9(void *data);
void Task10(void *data);
void Task11(void *data);
void Task12(void *data);
void Task13(void *data);
/*$PAGE*/
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
void LoopForTest(void)
{
INT8U i;
i=0;
OS_ENTER_CRITICAL();
for(;;){
i++;
i--;
}
OS_EXIT_CRITICAL();
}
void main (void)
{
// PC_DispClrScr(DISP_BGND_BLACK); /* Clear the screen */
Func_Brd_Init();
HW_Bd_Test();
OSInit(); /* Initialize uC/OS-II */
// PC_DOSSaveReturn(); /* Save environment to return to DOS */
// PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */
// PC_ElapsedInit(); /* Initialized elapsed time measurement */
// TaskUserData[TASK_START_ID].TaskID=TASK_START_ID;
// strcpy(TaskUserData[TASK_START_ID].TaskName,"StartTask");
OSTaskCreate(TaskStart, (void *)0, (rom void *)TaskStk[TASK_START_PRIO],TASK_START_PRIO);
// OSTaskCreateExt(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE-1], TASK_START_PRIO,
// TASK_START_ID, &TaskStartStk[0], TASK_STK_SIZE, &TaskUserData[TASK_START_ID], 0);
OSStart(); /* Start multitasking */
}
/*$PAGE*/
/*
*********************************************************************************************************
* STARTUP TASK
*********************************************************************************************************
*/
void TaskStart (void *data)
{
UBYTE i;
INT16S key;
INT8U err;
rom INT8U *msg;
unsigned short long slint;
INT16U times=0x0030;
data = data; /* Prevent compiler warning */
Func_Start_TMR1();
Func_Start_UART();
// OSStatInit(); /* Initialize uC/OS-II's statistics */
MemPtr=OSMemCreate(MemArea,32,256,&err);
if(err!=OS_NO_ERR){
CheckBytes[0]=255;
CheckAddr=msg;
LoopForTest();
}
MsgQueue[TASK_START_PRIO] = OSQCreate(MsgQueueTbl[TASK_START_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_13_PRIO] = OSQCreate(MsgQueueTbl[TASK_13_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
OSTaskCreate(Task13, (void *)0, (rom void *)TaskStk[TASK_13_PRIO],TASK_13_PRIO);
for (;;) {
msg = (rom INT8U *)OSQPend(MsgQueue[TASK_START_PRIO],0, &err);
if(msg==(rom INT8U *)0){
_asm
BTG LATA,0,0
_endasm
}
else{
if(msg[TASK_13_PRIO]==TASK_13_PRIO){
_asm
BTG LATC,1,0
_endasm
times++;
if(times>0x0039) times=0x0030;
}
else{
CheckBytes[0]=TASK_START_PRIO;
for(i=1;i<14;i++) CheckBytes[i+1]=msg[i];
CheckAddr=msg;
LoopForTest();
}
}
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* TASK #1
*
* Description: This task executes 5 times per second but doesn't do anything.
*********************************************************************************************************
*/
void Task13 (void *data)
{
rom INT8U *msg;
INT8U err;
INT8U i;
rom INT8U *addr1;
unsigned short long slint;
INT16U blocks;
blocks=0;
data = data;
for (;;) {
OSTimeDly(20); /* Wait one second */
msg=(rom INT8U *)0x11a006; //OSMemGet(MemPtr,&err);
slint=(unsigned short long)msg;
if(slint<0x11a006 || slint>=0x11c006){
CheckBytes[0]=TASK_13_PRIO+64;
CheckBytes[1]=0xe1;
CheckAddr=msg;
LoopForTest();
}
err=(INT8U)(slint & 0xff);
if(err!=6){
CheckBytes[0]=TASK_13_PRIO+128;
CheckBytes[1]=0xe2;
CheckAddr=msg;
LoopForTest();
}
for(i=0;i<32;i++)
msg[i]=0xee;
msg[TASK_13_PRIO]=TASK_13_PRIO;
OSQPost(MsgQueue[TASK_START_PRIO],msg);
}
}
//===================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -