📄 timertest.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 "UserTimer.h"
#include "includes.h"
//external functions
//hardware part
extern void HW_Bd_Init(void);
extern void HW_Bd_Test(void);
extern void Func_Start_I2C(void);
//LCD control part and display part
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 TimerMgtInit(void);
//
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 TimerManager(OS_EVENT *);
extern void Display_Lock(unsigned char Lock_State);
extern void FileSysInit(void);
extern INT8U FileOpen(INT8U File_ID);
extern INT8U FileSave(INT8U FileHandle, INT16U Position, INT8U rom * ptrData, INT16U DataLen);
extern INT8U FileRead(INT8U FileHandle, INT16U Position, INT8U rom * ptrData, INT16U DataLen);
//
/*
*********************************************************************************************************
* CONSTANTS
*********************************************************************************************************
*/
#define MSG_QUEUE_SIZE 8 /* Size of message queue used in example */
#define TASK_STK_SIZE 311 /* Size of each task's stacks */
#define N_TASKS 62 /* 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];
#pragma romdata EXTMEM
rom unsigned char MemFill[6];
rom unsigned char MemAreaS[2048];
rom unsigned char MemAreaL[8192];
#pragma udata
//OS_EVENT *MsgQueue; /* Message queue pointer */
OS_MEM *pMemSml;
OS_MEM *pMemLge;
unsigned char DebugReadLength;
rom unsigned char *DebugReadAddr;
unsigned char DebugContent[48];
//INT8U ResForTest[50];
#pragma romdata EXTRAM
//rom INT8U * rom UnusedMem[32];
OS_EVENT *rom MsgQueue[N_TASKS]; /* Message queue pointer */
OS_EVENT *rom peventDEBUG;
OS_EVENT *rom peventWICResp;
OS_EVENT *rom peventHardware;
OS_EVENT *rom peventWIC;
OS_EVENT *rom peventMCNM;
OS_EVENT *rom peventDVS;
rom void *rom MsgQueueTbl[N_TASKS][MSG_QUEUE_SIZE]; /* Storage for messages */
OS_EVENT *rom DisplaySem;
OS_EVENT *rom EepromSem;
/*
*********************************************************************************************************
* 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);
void Task14(void *data);
extern void tskDebug(void *data);
extern void tskWICResp(void *data);
extern void tskHardware(void *data);
extern unsigned char Func_ChangeCOMMode(unsigned char mode);
INT8U rom TestRomData[100];
/*$PAGE*/
/*
*********************************************************************************************************
* MAIN
*********************************************************************************************************
*/
void OSTrap(INT8U taskid)
{
INT8U i;
DebugReadLength=16;
OS_ENTER_CRITICAL();
for(;;){
i=taskid;
i=taskid;
i=taskid;
DebugReadLength=STKPTR+STKPTR+STKPTR;
for(i=0;i<DebugReadLength;){
DebugContent[i++]=TOSL;
DebugContent[i++]=TOSH;
DebugContent[i++]=TOSU;
if(i>=48) break;
STKPTR--;
}
for(;;){
// for(i=0;i<DebugReadLength;i++)
// DebugContent[i]=*(DebugReadAddr++);
i=taskid;
i=taskid;
i=taskid;
}
}
OS_EXIT_CRITICAL();
}
void LoopForTest(void)
{
INT8U i;
i=0;
OS_ENTER_CRITICAL();
for(;;){
// i++;
// i--;
DebugReadLength=STKPTR+STKPTR+STKPTR;
for(i=0;i<DebugReadLength;){
DebugContent[i++]=TOSL;
DebugContent[i++]=TOSH;
DebugContent[i++]=TOSU;
if(i>=48) break;
STKPTR--;
}
for(;;){
i=i;
i=i;
}
}
OS_EXIT_CRITICAL();
}
void main (void)
{
Func_Brd_Init();
Do_LCD_Init();
HW_Bd_Test();
Func_ChangeCOMMode(1);
Do_Clear_Screen(0,0,7,127);
OSInit(); /* Initialize uC/OS-II */
OSTaskCreate(TaskStart, (void *)0, (rom void *)TaskStk[TASK_START_PRIO],TASK_START_PRIO);
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;
data = data; /* Prevent compiler warning */
// Do_LCD_Init();
TimerMgtInit();
Func_Start_TMR1();
Func_Start_UART();
Func_Start_I2C();
// Do_Clear_Screen(0,0,7,127);
// OSStatInit(); /* Initialize uC/OS-II's statistics */
pMemSml=OSMemCreate(MemAreaS,64,32,&err); //2KB
pMemLge=OSMemCreate(MemAreaL,32,256,&err); //8KB
if(err!=OS_NO_ERR){
CheckBytes[0]=255;
CheckAddr=msg;
OSTrap(255);
}
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 */
peventDEBUG=OSQCreate(MsgQueueTbl[TASK_DEBUG_PRIO],MSG_QUEUE_SIZE);
peventWICResp=OSQCreate(MsgQueueTbl[TASK_WICRESP_PRIO],MSG_QUEUE_SIZE);
peventHardware = OSQCreate(MsgQueueTbl[TASK_HARDWARE_PRIO],MSG_QUEUE_SIZE);
DisplaySem=OSSemCreate(1);
EepromSem=OSSemCreate(1);
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);
OSTaskCreate(Task14, (void *)0, (rom void *)TaskStk[14],29); //14
OSTaskCreate(tskDebug, (void *)0, (rom void *)TaskStk[TASK_DEBUG_PRIO],TASK_DEBUG_PRIO);
OSTaskCreate(tskWICResp, (void *)0, (rom void *)TaskStk[TASK_WICRESP_PRIO],TASK_WICRESP_PRIO);
OSTaskCreate(tskHardware, (void *)0, (rom void *)TaskStk[TASK_HARDWARE_PRIO],TASK_HARDWARE_PRIO);
for(;;){
TimerManager(MsgQueue[TASK_START_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;
OSTrap(TASK_START_PRIO+64);
}
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
}
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);
OSTrap(TASK_START_PRIO);
}
err=OSMemPut(pMemSml,msg);
if(err!=OS_NO_ERR){
CheckBytes[0]=TASK_START_PRIO+128;
CheckAddr=msg;
OSTrap(TASK_START_PRIO+128);
}
}
}
*/
}
/*$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;
INT8U toggle=0;
TIMER_MESSAGE *rmsg;
TIMER_MESSAGE *addr1;
// rom INT8U *rmsg;
// rom INT8U *addr1;
data = data;
addr1=(TIMER_MESSAGE *)OSMemGet(pMemSml,&err);
if(err!=OS_NO_ERR){
OSTrap(TASK_1_PRIO+32);
}
// addr1[0]=8
// addr1[1]=TASK_1_PRIO;
// addr1[2]=TASK_TIMER_PRIO;
// addr1[3]=Timer_Start;
// addr1[4]=1;
// addr1[5]=0;
// addr1[6]=50;
// addr1[7]=0;
addr1->Len=8;
addr1->Src=TASK_1_PRIO;
addr1->Des=TASK_TIMER_PRIO;
addr1->MID=Timer_Start;
addr1->TID=0x1234;
addr1->Val=50;
OSQPost(MsgQueue[TASK_TIMER_PRIO],(rom INT8U *)addr1);
for (;;) {
msg = (rom INT8U *)OSQPend(MsgQueue[TASK_1_PRIO],0, &err);
if((unsigned short long)msg<0x11a006 || (unsigned short long)msg>=0x11C006){
OSTrap(TASK_1_PRIO+64);
}
else{
rmsg=(TIMER_MESSAGE *)msg;
if(rmsg->Src==TASK_TIMER_PRIO && rmsg->Des==TASK_1_PRIO && rmsg->MID==Timer_TimeOut){
if(toggle>=10){
_asm
// BTG LATC,1,0
BSF LATC,1,0
_endasm
toggle=0;
}
else{
_asm
BCF LATC,1,0
_endasm
}
toggle++;
/*
OSSemPend (DisplaySem,0,&err);
if(err!=OS_NO_ERR) OSTrap(TASK_1_PRIO+48);
if(toggle){
(void)Disp_Word(16,16,0x0036,0);
toggle=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -