⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tskcharge.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
字号:
//#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -