📄 can_adpe.c
字号:
/******************************************************************************/
/* CAN ADAPTOR PROGRAMME */
/* */
/**/
/**/
/**/
/**/
/**/
/**/
/******************************************************************************/
#pragma large
#include <reg51.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <absacc.h>
#include <intrins.h>
#include <stdarg.h>
#include <setjmp.h>
#include <math.h>
/******************************************************************************/
#define C2764_BASE 0x0000
#define C2864_BASE 0x2000
#define C7132_BASE 0x8000
#define CANA_BASE 0x40
#define CANB_BASE 0xA0
#define C25045CS P10
#define C25045SO P11
#define C25045SI P13
#define C25045SCK P12
#define WREN 0x06 /*25045 command*/
#define WRDI 0x04
#define RDSR 0x05
#define WRSR 0x01
#define TIME 0x00
/******************************************************************************/
#define EXTENDED_FRAME_FORMAT
#define CAN_Mode PBYTE[0]
#define CAN_MOD_RM CAN_Mode&BIT00
#define CAN_MOD_LOM CAN_Mode&BIT01
#define CAN_MOD_STM CAN_Mode&BIT02
#define CAN_MOD_AFM CAN_Mode&BIT03
#define CAN_MOD_SM CAN_Mode&BIT04
#define CAN_CMD PBYTE[1]
#define CAN_Status PBYTE[2]
#define CAN_SR_RBS ( CAN_Status&BIT00 ) >> 0
#define CAN_SR_DOS ( CAN_Status&BIT01 ) >> 1
#define CAN_SR_TBS ( CAN_Status&BIT02 ) >> 2
#define CAN_SR_TCS ( CAN_Status&BIT03 ) >> 3
#define CAN_SR_RS ( CAN_Status&BIT04 ) >> 4
#define CAN_SR_TS ( CAN_Status&BIT05 ) >> 5
#define CAN_SR_ES ( CAN_Status&BIT06 ) >> 6
#define CAN_SR_BS ( CAN_Status&BIT07 ) >> 7
#define CAN_IR PBYTE[3]
#define CAN_IR_RI ( Interrupt_Value&BIT00 ) >> 0
#define CAN_IR_TI ( Interrupt_Value&BIT01 ) >> 1
#define CAN_IR_EI ( Interrupt_Value&BIT02 ) >> 2
#define CAN_IR_DOI ( Interrupt_Value&BIT03 ) >> 3
#define CAN_IR_WUI ( Interrupt_Value&BIT04 ) >> 4
#define CAN_IR_EPI ( Interrupt_Value&BIT05 ) >> 5
#define CAN_IR_ALI ( Interrupt_Value&BIT06 ) >> 6
#define CAN_IR_BEI ( Interrupt_Value&BIT07 ) >> 7
#define CAN_Interrupt_Enable PBYTE[4]
#define CAN_Bus_Timing0 PBYTE[6]
#define CAN_Bus_Timing1 PBYTE[7]
#define CAN_Output_Control PBYTE[8]
#define CAN_Arbitration_Lost_Capture PBYTE[11]
#define CAN_Error_Code_Capture PBYTE[12]
#define CAN_Error_Warning_Limit PBYTE[13]
#define CAN_RX_Error_Counter PBYTE[14]
#define CAN_TX_Error_Counter PBYTE[15]
#define CAN_RX_Frame_Information PBYTE[16]
#define CAN_RX_ID1 PBYTE[17]
#define CAN_RX_ID2 PBYTE[18]
#define CAN_RX_ID3 PBYTE[19]
#define CAN_RX_ID4 PBYTE[20]
#define CAN_RX_Data1 PBYTE[21]
#define CAN_RX_Data2 PBYTE[22]
#define CAN_RX_Data3 PBYTE[23]
#define CAN_RX_Data4 PBYTE[24]
#define CAN_RX_Data5 PBYTE[25]
#define CAN_RX_Data6 PBYTE[26]
#define CAN_RX_Data7 PBYTE[27]
#define CAN_RX_Data8 PBYTE[28]
#define CAN_TX_Frame_Information PBYTE[16]
#define CAN_TX_ID1 PBYTE[17]
#define CAN_TX_ID2 PBYTE[18]
#define CAN_TX_ID3 PBYTE[19]
#define CAN_TX_ID4 PBYTE[20]
#define CAN_TX_Data1 PBYTE[21]
#define CAN_TX_Data2 PBYTE[22]
#define CAN_TX_Data3 PBYTE[23]
#define CAN_TX_Data4 PBYTE[24]
#define CAN_TX_Data5 PBYTE[25]
#define CAN_TX_Data6 PBYTE[26]
#define CAN_TX_Data7 PBYTE[27]
#define CAN_TX_Data8 PBYTE[28]
#define CAN_Acceptance_Code0 PBYTE[16]
#define CAN_Acceptance_Code1 PBYTE[17]
#define CAN_Acceptance_Code2 PBYTE[18]
#define CAN_Acceptance_Code3 PBYTE[19]
#define CAN_Acceptance_Mask0 PBYTE[20]
#define CAN_Acceptance_Mask1 PBYTE[21]
#define CAN_Acceptance_Mask2 PBYTE[22]
#define CAN_Acceptance_Mask3 PBYTE[23]
#define CAN_RX_Message_Counter PBYTE[29]
#define CAN_RX_Buffer_Start_Address PBYTE[30]
#define CAN_Clock_Divider PBYTE[31]
/******************************************************************************/
/******************************************************************************/
#define WEST 0x0F
#define EAST 0xF0
/*Equipment Type---ID3.7~ID3.4*/
#define PC_CAN_TYPE 0x00
#define IRMU_TYPE 0x01
#define SFLU_TYPE 0x02
//#define PAPI_TYPE 0x03
#define IOCU_TYPE 0x04
#define ADMU_TYPE 0x05
#define MRCU_TYPE 0x06
//#define M_MRCU_TYPE 0x06
//#define B_MRCU_TYPE 0x07
/******************************************************************************/
/*Frame Type---ID3.3~ID3.0*/
#define COMD_Frame 0x00 /*Command frame,adapt to all equipment*/
#define ARQ1_Frame 0x01 /*Query frame,adapt to all equipment except B_MRCU*/
#define ARQ2_Frame 0x02 /*Query frame,adapt to B_MRCU*/
#define RES_Frame 0x03 /*Answer frame,adapt to all equipment*/
/******************************************************************************/
#define CAN_INIT_SUCCESS 0xAA
#define CAN_INIT_FAILURE 0xFF
#define TXSUCCESS 0xAA
#define TXFAILURE 0xFF
#define TXBUFRELESED 0xAA
#define TXBUFLOCKED 0xFF
#define CAN_INI_SUCCESS 0xAA
#define CAN_INI_FAILURE 0xFF
/******************************************************************************/
#define BIT00 0x0001
#define BIT01 0x0002
#define BIT02 0x0004
#define BIT03 0x0008
#define BIT04 0x0010
#define BIT05 0x0020
#define BIT06 0x0040
#define BIT07 0x0080
#define BIT08 0x0100
#define BIT09 0x0200
#define BIT10 0x0400
#define BIT11 0x0800
#define BIT12 0x1000
#define BIT13 0x2000
#define BIT14 0x4000
#define BIT15 0x8000
/******************************************************************************/
#define MRCU_NUMBER XBYTE[Mrcu_Number_Pointer]
#define IRMU_NUMBER XBYTE[Irmu_Number_Pointer]
#define SFLU_NUMBER XBYTE[Sflu_Number_Pointer]
#define IOCU_NUMBER XBYTE[Iocu_Number_Pointer]
#define ADMU_NUMBER XBYTE[Admu_Number_Pointer]
#define GEN_NUMBER XBYTE[Gen_Number_Pointer]
#define NODE_NUMBER MRCU_NUMBER+IRMU_NUMBER+SFLU_NUMBER+IOCU_NUMBER+ADMU_NUMBER
#define DO_NUMBER IOCU_NUMBER * 8
/*被监单元数据区字长*/
#define SFLU_DATA_LENGTH 7
#define CCR_DATA_LENGTH 19
#define DI_DATA_LENGTH 3
#define ADMU_DATA_LENGTH 17
#define GEN_DATA_LENGTH 20
/*节点报警区字长*/
#define NODE_WARN_LENGTH 2
#define NET_WARN_LENGTH 1
#define CAN_START 0xAA
#define LCC_CONFIGURE_REQUEST 0xAA
#define ADAPTOR_CONFIGURED_FLAG 0x55
#define REFRESHING 0x0F
#define REFRESH_END 0xF0
#define EMPTY 0xFF
/******************************************************************************/
#define BYTE unsigned char
#define WORD unsigned int
/******************************************************************************/
WORD Start_Pointer,Refresh_Order_Pointer,Refresh_Data_Pointer;
WORD Watchdog_Pointer,Configure_Pointer,Configure_Length_Pointer;
WORD Sflu_Number_Pointer,Mrcu_Number_Pointer,Irmu_Number_Pointer;
WORD Iocu_Number_Pointer,Admu_Number_Pointer,Gen_Number_Pointer,Node_Number_Pointer;
WORD Mrcu_Query_Pointer,Irmu_Query_Pointer,Sflu_Query_Pointer;
WORD Iocu_Query_Pointer,Admu_Query_Pointer;
WORD Sflu_Data_Pointer,Ccr_Data_Pointer;
WORD Di_Data_Pointer,Admu_Data_Pointer,Gen_Data_Pointer;
WORD Sflu_Order_Pointer,Mrcu_Order_Pointer,Do_Order_Pointer;
WORD Mrcu_Warn_Pointer,Irmu_Warn_Pointer,Sflu_Warn_Pointer;
WORD Iocu_Warn_Pointer,Admu_Warn_Pointer;
WORD Net_Warn_Pointer;
WORD Mrcu_Counter_Pointer,Irmu_Counter_Pointer,Sflu_Counter_Pointer;
WORD Iocu_Counter_Pointer,Admu_Counter_Pointer;
BYTE Ccr_Group_Number,Position,ID_CAN,ID_IOCU,ID_ADMU,ID_SFLU;
BYTE CounterA,CounterB;
/******************************************************************************/
void C25045Outbyt(BYTE);
BYTE C25045Inbyt();
void C25045Wrfish();
void C25045Rstdog();
void Can_Reset(BYTE);
BYTE Can_Initate(BYTE);
BYTE Check_BeforeT(BYTE);
BYTE Can_Transmit(BYTE *,BYTE);
BYTE Check_Tstatus(BYTE);
void Canint(void);
void Interrupt_Process(BYTE,BYTE);
void Order_Process(void);
void Timer0_Int(void);
void Delay(WORD);
void main(void) using 0
{
BYTE data i,j,ID,Txbuf[6],Query[3];
WORD data ii,pointer;
PSW = 0x00;
TMOD = 0x10;
TH1 = 0;
TL1 = 0;
C25045SCK = 0;
C25045CS = 0;
C25045Outbyt( WREN );
C25045SCK = 0;
C25045CS = 1; /* WRITE ENABLE */
C25045SCK = 0;
C25045CS = 0;
C25045Outbyt( WRSR );
C25045Outbyt( TIME );
C25045SCK = 0;
C25045CS = 1;
C25045Wrfish(); /* WRITE TIME-BYTE, WRITE FINISHED ? */
C25045Rstdog();
XBYTE[Start_Pointer] = 0;
CounterA = 0;
CounterB = 0;
Can_Reset(CANA_BASE);
Can_Reset(CANB_BASE);
Can_Initate(CANA_BASE);
Can_Initate(CANB_BASE);
ET1 = 1;
IT1 = 0; /*external low start*/
EX0 = 1; /*external interrupt 0 and 1 disable*/
EA = 0;
/*调试状态数据分配**************************************************************/
/*Configure Area*/
Position = EAST;
XBYTE[Start_Pointer] = 0xAA;
XBYTE[Refresh_Data_Pointer] = 0x00;
XBYTE[Refresh_Order_Pointer] = 0x00;
XBYTE[Watchdog_Pointer] = 0x00;
XBYTE[Configure_Pointer] = 0x00;
XBYTE[Configure_Length_Pointer] = 0x01;
if (Position == WEST)
{
MRCU_NUMBER = 25;
IRMU_NUMBER = 24;
SFLU_NUMBER = 1;
IOCU_NUMBER = 1;
ADMU_NUMBER = 1;
GEN_NUMBER = 1;
Ccr_Group_Number = 5;
ID_CAN = 0x94;
ID_SFLU = 0x91;
ID_IOCU = 0x92;
ID_ADMU = 0x93;
}
else
{
MRCU_NUMBER = 14;
IRMU_NUMBER = 13;
SFLU_NUMBER = 0;
IOCU_NUMBER = 1;
ADMU_NUMBER = 1;
GEN_NUMBER = 1;
Ccr_Group_Number = 3;
ID_CAN = 0xA3;
ID_IOCU = 0xA1;
ID_ADMU = 0xA2;
}
/***************************************************************************/
Start_Pointer = C7132_BASE;
Refresh_Data_Pointer = Start_Pointer + 1;
Refresh_Order_Pointer = Refresh_Data_Pointer + 1;
Watchdog_Pointer = Refresh_Order_Pointer + 1;
Configure_Pointer = Watchdog_Pointer + 1;
Configure_Length_Pointer = Configure_Pointer + 1;
Mrcu_Number_Pointer = Configure_Length_Pointer + 1;
Irmu_Number_Pointer = Mrcu_Number_Pointer + 1;
Sflu_Number_Pointer = Irmu_Number_Pointer + 1;
Iocu_Number_Pointer = Sflu_Number_Pointer + 1;
Admu_Number_Pointer = Iocu_Number_Pointer + 1;
Gen_Number_Pointer = Admu_Number_Pointer + 1;
/*查询命令区*/
Mrcu_Query_Pointer = Gen_Number_Pointer + 1;
Irmu_Query_Pointer = Mrcu_Query_Pointer + MRCU_NUMBER*3;
Sflu_Query_Pointer = Irmu_Query_Pointer + IRMU_NUMBER*3;
Iocu_Query_Pointer = Sflu_Query_Pointer + SFLU_NUMBER*3;
Admu_Query_Pointer = Iocu_Query_Pointer + IOCU_NUMBER*3;
/*受控单元命令区*/
Sflu_Order_Pointer = Admu_Query_Pointer + ADMU_NUMBER*3;
Do_Order_Pointer = Sflu_Order_Pointer + SFLU_NUMBER*3;
Mrcu_Order_Pointer = Do_Order_Pointer + DO_NUMBER*3;
/*被监单元数据区*/
Sflu_Data_Pointer = Mrcu_Order_Pointer + MRCU_NUMBER * 3;
Ccr_Data_Pointer = Sflu_Data_Pointer + SFLU_NUMBER * SFLU_DATA_LENGTH;
Di_Data_Pointer = Ccr_Data_Pointer + MRCU_NUMBER * CCR_DATA_LENGTH;
Admu_Data_Pointer = Di_Data_Pointer + IOCU_NUMBER * DI_DATA_LENGTH;
Gen_Data_Pointer = Admu_Data_Pointer + ADMU_NUMBER * ADMU_DATA_LENGTH;
/*报警区*/
Net_Warn_Pointer = Gen_Data_Pointer + GEN_NUMBER * GEN_DATA_LENGTH;
Mrcu_Warn_Pointer = Net_Warn_Pointer + 1;
Irmu_Warn_Pointer = Mrcu_Warn_Pointer + MRCU_NUMBER * NODE_WARN_LENGTH;
Sflu_Warn_Pointer = Irmu_Warn_Pointer + IRMU_NUMBER * NODE_WARN_LENGTH;
Iocu_Warn_Pointer = Sflu_Warn_Pointer + SFLU_NUMBER * NODE_WARN_LENGTH;
Admu_Warn_Pointer = Iocu_Warn_Pointer + IOCU_NUMBER * NODE_WARN_LENGTH;
/*报警计数区*/
Mrcu_Counter_Pointer = Admu_Warn_Pointer + ADMU_NUMBER * NODE_WARN_LENGTH;
Irmu_Counter_Pointer = Mrcu_Counter_Pointer + MRCU_NUMBER * 3;
Sflu_Counter_Pointer = Irmu_Counter_Pointer + IRMU_NUMBER * 3;
Iocu_Counter_Pointer = Sflu_Counter_Pointer + SFLU_NUMBER * 3;
Admu_Counter_Pointer = Iocu_Counter_Pointer + IOCU_NUMBER * 3;
/***************************************************************************/
/*查询命令区初始化*/
// for (ii=Mrcu_Query_Pointer;ii<Sflu_Order_Pointer;ii++)
// XBYTE[ii] = 0xFF;
/*命令区与数据区初始化为FF*/
for (ii=Sflu_Order_Pointer;ii<Net_Warn_Pointer; ii++)
XBYTE[ii] = 0;
/*节点与网络报警区初始化为FF*/
for (ii=Net_Warn_Pointer;ii<Mrcu_Counter_Pointer;ii++)
XBYTE[ii] = 0;
/*报警计数区初始化为0*/
for (ii=Mrcu_Counter_Pointer;ii<(Admu_Counter_Pointer+ADMU_NUMBER*3);ii++)
XBYTE[ii] = 0;
/***************************************************************************/
/*调试状态数据分配**********************************************************/
/*Query Area*/
for (i=0;i<3;i++)
{
XBYTE[Mrcu_Query_Pointer+i*3] = 0x60|(i+1);
XBYTE[Mrcu_Query_Pointer+i*3+1] = MRCU_TYPE<<4|ARQ1_Frame;
XBYTE[Mrcu_Query_Pointer+i*3+2] = 1;
XBYTE[Irmu_Query_Pointer+i*3] = 0x60|(i+6);
XBYTE[Irmu_Query_Pointer+i*3+1] = IRMU_TYPE<<4|ARQ1_Frame;
XBYTE[Irmu_Query_Pointer+i*3+2] = 0;
}
XBYTE[Mrcu_Query_Pointer+3*3] = 0x60|5;
XBYTE[Mrcu_Query_Pointer+3*3+1] = MRCU_TYPE<<4|ARQ2_Frame;
XBYTE[Mrcu_Query_Pointer+3*3+2] = 1;
XBYTE[Irmu_Query_Pointer+2*3] = 0x60|(5+5);
XBYTE[Irmu_Query_Pointer+2*3+1] = IRMU_TYPE<<4|ARQ1_Frame;
XBYTE[Irmu_Query_Pointer+2*3+2] = 0;
for (i=0;i<4;i++)
{
XBYTE[Mrcu_Query_Pointer+i*3+12] = 0x70|(i+1);
XBYTE[Mrcu_Query_Pointer+i*3+12+1] = MRCU_TYPE<<4|ARQ1_Frame;
XBYTE[Mrcu_Query_Pointer+i*3+12+2] = 1;
XBYTE[Irmu_Query_Pointer+(i-1)*3+12] = 0x70|(i+6);
XBYTE[Irmu_Query_Pointer+(i-1)*3+12+1] = IRMU_TYPE<<4|ARQ1_Frame;
XBYTE[Irmu_Query_Pointer+(i-1)*3+12+2] = 0;
}
XBYTE[Mrcu_Query_Pointer+4*3+12] = 0x70|5;
XBYTE[Mrcu_Query_Pointer+4*3+12+1] = MRCU_TYPE<<4|ARQ2_Frame;
XBYTE[Mrcu_Query_Pointer+4*3+12+2] = 1;
XBYTE[Irmu_Query_Pointer+3*3+12] = 0x70|(5+5);
XBYTE[Irmu_Query_Pointer+3*3+12+1] = IRMU_TYPE<<4|ARQ1_Frame;
XBYTE[Irmu_Query_Pointer+3*3+12+2] = 0;
for (i=0;i<4;i++)
{
XBYTE[Mrcu_Query_Pointer+i*3+27] = 0x80|(i+1);
XBYTE[Mrcu_Query_Pointer+i*3+27+1] = MRCU_TYPE<<4|ARQ1_Frame;
XBYTE[Mrcu_Query_Pointer+i*3+27+2] = 1;
XBYTE[Irmu_Query_Pointer+(i-1)*3+27] = 0x80|(i+6);
XBYTE[Irmu_Query_Pointer+(i-1)*3+27+1] = IRMU_TYPE<<4|ARQ1_Frame;
XBYTE[Irmu_Query_Pointer+(i-1)*3+27+2] = 0;
}
XBYTE[Mrcu_Query_Pointer+4*3+27] = 0x80|5;
XBYTE[Mrcu_Query_Pointer+4*3+27+1] = MRCU_TYPE<<4|ARQ2_Frame;
XBYTE[Mrcu_Query_Pointer+4*3+27+2] = 1;
XBYTE[Irmu_Query_Pointer+3*3+27] = 0x80|(5+5);
XBYTE[Irmu_Query_Pointer+3*3+27+1] = IRMU_TYPE<<4|ARQ1_Frame;
XBYTE[Irmu_Query_Pointer+3*3+27+2] = 0;
for (i=0;i<SFLU_NUMBER;i++)
{
XBYTE[Sflu_Query_Pointer] = ID_SFLU;
XBYTE[Sflu_Query_Pointer+1] = SFLU_TYPE<<4|ARQ1_Frame;
XBYTE[Sflu_Query_Pointer+2] = 0;
}
for (i=0;i<IOCU_NUMBER;i++)
{
XBYTE[Iocu_Query_Pointer] = ID_IOCU;
XBYTE[Iocu_Query_Pointer+1] = IOCU_TYPE<<4|ARQ1_Frame;
XBYTE[Iocu_Query_Pointer+2] = 0;
}
for (i=0;i<ADMU_NUMBER;i++)
{
XBYTE[Admu_Query_Pointer] = ID_ADMU;
XBYTE[Admu_Query_Pointer+1] = ADMU_TYPE<<4|ARQ1_Frame;
XBYTE[Admu_Query_Pointer+2] = 1;
}
/*Order Area*/
for (i=0;i<SFLU_NUMBER;i++)
{
XBYTE[Sflu_Order_Pointer] = ID_SFLU;
XBYTE[Sflu_Order_Pointer+1] = SFLU_TYPE<<4|COMD_Frame;
XBYTE[Sflu_Order_Pointer+2] = 0;
}
for (i=0;i<DO_NUMBER;i++)
{
XBYTE[Do_Order_Pointer+i*3] = ID_IOCU;
XBYTE[Do_Order_Pointer+i*3+1] = IOCU_TYPE<<4|COMD_Frame;
XBYTE[Do_Order_Pointer+i*3+2] = 0;
}
for (i=0;i<3;i++)
{
XBYTE[Mrcu_Order_Pointer+i*3] = 0x60|(i+1);
XBYTE[Mrcu_Order_Pointer+i*3+1] = MRCU_TYPE<<4|COMD_Frame;
XBYTE[Mrcu_Order_Pointer+i*3+2] = 0;
}
XBYTE[Mrcu_Order_Pointer+3*3] = 0x65;
XBYTE[Mrcu_Order_Pointer+3*3+1] = MRCU_TYPE<<4|COMD_Frame;
XBYTE[Mrcu_Order_Pointer+3*3+2] = 0;
for (i=0;i<5;i++)
{
XBYTE[Mrcu_Order_Pointer+i*3+12] = 0x70|(i+1);
XBYTE[Mrcu_Order_Pointer+i*3+12+1] = MRCU_TYPE<<4|COMD_Frame;
XBYTE[Mrcu_Order_Pointer+i*3+12+2] = 0;
}
for (i=0;i<5;i++)
{
XBYTE[Mrcu_Order_Pointer+i*3+27] = 0x80|(i+1);
XBYTE[Mrcu_Order_Pointer+i*3+27+1] = MRCU_TYPE<<4|COMD_Frame;
XBYTE[Mrcu_Order_Pointer+i*3+27+2] = 0;
}
/***************************************************************************/
/*数据区ID号设置*/
for (i=0;i<SFLU_NUMBER;i++)
{
ID = XBYTE[Sflu_Query_Pointer + i*3];
XBYTE[Sflu_Data_Pointer + i*SFLU_DATA_LENGTH] = ID;
}
for (i=0;i<MRCU_NUMBER;i++)
{
ID = XBYTE[Mrcu_Query_Pointer+i*3];
XBYTE[Ccr_Data_Pointer + i*CCR_DATA_LENGTH] = ID;
}
for (i=0;i<IOCU_NUMBER;i++)
{
ID = XBYTE[Iocu_Query_Pointer+i*3];
XBYTE[Di_Data_Pointer + i*DI_DATA_LENGTH] = ID;
}
for (i=0;i<ADMU_NUMBER;i++)
{
ID = XBYTE[Admu_Query_Pointer+i*3];
XBYTE[Admu_Data_Pointer + i*ADMU_DATA_LENGTH] = ID;
}
/*报警区ID号设置*/
for (i=0;i<MRCU_NUMBER;i++)
{
ID = XBYTE[Mrcu_Query_Pointer+i*3];
XBYTE[Mrcu_Warn_Pointer + i*NODE_WARN_LENGTH] = ID;
}
for (i=0;i<IRMU_NUMBER;i++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -