📄 tskhardware.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 + -