📄 tsksystime.c
字号:
#include "includes.h"
#include "funclcd.h"
#include "file.h"
#define SYS_TIMER_ID 0x8001
extern OS_MEM *pMemSml;
extern OS_MEM *pMemLge;
extern OS_EVENT *rom peventDEBUG;
extern OS_EVENT *rom peventWICResp;
extern OS_EVENT *rom peventHardware;
extern OS_EVENT *rom peventDVS;
extern OS_EVENT *rom peventMCNM;
extern OS_EVENT *rom peventTone;
extern OS_EVENT *rom peventSysTime;
extern OS_EVENT *rom peventTimer;
extern OS_EVENT *rom DisplaySem;
extern OS_EVENT *rom peventWICCmd;
extern INT8U rom MainWndType;
extern INT8U rom Mod_Rdy;
extern void Func_Clear_Msg(INT8U rom * pMsg);
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 OSTrap(INT8U taskid);
void Func_Enable_Time_Display(void);
void Func_Disable_Time_Display(void);
INT8U Func_DisplaySysTime(INT8U oddeven);
INT24U SysSecond;
#pragma romdata EXTRAM
INT8U rom SysYear,SysMonth,SysDate;
//INT8U rom TimeDisplayEnable;
#pragma code MYCODE
void tskSysTime(void * data){
void rom * pMsg;
INT8U err;
INT8U oddeven;
SysYear=0;
SysMonth=1;
SysDate=1;
SysSecond=0;
oddeven=0;
pMsg=OSMemGet(pMemSml,&err);
((MSG_HEAD *)pMsg)->Msg_ID=MSG_TIMER_START;
((MSG_HEAD *)pMsg)->Origin=peventSysTime; //should be changed to peventTimer
((MSG_HEAD *)pMsg)->pmemME=pMemSml;
((MSG_HEAD *)pMsg)->Attached=FALSE;
((MSG_HEAD *)pMsg)->LenOfBody=4;
((TIMER_MESSAGE *)pMsg)->TID=SYS_TIMER_ID;
((TIMER_MESSAGE *)pMsg)->Val=OS_TICKS_PER_SEC;
OSQPost(peventTimer,pMsg);
for(;;){
pMsg = OSQPend(peventSysTime, 0, &err);
if(err==OS_NO_ERR){
if((INT24U)pMsg < PTR_MAX){
switch (((MSG_HEAD *)pMsg)->Msg_ID){
case MSG_TIME_CORRECTION:
OS_ENTER_CRITICAL();
SysYear = ((MSG_TIMERPT *)pMsg) -> Year;
SysMonth = ((MSG_TIMERPT *)pMsg) -> Month;
SysDate = ((MSG_TIMERPT *)pMsg) -> Date;
SysSecond = ((MSG_TIMERPT *)pMsg) -> Second;
OS_EXIT_CRITICAL();
break;
case MSG_TIMER_EXPIRE:
OS_ENTER_CRITICAL();
SysSecond++;
if(SysSecond>=86400){
SysSecond=0; SysDate++;
if(SysDate>31){
SysDate=1; SysMonth++;
if(SysMonth>12){
SysMonth=1; SysYear++;
if(SysYear>=100) SysYear=0;
}
}
}
OS_EXIT_CRITICAL();
if((SysSecond % 60) == 30) OSQPost(peventWICCmd, (OS_EVENT *)MSG_TIME_QUERY);
if(SysYear == 0 && Mod_Rdy == TRUE) OSQPost(peventWICCmd, (OS_EVENT *)MSG_TIME_QUERY);
if(SysYear != 0){
OSQPost(peventDVS, (OS_EVENT *)MSG_SECOND_TICK);
}
break;
default:
OSTrap(TASK_SYSTIME_PRIO+96);
break;
}
Func_Clear_Msg(pMsg);
}
}
}
}
void Func_GetSysTime(NM_TIME * ptrTime){
ptrTime->chrYear = SysYear;
ptrTime->chrMonth = SysMonth;
ptrTime->chrDate = SysDate;
ptrTime->chrHour = SysSecond/3600;
ptrTime->chrMinute = (SysSecond%3600)/60;
ptrTime->chrSecond = SysSecond%60;
}
INT8U Func_DisplaySysTime(INT8U oddeven){
INT8U err;
Display_Date(SysYear/10+0x30,SysYear%10+0x30,SysMonth/10+0x30,SysMonth%10+0x30,
SysDate/10+0x30,SysDate%10+0x30);
Display_Time(SysSecond/36000+0x30,(SysSecond/3600)%10+0x30,
(SysSecond%3600)/600+0x30,((SysSecond%3600)/60)%10+0x30,oddeven);
return((oddeven == 0)? 1:0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -