tskcharge.c

来自「本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单」· C语言 代码 · 共 92 行

C
92
字号
//#include <p18cxxx.h>
//To count call duration and money
#include "includes.h"
#include "event.h"
#include "funclcd.h"
#include "funcfontlib.h"

#define CALL_DURATION	0x8001;	//timer ID

extern OS_MEM			*pMemSml;
extern OS_MEM			*pMemLge;


#pragma romdata EXTRAM
INT24U rom CallDuration;
INT8U rom ChargeDisplayEnable;

void tskCharge(void * data){
	void rom * pMsg;
	void rom * ptrT;
	INT8U err;
	for(;;){
		pMsg = OSQPend(peventCharge, 0, &err);
		if(err == OS_NO_ERR){
			if((INT24U)pMsg >= PTR_MAX){
				switch ((INT24U)pMsg){
					case MSG_CHARGE_BEGIN:
						pMsg=OSMemGet(pMemSml,&err);
						if(err == OS_NO_ERR){
							((MSG_HEAD *)pMsg)->Msg_ID=MSG_TIMER_START;
							((MSG_HEAD *)pMsg)->Origin=peventCharge;
							((MSG_HEAD *)pMsg)->pmemME=pMemSml;
							((MSG_HEAD *)pMsg)->Attached=FALSE;
							((MSG_HEAD *)pMsg)->LenOfBody=4;
							((TIMER_MESSAGE *)pMsg)->TID=CALL_DURATION;
							((TIMER_MESSAGE *)pMsg)->Val=OS_TICKS_PER_SEC;
						    OSQPost(peventTimer,pMsg);
						    CallDuration = 0;
						}
						else{	//if can't start timer
							OSQPost(peventDVS, (OS_EVENT *)MSG_VOICE_BUSY);
						}
						break;
					case MSG_CHARGE_STOP:
						ChargeDisplayEnable == FALSE;
						pMsg=OSMemGet(pMemSml,&err);
						if(err == OS_NO_ERR){
							((MSG_HEAD *)pMsg)->Msg_ID=MSG_TIMER_STOP;
							((MSG_HEAD *)pMsg)->Origin=peventCharge;
							((MSG_HEAD *)pMsg)->pmemME=pMemSml;
							((MSG_HEAD *)pMsg)->Attached=FALSE;
							((MSG_HEAD *)pMsg)->LenOfBody=4;
							((TIMER_MESSAGE *)pMsg)->TID=CALL_DURATION;
							((TIMER_MESSAGE *)pMsg)->Val=OS_TICKS_PER_SEC;
						    OSQPost(peventTimer,pMsg);
						}
						break;
				}
			}
			else{
				switch (((MSG_HEAD *)pMsg)->Msg_ID){
					case MSG_TIMER_EXPIRE:
						CallDuration ++;
						OS_ENTER_CRITICAL();
						if(ChargeDisplayEnable == TRUE){
							OS_EXIT_CRITICAL();
							Display_Duration(CallDuration/36000+0x30,(CallDuration/3600)%10+0x30,
								            (CallDuration%3600)/600+0x30,((CallDuration%3600)/60)%10+0x30,
								            (CallDuration%60)/10+0x30,  (CallDuration%10)+0x30);
						}
						OS_EXIT_CRITICAL();
						break;
				}
				Func_Clear_Msg(pMsg);
			}
		}
	}
} 


void Func_EnableChargeDisplay(void){
	OS_ENTER_CRITICAL();
	ChargeDisplayEnable = TRUE;
	OS_EXIT_CRITICAL();
}

void Func_DisableChargeDisplay(void){
	OS_ENTER_CRITICAL();
	ChargeDisplayEnable = FALSE;
	OS_EXIT_CRITICAL();
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?