📄 memtest.c
字号:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
* All Rights Reserved
*
* V2.00
*
* EXAMPLE #3
*********************************************************************************************************
*/
#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);
//
extern void Display_Start_Picture(void);
extern void Display_Signal_Qual(unsigned char S_Q);
extern void Display_Bat_Lvl(unsigned char B_L);
extern void Display_SM(unsigned char Y_N);
extern void Display_Ser(unsigned char Ser);
extern void Display_Date(unsigned char YearH,
unsigned char YearL,
unsigned char MonthH,
unsigned char MonthL,
unsigned char DateH,
unsigned char DateL);
extern void Display_Time(unsigned char HourH,
unsigned char HourL,
unsigned char MinuteH,
unsigned char MinuteL,
unsigned char CTL);
extern void Display_Local_Num(unsigned char rom * ptrNum);
extern void Display_Lock(unsigned char Lock_State);
//
/*
*********************************************************************************************************
* 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 512 /* 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--;
/* _asm
movf STKPTR,0,0
lfsr 2,0x300
movwf POSTINC2,0
movff TOSU,POSTINC2
movff TOSH,POSTINC2
movff TOSL,POSTINC2
movlw 50
lfsr 2,0x300
rd_lloop:
tblrdpostinc
movff TABLAT,POSTINC2
decf WREG,0x00,0
bnz rd_lloop
_endasm
*/
}
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;
// char s[100];
// char s[80];
INT16S key;
INT8U err;
rom INT8U *msg;
unsigned short long slint;
INT16U times;
INT8U localH;
INT8U localM;
INT8U localS;
times=0x0030;
localH=17;
localM=15;
localS=0; //16:55:00
data = data; /* Prevent compiler warning */
Do_LCD_Init();
Func_Start_TMR1();
Func_Start_UART();
Do_Clear_Screen(0,0,7,127);
// 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_1_PRIO] = OSQCreate(MsgQueueTbl[TASK_1_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_2_PRIO] = OSQCreate(MsgQueueTbl[TASK_2_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_3_PRIO] = OSQCreate(MsgQueueTbl[TASK_3_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_4_PRIO] = OSQCreate(MsgQueueTbl[TASK_4_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_5_PRIO] = OSQCreate(MsgQueueTbl[TASK_5_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_6_PRIO] = OSQCreate(MsgQueueTbl[TASK_6_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_7_PRIO] = OSQCreate(MsgQueueTbl[TASK_7_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_8_PRIO] = OSQCreate(MsgQueueTbl[TASK_8_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_9_PRIO] = OSQCreate(MsgQueueTbl[TASK_9_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_10_PRIO] = OSQCreate(MsgQueueTbl[TASK_10_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_11_PRIO] = OSQCreate(MsgQueueTbl[TASK_11_PRIO], MSG_QUEUE_SIZE); /* Create a message queue */
MsgQueue[TASK_12_PRIO] = OSQCreate(MsgQueueTbl[TASK_12_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(Task1, (void *)0, (rom void *)TaskStk[TASK_1_PRIO],TASK_1_PRIO);
OSTaskCreate(Task2, (void *)0, (rom void *)TaskStk[TASK_2_PRIO],TASK_2_PRIO);
OSTaskCreate(Task3, (void *)0, (rom void *)TaskStk[TASK_3_PRIO],TASK_3_PRIO);
OSTaskCreate(Task4, (void *)0, (rom void *)TaskStk[TASK_4_PRIO],TASK_4_PRIO);
OSTaskCreate(Task5, (void *)0, (rom void *)TaskStk[TASK_5_PRIO],TASK_5_PRIO);
OSTaskCreate(Task6, (void *)0, (rom void *)TaskStk[TASK_6_PRIO],TASK_6_PRIO);
OSTaskCreate(Task7, (void *)0, (rom void *)TaskStk[TASK_7_PRIO],TASK_7_PRIO);
OSTaskCreate(Task8, (void *)0, (rom void *)TaskStk[TASK_8_PRIO],TASK_8_PRIO);
OSTaskCreate(Task9, (void *)0, (rom void *)TaskStk[TASK_9_PRIO],TASK_9_PRIO);
OSTaskCreate(Task10, (void *)0, (rom void *)TaskStk[TASK_10_PRIO],TASK_10_PRIO);
OSTaskCreate(Task11, (void *)0, (rom void *)TaskStk[TASK_11_PRIO],TASK_11_PRIO);
OSTaskCreate(Task12, (void *)0, (rom void *)TaskStk[TASK_12_PRIO],TASK_12_PRIO);
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{
slint=(unsigned short long)msg;
if(slint<0x11a006 || slint>=0x11c006){
CheckBytes[0]=TASK_START_PRIO+64;
CheckBytes[1]=0xe1;
CheckAddr=msg;
LoopForTest();
}
if(msg[TASK_1_PRIO]==TASK_1_PRIO && msg[TASK_2_PRIO]==TASK_2_PRIO &&
msg[TASK_3_PRIO]==TASK_3_PRIO && msg[TASK_4_PRIO]==TASK_4_PRIO &&
msg[TASK_5_PRIO]==TASK_5_PRIO && msg[TASK_6_PRIO]==TASK_6_PRIO &&
msg[TASK_7_PRIO]==TASK_7_PRIO && msg[TASK_8_PRIO]==TASK_8_PRIO &&
msg[TASK_9_PRIO]==TASK_9_PRIO && msg[TASK_10_PRIO]==TASK_10_PRIO &&
msg[TASK_11_PRIO]==TASK_11_PRIO && msg[TASK_12_PRIO]==TASK_12_PRIO &&
msg[TASK_13_PRIO]==TASK_13_PRIO){
_asm
BTG LATC,1,0
_endasm
if(times&0x0001){
localS++;
if(localS>=60){
localS=0;
localM++;
if(localM>=60){
localM=0;
localH++;
if(localH>=24) localH=0;
}
}
i=Disp_Word(0,0,times,1);
Display_Time(localH/10+0x30,localH%10+0x30,localM/10+0x30,localM%10+0x30,0);
}
else{
Display_Time(localH/10+0x30,localH%10+0x30,localM/10+0x30,localM%10+0x30,1);
}
// if(times&0x0001)
// Display_Start_Picture();
// else
// Do_Clear_Screen(0,0,7,127);
// i=Disp_Word(0,0,times,1);
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;
//CheckBytes[1]=(INT8U)((msg>>16)&0xff);
//CheckBytes[2]=(INT8U)((msg>>8)&0xff);
//CheckBytes[3]=(INT8U)(msg&0xff);
LoopForTest();
}
err=OSMemPut(MemPtr,msg);
if(err!=OS_NO_ERR){
CheckBytes[0]=TASK_START_PRIO+128;
CheckAddr=msg;
LoopForTest();
}
}
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* TASK #1
*
* Description: This task executes 5 times per second but doesn't do anything.
*********************************************************************************************************
*/
void Task1 (void *data)
{
rom INT8U *msg;
INT8U err;
rom INT8U *addr1;
INT8U i;
data = data;
for (;;) {
/* addr1=OSMemGet(MemPtr,&err);
if(err!=OS_NO_ERR){
CheckBytes[0]=TASK_1_PRIO+64;
CheckAddr=addr1;
LoopForTest();
}
msg = (rom INT8U *)OSQPend(MsgQueue[TASK_1_PRIO],0, &err);
err=OSMemPut(MemPtr,addr1);
if(err!=OS_NO_ERR){
CheckBytes[0]=TASK_1_PRIO+32;
CheckAddr=msg;
LoopForTest();
}
*/
msg = (rom INT8U *)OSQPend(MsgQueue[TASK_1_PRIO],0, &err);
// if((unsigned short long)msg<0x11a006 || (unsigned short long)msg>=0x11C006
if((unsigned short long)msg<0x11a006 || (unsigned short long)msg>=0x11C006){
CheckBytes[0]=TASK_1_PRIO+64;
CheckBytes[1]=err;
CheckAddr=msg;
LoopForTest();
}
else if(msg[TASK_2_PRIO]!=TASK_2_PRIO
|| msg[TASK_3_PRIO]!=TASK_3_PRIO
|| msg[TASK_4_PRIO]!=TASK_4_PRIO
|| msg[TASK_5_PRIO]!=TASK_5_PRIO
|| msg[TASK_6_PRIO]!=TASK_6_PRIO
|| msg[TASK_7_PRIO]!=TASK_7_PRIO
|| msg[TASK_8_PRIO]!=TASK_8_PRIO
|| msg[TASK_9_PRIO]!=TASK_9_PRIO
|| msg[TASK_10_PRIO]!=TASK_10_PRIO
|| msg[TASK_11_PRIO]!=TASK_11_PRIO
|| msg[TASK_12_PRIO]!=TASK_12_PRIO
|| msg[TASK_13_PRIO]!=TASK_13_PRIO){
CheckBytes[0]=TASK_1_PRIO;
CheckBytes[1]=err;
for(i=1;i<14;i++) CheckBytes[i+1]=msg[i];
CheckAddr=msg;
//CheckBytes[1]=(INT8U)((msg>>16)&0xff);
//CheckBytes[2]=(INT8U)((msg>>8)&0xff);
//CheckBytes[3]=(INT8U)(msg&0xff);
LoopForTest();
}
else{
addr1=OSMemGet(MemPtr,&err);
for(i=1;i<16;i++) addr1[i]=0xEE;
if(err!=OS_NO_ERR){
CheckBytes[0]=TASK_1_PRIO+80;
CheckAddr=addr1;
LoopForTest();
}
msg[TASK_1_PRIO]=TASK_1_PRIO;
for(i=1;i<16;i++) addr1[i]=msg[i];
OSQPost(MsgQueue[TASK_START_PRIO],addr1);
err=OSMemPut(MemPtr,msg);
if(err!=OS_NO_ERR){
CheckBytes[0]=TASK_1_PRIO+96;
CheckAddr=msg;
LoopForTest();
}
// msg[TASK_1_PRIO]=TASK_1_PRIO;
// OSQPost(MsgQueue[TASK_START_PRIO],msg);
// OSQPost(MsgQueue[TASK_START_PRIO],(rom INT8U *)8191);
}
/* //OS_ENTER_CRITICAL();
for(i=1;i<16;i++) CheckBytes[i]=msg[i];
//OS_EXIT_CRITICAL();
if(CheckBytes[TASK_13_PRIO]!=TASK_13_PRIO
|| CheckBytes[TASK_12_PRIO]!=TASK_12_PRIO
|| CheckBytes[TASK_11_PRIO]!=TASK_11_PRIO
|| CheckBytes[TASK_10_PRIO]!=TASK_10_PRIO
|| CheckBytes[TASK_9_PRIO]!=TASK_9_PRIO
|| CheckBytes[TASK_8_PRIO]!=TASK_8_PRIO
|| CheckBytes[TASK_7_PRIO]!=TASK_7_PRIO
|| CheckBytes[TASK_6_PRIO]!=TASK_6_PRIO
|| CheckBytes[TASK_5_PRIO]!=TASK_5_PRIO
|| CheckBytes[TASK_4_PRIO]!=TASK_4_PRIO
|| CheckBytes[TASK_3_PRIO]!=TASK_3_PRIO
|| CheckBytes[TASK_2_PRIO]!=TASK_2_PRIO){
CheckBytes[0]=TASK_1_PRIO;
LoopForTest();
}
addr1=OSMemGet(MemPtr,&err);
for(i=0;i<16;i++){
addr1[i]=msg[i];
}
addr1[TASK_1_PRIO]=TASK_1_PRIO;
//OS_ENTER_CRITICAL();
for(i=1;i<16;i++) CheckBytes[i]=addr1[i];
//OS_EXIT_CRITICAL();
if(CheckBytes[TASK_13_PRIO]!=TASK_13_PRIO
|| CheckBytes[TASK_12_PRIO]!=TASK_12_PRIO
|| CheckBytes[TASK_11_PRIO]!=TASK_11_PRIO
|| CheckBytes[TASK_10_PRIO]!=TASK_10_PRIO
|| CheckBytes[TASK_9_PRIO]!=TASK_9_PRIO
|| CheckBytes[TASK_8_PRIO]!=TASK_8_PRIO
|| CheckBytes[TASK_7_PRIO]!=TASK_7_PRIO
|| CheckBytes[TASK_6_PRIO]!=TASK_6_PRIO
|| CheckBytes[TASK_5_PRIO]!=TASK_5_PRIO
|| CheckBytes[TASK_4_PRIO]!=TASK_4_PRIO
|| CheckBytes[TASK_3_PRIO]!=TASK_3_PRIO
|| CheckBytes[TASK_2_PRIO]!=TASK_2_PRIO
|| CheckBytes[TASK_1_PRIO]!=TASK_1_PRIO){
CheckBytes[0]=TASK_1_PRIO;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -