📄 debug.c
字号:
//********************** 使用 RS232 作为调试口 ****************
#include "msp430x14x.h"
#include "main.h"
//********************** extern 区****************extern 区****************
//********************** extern 区****************extern 区****************
//form main.c
//用作为 16 个位!BOOLEAN 变量来使用
extern unsigned int g_intMark;
extern unsigned int g_intMarkA;
extern unsigned int intTBCount_50ms;
extern unsigned char g_chSecond, g_chMinute, g_chHour, g_chDay, g_chMonth, g_chYear;
//form flash.c
extern unsigned char WriteID(unsigned char chFirstLen, unsigned char *chParamBuf, unsigned char chLen, unsigned char chMode);
extern void Write_DoorInfo_AccordingNo(unsigned int iTempSensorNo, unsigned char *pInfoData);
//from commPC.c
extern unsigned char g_chSendPCBuf_Stat;
extern unsigned char g_chMainPushReport_Stat;
extern unsigned char g_chSendPCHead, g_chSendPCTail;
extern unsigned char g_chPushReportDetail_SubStat;
extern unsigned char g_chReceivePCHead, g_chReceivePCTail;
extern unsigned char g_chReceivePCBuf_Stat;
extern unsigned char g_chPushBit0to7;
//from dtmf.c
extern unsigned char g_chBuildDTMF_Stat;
//from innerComm.c
extern unsigned char g_chFS_Status;
extern unsigned char g_chFS_SelfCheck_Status;
extern unsigned char g_chGP_SelfCheck_Status;
extern unsigned char g_chGP_Status;
extern unsigned char g_chCable_Status;
extern unsigned char g_chInnerCommHead;//
extern unsigned char g_chInnerCommTail;
extern unsigned char g_chInnerCommSingleChar;
extern unsigned char g_chMainInnerComm_Stat;
extern unsigned int g_intGP_Current[8];
extern unsigned char g_chInnerCommSingleChar;
extern unsigned char g_chInnerCommSendHead;//
extern unsigned char g_chInnerCommSendTail;
extern unsigned char g_chInnerCommSendBuf[MacroInnerCommSendBufMax];
extern void AddCheckSum(unsigned char chLen);
extern unsigned char g_chInnerCommSubSingleChar;
extern unsigned int g_intGP_FixedCurrent[8];
extern unsigned char g_chFS_Mark;//----按位表明1-8列的FS的要等待发送的告警或恢复状态
extern unsigned char g_chFS_SelfCheck_Mark;//----按位表明1-8列的FS的要等待发送的自检告警或恢复状态
extern unsigned char g_chGP_Mark;//----按位表明1-8列的工频传感器的要等待发送的告警或恢复状态
extern unsigned char g_chGP_SelfCheck_Mark;//----按位表明1-8列的工频传感器的要等待发送的自检告警或恢复状态
extern unsigned char g_chCable_Mark;//----按位表明1-8列的主干电缆的要等待发送的告警或恢复状态
extern unsigned char g_chFS_Alert;//----按位表明1-8列的FS的要等待发送的告警状态
extern unsigned char g_chFS_SelfCheck_Alert;//----按位表明1-8列的FS的要等待发送的自检告警状态
extern unsigned char g_chGP_Alert;//----按位表明1-8列的工频传感器的要等待发送的告警状态
extern unsigned char g_chGP_SelfCheck_Alert;//----按位表明1-8列的工频传感器的要等待发送的自检告警状态
extern unsigned char g_chCable_Alert;//----按位表明1-8列的主干电缆的要等待发送的告警状态
extern unsigned char g_chFS_Restore;//----按位表明1-8列的FS的要等待发送的恢复状态
extern unsigned char g_chFS_SelfCheck_Restore;//----按位表明1-8列的FS的要等待发送的自检恢复状态
extern unsigned char g_chGP_Restore;//----按位表明1-8列的工频传感器的要等待发送的恢复状态
extern unsigned char g_chGP_SelfCheck_Restore;//----按位表明1-8列的工频传感器的要等待发送的自检恢复状态
extern unsigned char g_chCable_Restore;//----按位表明1-8列的主干电缆的要等待发送的恢复状态
//from env.c
extern unsigned char g_chTemperature;
extern unsigned char g_chTemperatureBoard;
extern unsigned char g_chDoorStat;//0-门关 1-密码开门 2-非法开门 3-中心开门 4-禁用门禁 5-启用 6-门开
extern unsigned char g_chDoorStatTemp;//门状态变化中的量
extern unsigned char g_chOpenDoorID[3];//记录开门人,保留的是索引号
extern unsigned char g_chDC;
extern unsigned char g_chBadGas;
extern unsigned char g_chTheTwoAD;
extern unsigned char g_chEnv_Free;
extern unsigned char g_chEnv_Status;//-按位表明1-2通道的环境的告警/恢复状态
extern unsigned char g_chEnv_Mark;// -------按位表明1-2通道的环境的要等待发送告警或恢复状态
//3--5位为三路环境模拟量:温度1,有害气体,48V,第6位为门系统
extern unsigned char g_chEnv_Alert;// -------按位表明1-2通道的环境的要等待发送告警状态
//3--5位为三路环境模拟量:温度1,有害气体,48V,第6位为门系统
extern unsigned char g_chEnv_Restore;// -------按位表明1-2通道的环境的要等待发送恢复状态
//3--5位为三路环境模拟量:温度1,有害气体,48V,第6位为门系统
extern unsigned char g_chEnv_LowHign;//对于 象 温度1 48V 要分高还是低告警!
//温度
extern unsigned char g_chTemperatureAlert,g_chTemperatureRestore;
//3 个 A/D 处理
extern unsigned char g_chDCAlert,g_chDCRestore;//P6。2
extern unsigned char g_chBadGasAlert,g_chBadGasRestore;//P6。0
//from lcd.c
extern unsigned char g_chLcdDriveHead;
extern unsigned char g_chLcdDriveTail;
extern unsigned char g_chLcdDrive_Stat;
//from lcdshow.c
extern unsigned char g_chMainLcdProcess_Stat;
//from ds1820drv.c
extern void DS1820_Read_ID_MultiChannel(unsigned char chMCUPort, unsigned char DataBit, unsigned char *pDS1820ID);
extern unsigned char Read_DoorID(void);
extern void Write_DoorID(unsigned char *chP);
//********************** extern 区****************extern 区****************
//********************** extern 区****************extern 区****************
//********************** const 区****************const 区****************
//********************** const 区****************const 区****************
const unsigned char c_chShow_2[] = "按 1 查询或修改参数\n\r";
const unsigned char c_chShow_3[] = "按 2 查询系统状态\n\r";
const unsigned char c_chShow_4[] = "按 3 查询温度1 ROM-ID\n\r";
const unsigned char c_chShow_5[] = "按 4 查询温度2 ROM-ID\n\r";
const unsigned char c_chShow_6[] = "按 5 查询电子纽扣 ROM-ID\n\r";
const unsigned char c_chShow_7[] = "按 6 读电子纽扣信息\n\r";
const unsigned char c_chShow_8[] = "按 7 写电子纽扣信息\n\r";
const unsigned char c_chShow_9[] = "按 8 配置开门人\n\r";
const unsigned char c_chShow_10[] = "按 9 查询开门人\n\r";
const unsigned char c_chShow_17[] = "按 R 复位告警盘\n\r";
const unsigned char c_chShow_Menu10[] = "请输入 ID 号\n\r";
const unsigned char c_chShow_Menu13[] = "错误\n\r";
const unsigned char c_chShow_Menu14[] = "请输入新的参数,Esc返回\n\r";
const unsigned char chShow_Pmpt_Door_40[] = "输入ID号:\n\r";//输入用户序号及ID号:
const unsigned char chShow_Pmpt_Door_60[] = "输入用户序号及ID号:\n\r";//输入用户序号及ID号:
const unsigned char chShow_Pmpt_Door_80[] = "输入用户序号:\n\r";//输入用户序号及ID号:
//********************** const 区****************const 区****************
//********************** const 区****************const 区****************
unsigned char g_chDebugBuf[DebugMAX];//收发共一个缓冲区
unsigned char g_chDebugHead, g_chDebugTail;
unsigned char g_chReceiveDebugChar;//收单个信息
void MainDebugProcess(void);
unsigned char g_chMainDebugSend_Stat; //发送缓冲区状态机
// unsigned char g_chMainDebugReceive_Stat; //接收缓冲区状态机
unsigned int g_intMainDebugProcess_Stat; //主处理、接受状态机
unsigned char g_chMainDebugSendTimeout_1s; //超时
unsigned char g_chMainDebugProcessTimeout_1s; //超时
#define MainDebugProcessTimeout_1sMAX 10
#define DebugWaitInputTimeout_1sMAX 30 //超时时间
void InsertDebugSendBuf(unsigned char *pData, unsigned int intLen);
void ExternInsertDebugSendBuf(unsigned char *pData, unsigned int intLen);
unsigned char g_chID;
unsigned char ParamID(unsigned char chParamID, unsigned char *chParamBuf, unsigned char chLen);
unsigned int g_int135Ver;//1000-9999 由与 int 的最大是 65532 所以不能表达 00000-99999
/**************************************
*功能: 往调试口里加东西
*参数:
*返回:
*备注: 供交互时使用,可能有一些在外面被调用
**************************************/
void InsertDebugSendBuf(unsigned char *pData, unsigned int intLen)
{
g_intMark &= ~SendReceiveDebugBuf_Mark;//保证可用发送
if(g_chMainDebugSend_Stat == 1)//单向,会丢掉一些信息
{//调试区信息 空( =1 表示在等待发第一个字节)
unsigned char i;
for (i = 0; i < intLen; i++)
{
if(g_chDebugTail < DebugMAX - 1)//不覆盖
{//调试缓冲区是单向数组
g_chDebugTail++;
g_chDebugBuf[g_chDebugTail] = *(pData + i);
}
}
}
}
/**************************************
*功能: 往调试口里加东西
*参数:
*返回:
*备注: 供外面使用,不参加交互的信息
**************************************/
void ExternInsertDebugSendBuf(unsigned char *pData, unsigned int intLen)
{
if(g_intMainDebugProcess_Stat == 0)
{
g_intMark &= ~SendReceiveDebugBuf_Mark;//保证可用发送
if(g_chMainDebugSend_Stat == 1)//单向,会丢掉一些信息
{//调试区信息 空( =1 表示在等待发第一个字节)
if(intLen < (DebugMAX - g_chDebugTail -1))
{//还有足够的空间,否则丢掉
unsigned char i;
for (i = 0; i < intLen; i++)
{
if(g_chDebugTail < DebugMAX - 1)//不覆盖
{//调试缓冲区是单向数组
g_chDebugTail++;
g_chDebugBuf[g_chDebugTail] = *(pData + i);
}
}
}
}
}
}
/**************************************
*功能: 调试口主处理
*参数:
*返回:
*备注: 实时调用
**************************************/
void MainDebugProcess(void)
{
//处于调试状态,没有办法、资源对灯进行动作
//处理发送缓冲区
switch(g_chMainDebugSend_Stat)
{
case 1://发第一个
if((g_intMark & CommDebugUart_Mark))
{//调试模式
if(g_intMark & SendReceiveDebugBuf_Mark)
{//收
}
else
{//发
if(g_chDebugTail > 0)
{
g_chMainDebugProcessTimeout_1s = 0;
g_chDebugHead = 1;
TXBUF0 = g_chDebugBuf[1];
g_chMainDebugSend_Stat = 2;
g_chMainDebugSendTimeout_1s = 0;
}
}
}
break;
case 2://等待发送完毕,一定要有超时处理,这样可以保证发光调试区信息
if(g_chDebugTail == 0)
{//调试区信息 空
g_chMainDebugSend_Stat = 0;//DEFAULT 中会有相关清理
}
if(g_chMainDebugSendTimeout_1s > 1)
{//发码的时间不能超过 1 秒
g_chMainDebugSend_Stat = 1;//
//丢掉
g_chDebugTail = 0;
g_chDebugHead = 0;
}
break;
default:
g_chMainDebugSend_Stat = 1;
break;
}
//处理接收缓冲区---由主处理负责
//控制发送的主处理,防止死机
if(g_intMainDebugProcess_Stat > 0)
{//开始计时!
if(g_chMainDebugProcessTimeout_1s > MainDebugProcessTimeout_1sMAX)
{//10 秒后 没有东西输入
//强行输出信息 并回到 1
g_chDebugTail = 0;
g_chDebugHead = 0;
{
unsigned char chMess[] = "超时 xxx\n\r";
chMess[5] = g_intMainDebugProcess_Stat / 100 + 48;
chMess[6] = (g_intMainDebugProcess_Stat / 10) % 10 + 48;
chMess[7] = g_intMainDebugProcess_Stat % 10 + 48;
InsertDebugSendBuf((unsigned char *)chMess,sizeof(chMess) - 1);
}
g_intMainDebugProcess_Stat = 0;//DEFAULT 中会有相关清理
}
}
//处理交 流发送的主处理
if(g_chMainDebugSend_Stat == 1)
{
switch(g_intMainDebugProcess_Stat)
{
case 0://接收单命令处理
if(g_chReceiveDebugChar < 27)//Esc --27
{//调试口 必须 接收大于 32(空格)的东西
break;
}
switch(g_chReceiveDebugChar)
{
case '1'://查询或修改参数
g_intMainDebugProcess_Stat = 20;
break;
case '2'://查询系统状态
g_intMainDebugProcess_Stat = 100;
break;
case '3'://温度1
{
unsigned char chShowReadID[] = "ID: \n\r";
unsigned char chReadTempeSenID[8];
unsigned char i;
//读取指定通道上的温度传感器ID
DS1820_Read_ID_MultiChannel(DqPort, DqDataBit, chReadTempeSenID);
for (i = 0; i < 8; i++)
{
chShowReadID[3+3*i] = ((chReadTempeSenID[i] / 100) % 10) + 48;
chShowReadID[4+3*i] = ((chReadTempeSenID[i] / 10) % 10) + 48;
chShowReadID[5+3*i] = (chReadTempeSenID[i] % 10) + 48;
}
InsertDebugSendBuf((unsigned char *)chShowReadID, sizeof(chShowReadID) - 1);
}
break;
case '4'://温度2--主板上
{
unsigned char chShowReadID[] = "ID: \n\r";
unsigned char chReadTempeSenID[8];
unsigned char i;
//读取指定通道上的温度传感器ID
DS1820_Read_ID_MultiChannel(DqBorad, DqBoradBit, chReadTempeSenID);
for (i = 0; i < 8; i++)
{
chShowReadID[3+3*i] = ((chReadTempeSenID[i] / 100) % 10) + 48;
chShowReadID[4+3*i] = ((chReadTempeSenID[i] / 10) % 10) + 48;
chShowReadID[5+3*i] = (chReadTempeSenID[i] % 10) + 48;
}
InsertDebugSendBuf((unsigned char *)chShowReadID, sizeof(chShowReadID) - 1);
}
break;
case '5'://地址纽扣
{
unsigned char chShowReadID[] = "ID: \n\r";
unsigned char chReadTempeSenID[8];
unsigned char i;
//读取指定通道上的温度传感器ID
DS1820_Read_ID_MultiChannel(DoorChannelPort, DoorChannelDataBit, chReadTempeSenID);
for (i = 0; i < 8; i++)
{
chShowReadID[3+3*i] = ((chReadTempeSenID[i] / 100) % 10) + 48;
chShowReadID[4+3*i] = ((chReadTempeSenID[i] / 10) % 10) + 48;
chShowReadID[5+3*i] = (chReadTempeSenID[i] % 10) + 48;
}
InsertDebugSendBuf((unsigned char *)chShowReadID, sizeof(chShowReadID) - 1);
}
break;
case '6'://读电子纽扣信息
Read_DoorID();
break;
case '7'://写电子纽扣信息
g_intMainDebugProcess_Stat = 40;
break;
case '8'://配置开门人
g_intMainDebugProcess_Stat = 60;
break;
case '9'://查询开门人
g_intMainDebugProcess_Stat = 80;
break;
case 'R':
case 'r'://RESET
g_intMark |= SoftReset_Mark;
intTBCount_50ms = 0;//借用
//给 135 RESET 命令
g_chInnerCommSendBuf[1] = 215;
g_chInnerCommSendBuf[2] = 9;
//转为0--9 的 数字
g_chInnerCommSendBuf[3] = 8;
g_chInnerCommSendBuf[4] = 7;
g_chInnerCommSendBuf[5] = 6;
//6 sum
//7 200
AddCheckSum(6);
break;
case '*':
case '#'://只要得到 # 表示,停止 调试口的 工作!
//调试口 缓冲 不需要清理
if(g_intMark & RS232DTMFSendPC_Mark)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -