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

📄 tskhardware.c

📁 本人编写的无线电话程序,给予PIC18C801设计,包括了uCOS的移植以及菜单,自己设计的拼音注入法,完整地一级汉字库,希望对大家有所帮助
💻 C
字号:
#include <p18cxxx.h>
#include "includes.h"
#include "event.h"
#include "hardware.h"

extern OS_MEM			*pMemSml;
extern OS_MEM			*pMemLge;

extern void Func_Clear_Msg(INT8U rom * pMsg);

extern INT8U chrCOMBusy;
extern INT16U intCurTxNum;
extern INT8U rom * pCurRxTail;
extern INT8U rom * pCurRxHead;
extern INT8U CurRxNum;
extern INT8U rom * pCurTxHead;

#pragma romdata EXTRAM
//Transmit queue
INT8U rom * rom pTxQ[64];
OS_MEM rom * rom TxTypeQ[64];
INT16U rom TxLenQ[64];
INT8U rom TxQHead;
INT8U rom TxQTail;

#pragma code MYCODE

void tskHardware(void * data){
	void rom * pMsg;
	INT8U err;
	TxQHead = 0;
	TxQTail = 0;
	chrCOMBusy = FALSE;
	do{
		pMsg = OSMemGet(pMemLge, &err);
	}while(err != OS_NO_ERR);
	CurRxNum = 0;
	pCurRxTail = pMsg;
	pCurRxHead = pMsg;
	
	Func_Start_UART();
	PIE1bits.RCIE = 1;	//open interrupt
	for(;;){
		pMsg = OSQPend(peventHardware, 0, &err);
		if(err == OS_NO_ERR){
			if((INT24U)pMsg >= PTR_MAX){
				switch ((INT24U)pMsg){
					case MSG_COM0_TXFINISH:
						if(TxQHead != TxQTail){
							OSMemPut(TxTypeQ[TxQHead],pTxQ[TxQHead]);
							TxQHead++;
							TxQHead &= 0x3f;
							if(TxQTail != TxQHead){
								intCurTxNum = TxLenQ[TxQHead];
								pCurTxHead = pTxQ[TxQHead];
								chrCOMBusy = TRUE;
								PIE1bits.TXIE = 1;
							}
						}
						break;
				}
			}
			else{
				switch (((MSG_HEAD *)pMsg)->Msg_ID){
					case MSG_COM0_TRANSMIT:
						if(((TxQTail+1) & 0x3f) != TxQHead){
							pTxQ[TxQTail] = ((MSG_HEAD *)pMsg)->pMem;
							TxTypeQ[TxQTail] = ((MSG_HEAD *)pMsg)->pmemATT;
							TxLenQ[TxQTail] = ((MSG_HEAD *)pMsg)->LenOfAttach;
							TxQTail++;
							TxQTail &= 0x3f;
							((MSG_HEAD *)pMsg)->Attached = FALSE;	//so that the followed codes won't release the memory
						}
						
						OS_ENTER_CRITICAL();
						if(chrCOMBusy == FALSE){
							OS_EXIT_CRITICAL();
							intCurTxNum = TxLenQ[TxQHead];
							pCurTxHead = pTxQ[TxQHead];
							chrCOMBusy = TRUE;
							PIE1bits.TXIE = 1;
						}
						OS_EXIT_CRITICAL();
						
						break;
					case MSG_TIMER_EXPIRE:
						Func_CloseLight();
						break;
				}
				Func_Clear_Msg(pMsg);
			}
		}
	}
} 

⌨️ 快捷键说明

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