C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 1 C51 COMPILER V9.60.7.0, COMPILATION OF MODULE V2RFENCODING OBJECT MODULE PLACED IN .\Objects\V2RFEncoding.obj COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Src\V2RFEncoding.c OMF2 OPTIMIZE(8,SPEED) BROWSE INCDIR(.\Src;.\Task;.\Task -\cpu_port\S92F8003A;.\Task\cfg;.\Task\pt_thread;.\SC92F8003_Lib\Inc) DEBUG CODE LISTINCLUDE SYMBOLS PRINT(.\Listings\V2R -FEncoding.lst) PREPRINT(.\Listings\V2RFEncoding.i) OBJECT(.\Objects\V2RFEncoding.obj) line level source 1 #include "stdint.h" 1 =1 #ifndef _STD_INT_H_ 2 =1 #define _STD_INT_H_ 3 =1 typedef signed long int32_t; 4 =1 typedef unsigned long uint32_t; 5 =1 typedef signed char int8_t; 6 =1 typedef unsigned char uint8_t; 7 =1 typedef signed int int16_t; 8 =1 typedef unsigned int uint16_t; 9 =1 #endif 2 #include "V2RFEncoding.h" 1 =1 2 =1 3 =1 #ifndef _V2_RF_ENCODING_H 4 =1 #define _V2_RF_ENCODING_H 5 =1 #include "stdint.h" 1 =2 #ifndef _STD_INT_H_ =2 #define _STD_INT_H_ =2 typedef signed long int32_t; =2 typedef unsigned long uint32_t; =2 typedef signed char int8_t; =2 typedef unsigned char uint8_t; =2 typedef signed int int16_t; =2 typedef unsigned int uint16_t; =2 #endif 6 =1 #include "string.h" 1 =2 /*-------------------------------------------------------------------------- 2 =2 STRING.H 3 =2 4 =2 String functions. 5 =2 Copyright (c) 1988-2008 Keil Elektronik GmbH and Keil Software, Inc. 6 =2 Copyright (c) 2008-2016 ARM Germany GmbH 7 =2 All rights reserved. 8 =2 --------------------------------------------------------------------------*/ 9 =2 10 =2 #ifndef __STRING_H__ 11 =2 #define __STRING_H__ 12 =2 13 =2 #ifndef _SIZE_T 14 =2 #define _SIZE_T 15 =2 typedef unsigned int size_t; 16 =2 #endif 17 =2 18 =2 #ifndef NULL 19 =2 #define NULL ((void *)0) 20 =2 #endif 21 =2 22 =2 #pragma SAVE 23 =2 #pragma REGPARMS 24 =2 extern char *strcat (char *s1, const char *s2); 25 =2 extern char *strncat (char *s1, const char *s2, size_t n); 26 =2 27 =2 extern char strcmp (const char *s1, const char *s2); C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 2 28 =2 extern char strncmp (const char *s1, const char *s2, size_t n); 29 =2 30 =2 extern char *strcpy (char *s1, const char *s2); 31 =2 extern char *strncpy (char *s1, const char *s2, size_t n); 32 =2 33 =2 extern size_t strlen (const char *); 34 =2 35 =2 extern char *strchr (const char *s, char c); 36 =2 extern int strpos (const char *s, char c); 37 =2 extern char *strrchr (const char *s, char c); 38 =2 extern int strrpos (const char *s, char c); 39 =2 40 =2 extern size_t strspn (const char *s, const char *set); 41 =2 extern size_t strcspn (const char *s, const char *set); 42 =2 extern char *strpbrk (const char *s, const char *set); 43 =2 extern char *strrpbrk(const char *s, const char *set); 44 =2 extern char *strstr (const char *s, const char *sub); 45 =2 extern char *strtok (char *str, const char *set); 46 =2 47 =2 extern char memcmp (const void *s1, const void *s2, size_t n); 48 =2 extern void *memcpy (void *s1, const void *s2, size_t n); 49 =2 extern void *memchr (const void *s, char val, size_t n); 50 =2 extern void *memccpy (void *s1, const void *s2, char val, size_t n); 51 =2 extern void *memmove (void *s1, const void *s2, size_t n); 52 =2 extern void *memset (void *s, char val, size_t n); 53 =2 #pragma RESTORE 54 =2 55 =2 #endif 7 =1 8 =1 9 =1 #define TESTDECODE 0 10 =1 11 =1 #define V2_OFFSET_JUMP_START 0x54 12 =1 13 =1 void encodeV2Packet(uint8_t* packet); 14 =1 void decodeV2Packet(uint8_t* packet); 15 =1 uint8_t xorKey(uint8_t key); 16 =1 uint8_t encodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2); 17 =1 uint8_t decodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2); 18 =1 19 =1 void TestDecode(void); 20 =1 #endif 3 4 5 #define V2_OFFSET_JUMP_START 0x54 6 #define V2_PACKET_LEN 9 7 8 #define V2_OFFSET(byte, key, jumpStart) ( \ 9 V2_OFFSETS[byte-1][key%4] \ 10 + \ 11 ((jumpStart > 0 && key >= jumpStart && key < jumpStart+0x80) ? 0x80 : 0) \ 12 ) 13 14 uint8_t code V2_OFFSETS[][4] = { 15 { 0x45, 0x1F, 0x14, 0x5C }, // request type 16 { 0x2B, 0xC9, 0xE3, 0x11 }, // id 1 17 { 0x6D, 0x5F, 0x8A, 0x2B }, // id 2 18 { 0xAF, 0x03, 0x1D, 0xF3 }, // command 19 { 0x1A, 0xE2, 0xF0, 0xD1 }, // argument 20 { 0x04, 0xD8, 0x71, 0x42 }, // sequence 21 { 0xAF, 0x04, 0xDD, 0x07 }, // group 22 { 0x61, 0x13, 0x38, 0x64 } // checksum C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 3 23 }; 24 25 uint8_t xorKey(uint8_t key) { 26 1 // Generate most significant nibble 27 1 const uint8_t shift = (key & 0x0F) < 0x04 ? 0 : 1; 28 1 const uint8_t x = (((key & 0xF0) >> 4) + shift + 6) % 8; 29 1 const uint8_t msn = (((4 + x) ^ 1) & 0x0F) << 4; 30 1 31 1 // Generate least significant nibble 32 1 const uint8_t lsn = ((((key & 0xF) + 4)^2) & 0x0F); 33 1 34 1 return ( msn | lsn ); 35 1 } 36 37 uint8_t decodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2) { 38 1 uint8_t value = byte - s2; 39 1 value = value ^ xorKey; 40 1 value = value - s1; 41 1 42 1 return value; 43 1 } 44 45 uint8_t encodeByte(uint8_t byte, uint8_t s1, uint8_t xorKey, uint8_t s2) { 46 1 uint8_t value = byte + s1; 47 1 value = value ^ xorKey; 48 1 value = value + s2; 49 1 50 1 return value; 51 1 } 52 53 void decodeV2Packet(uint8_t *packet) { 54 1 uint8_t i = 0; 55 1 uint8_t key = xorKey(packet[0]); 56 1 57 1 for (i = 1; i <= 8; i++) 58 1 { 59 2 packet[i] = decodeByte(packet[i], 0, key, V2_OFFSET(i, packet[0], V2_OFFSET_JUMP_START)); 60 2 } 61 1 } 62 63 void encodeV2Packet(uint8_t *packet) { 64 1 uint8_t i = 0; 65 1 uint8_t key = xorKey(packet[0]); 66 1 uint8_t sum = key; 67 1 68 1 for (i = 1; i <= 7; i++) { 69 2 sum += packet[i]; 70 2 packet[i] = encodeByte(packet[i], 0, key, V2_OFFSET(i, packet[0], V2_OFFSET_JUMP_START)); 71 2 } 72 1 73 1 packet[8] = encodeByte(sum, 2, key, V2_OFFSET(8, packet[0], 0)); 74 1 } 75 76 77 #if(TESTDECODE) xdata uint8_t defaultPackage[V2_PACKET_LEN] ={00,0xD8,0xDD,0xD1,0xE6,0xD3,0x3A,0x5F,0xE0 }; #endif 80 81 82 83 void TestDecode(void) 84 { C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 4 85 1 #if(TESTDECODE) uint8_t Package[V2_PACKET_LEN]; uint8_t Package2[V2_PACKET_LEN]; memcpy(Package, defaultPackage, V2_PACKET_LEN); decodeV2Packet(Package); memcpy(Package2, Package, V2_PACKET_LEN); encodeV2Packet(Package2); #endif 95 1 } 96 /* 97 fut089 packet received (9 bytes): 98 Raw packet: 00 D8 DD D1 E6 D3 3A 5F E0 99 100 Decoded: 101 Key : 00 //密码 102 b1 : 25 //灯类型 103 ID : 04D2 //遥控器ID 104 Command : 81 //控制命令 105 Argument : 0F //参数 106 Sequence : 80 //序列 107 Group : 06 //灯组 108 Checksum : C9 //校验 109 */ C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 5 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION L?0019 (BEGIN) 0000 E4 CLR A 0001 FE MOV R6,A 0002 120000 E LCALL ?C?CLDPTR 0005 FF MOV R7,A ; FUNCTION _xorKey (BEGIN) ; SOURCE LINE # 25 ;---- Variable 'key' assigned to Register 'R7' ---- ; SOURCE LINE # 27 0006 EF MOV A,R7 0007 540F ANL A,#0FH 0009 FE MOV R6,A 000A C3 CLR C 000B 9404 SUBB A,#04H 000D 7D01 MOV R5,#01H 000F 5002 JNC ?C0001 0011 7D00 MOV R5,#00H 0013 ?C0001: 0013 ?C0002: ;---- Variable 'shift' assigned to Register 'R5' ---- ; SOURCE LINE # 28 0013 EF MOV A,R7 0014 54F0 ANL A,#0F0H 0016 C4 SWAP A 0017 540F ANL A,#0FH 0019 2D ADD A,R5 001A 2406 ADD A,#06H 001C 5407 ANL A,#07H ;---- Variable 'x' assigned to Register 'R5' ---- ; SOURCE LINE # 29 001E 2404 ADD A,#04H 0020 6401 XRL A,#01H 0022 540F ANL A,#0FH 0024 C4 SWAP A 0025 54F0 ANL A,#0F0H 0027 FD MOV R5,A ;---- Variable 'msn' assigned to Register 'R5' ---- ; SOURCE LINE # 32 0028 EE MOV A,R6 0029 2404 ADD A,#04H 002B 6402 XRL A,#02H 002D 540F ANL A,#0FH ;---- Variable 'lsn' assigned to Register 'R7' ---- ; SOURCE LINE # 34 002F 4D ORL A,R5 0030 FF MOV R7,A ; SOURCE LINE # 35 0031 22 RET ; FUNCTION _xorKey (END) ; FUNCTION _decodeByte (BEGIN) ; SOURCE LINE # 37 ;---- Variable 'byte' assigned to Register 'R7' ---- ;---- Variable 'xorKey' assigned to Register 'R3' ---- ;---- Variable 's1' assigned to Register 'R5' ---- ; SOURCE LINE # 38 0000 C3 CLR C 0001 EF MOV A,R7 0002 9500 R SUBB A,s2 C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 6 0004 FF MOV R7,A ;---- Variable 'value' assigned to Register 'R7' ---- ; SOURCE LINE # 39 0005 EB MOV A,R3 0006 6207 XRL AR7,A ; SOURCE LINE # 40 0008 C3 CLR C 0009 EF MOV A,R7 000A 9D SUBB A,R5 000B FF MOV R7,A ; SOURCE LINE # 42 ; SOURCE LINE # 43 000C 22 RET ; FUNCTION _decodeByte (END) ; FUNCTION _encodeByte (BEGIN) ; SOURCE LINE # 45 ;---- Variable 'byte' assigned to Register 'R7' ---- ;---- Variable 'xorKey' assigned to Register 'R3' ---- ;---- Variable 's1' assigned to Register 'R5' ---- ; SOURCE LINE # 46 0000 EF MOV A,R7 0001 2D ADD A,R5 0002 FF MOV R7,A ;---- Variable 'value' assigned to Register 'R7' ---- ; SOURCE LINE # 47 0003 EB MOV A,R3 0004 6207 XRL AR7,A ; SOURCE LINE # 48 0006 E500 R MOV A,s2 0008 2F ADD A,R7 0009 FF MOV R7,A ; SOURCE LINE # 50 ; SOURCE LINE # 51 000A 22 RET ; FUNCTION _encodeByte (END) ; FUNCTION _decodeV2Packet (BEGIN) ; SOURCE LINE # 53 0000 8B00 R MOV packet,R3 0002 8A00 R MOV packet+01H,R2 0004 8900 R MOV packet+02H,R1 ; SOURCE LINE # 54 ;---- Variable 'i' assigned to Register 'R6' ---- ; SOURCE LINE # 55 0006 120000 R LCALL L?0019 0009 8F00 R MOV key,R7 ; SOURCE LINE # 57 000B 7E01 MOV R6,#01H 000D ?C0006: ; SOURCE LINE # 58 ; SOURCE LINE # 59 000D AB00 R MOV R3,packet 000F AA00 R MOV R2,packet+01H 0011 A900 R MOV R1,packet+02H 0013 120000 E LCALL ?C?CLDPTR 0016 FF MOV R7,A 0017 C3 CLR C 0018 9454 SUBB A,#054H 001A 4009 JC ?C0009 001C EF MOV A,R7 001D 94D4 SUBB A,#0D4H C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 7 001F 5004 JNC ?C0009 0021 7F80 MOV R7,#080H 0023 8002 SJMP ?C0010 0025 ?C0009: 0025 7F00 MOV R7,#00H 0027 ?C0010: 0027 120000 E LCALL ?C?CLDPTR 002A 5403 ANL A,#03H 002C FD MOV R5,A 002D EE MOV A,R6 002E 25E0 ADD A,ACC 0030 25E0 ADD A,ACC 0032 2400 R ADD A,#LOW V2_OFFSETS+0FFFCH 0034 F582 MOV DPL,A 0036 E4 CLR A 0037 3400 R ADDC A,#HIGH V2_OFFSETS+0FFFCH 0039 F583 MOV DPH,A 003B E582 MOV A,DPL 003D 2D ADD A,R5 003E F582 MOV DPL,A 0040 E4 CLR A 0041 3583 ADDC A,DPH 0043 F583 MOV DPH,A 0045 E4 CLR A 0046 93 MOVC A,@A+DPTR 0047 2F ADD A,R7 0048 F500 R MOV ?_decodeByte?BYTE+03H,A 004A 8E82 MOV DPL,R6 004C 758300 MOV DPH,#00H 004F 120000 E LCALL ?C?CLDOPTR 0052 FF MOV R7,A 0053 AB00 R MOV R3,key 0055 E4 CLR A 0056 FD MOV R5,A 0057 120000 R LCALL _decodeByte 005A AB00 R MOV R3,packet 005C AA00 R MOV R2,packet+01H 005E A900 R MOV R1,packet+02H 0060 8E82 MOV DPL,R6 0062 758300 MOV DPH,#00H 0065 EF MOV A,R7 0066 120000 E LCALL ?C?CSTOPTR ; SOURCE LINE # 60 0069 0E INC R6 006A BE09A0 CJNE R6,#09H,?C0006 ; SOURCE LINE # 61 006D ?C0011: 006D 22 RET ; FUNCTION _decodeV2Packet (END) ; FUNCTION _encodeV2Packet (BEGIN) ; SOURCE LINE # 63 0000 8B00 R MOV packet,R3 0002 8A00 R MOV packet+01H,R2 0004 8900 R MOV packet+02H,R1 ; SOURCE LINE # 64 ;---- Variable 'i' assigned to Register 'R6' ---- ; SOURCE LINE # 65 0006 120000 R LCALL L?0019 0009 8F00 R MOV key,R7 ; SOURCE LINE # 66 000B 850000 R MOV sum,key C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 8 ; SOURCE LINE # 68 000E 7E01 MOV R6,#01H 0010 ?C0012: ; SOURCE LINE # 69 0010 AB00 R MOV R3,packet 0012 AA00 R MOV R2,packet+01H 0014 A900 R MOV R1,packet+02H 0016 8E82 MOV DPL,R6 0018 758300 MOV DPH,#00H 001B 120000 E LCALL ?C?CLDOPTR 001E 2500 R ADD A,sum 0020 F500 R MOV sum,A ; SOURCE LINE # 70 0022 120000 E LCALL ?C?CLDPTR 0025 FF MOV R7,A 0026 C3 CLR C 0027 9454 SUBB A,#054H 0029 4009 JC ?C0015 002B EF MOV A,R7 002C 94D4 SUBB A,#0D4H 002E 5004 JNC ?C0015 0030 7F80 MOV R7,#080H 0032 8002 SJMP ?C0016 0034 ?C0015: 0034 7F00 MOV R7,#00H 0036 ?C0016: 0036 AB00 R MOV R3,packet 0038 AA00 R MOV R2,packet+01H 003A A900 R MOV R1,packet+02H 003C 120000 E LCALL ?C?CLDPTR 003F 5403 ANL A,#03H 0041 FD MOV R5,A 0042 EE MOV A,R6 0043 25E0 ADD A,ACC 0045 25E0 ADD A,ACC 0047 2400 R ADD A,#LOW V2_OFFSETS+0FFFCH 0049 F582 MOV DPL,A 004B E4 CLR A 004C 3400 R ADDC A,#HIGH V2_OFFSETS+0FFFCH 004E F583 MOV DPH,A 0050 E582 MOV A,DPL 0052 2D ADD A,R5 0053 F582 MOV DPL,A 0055 E4 CLR A 0056 3583 ADDC A,DPH 0058 F583 MOV DPH,A 005A E4 CLR A 005B 93 MOVC A,@A+DPTR 005C 2F ADD A,R7 005D F500 R MOV ?_encodeByte?BYTE+03H,A 005F 8E82 MOV DPL,R6 0061 758300 MOV DPH,#00H 0064 120000 E LCALL ?C?CLDOPTR 0067 FF MOV R7,A 0068 AB00 R MOV R3,key 006A E4 CLR A 006B FD MOV R5,A 006C 120000 R LCALL _encodeByte 006F AB00 R MOV R3,packet 0071 AA00 R MOV R2,packet+01H 0073 A900 R MOV R1,packet+02H 0075 8E82 MOV DPL,R6 C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 9 0077 758300 MOV DPH,#00H 007A EF MOV A,R7 007B 120000 E LCALL ?C?CSTOPTR ; SOURCE LINE # 71 007E 0E INC R6 007F BE088E CJNE R6,#08H,?C0012 0082 ?C0013: ; SOURCE LINE # 73 0082 AB00 R MOV R3,packet 0084 AA00 R MOV R2,packet+01H 0086 A900 R MOV R1,packet+02H 0088 120000 E LCALL ?C?CLDPTR 008B 5403 ANL A,#03H 008D 900000 R MOV DPTR,#V2_OFFSETS+01CH 0090 93 MOVC A,@A+DPTR 0091 F500 R MOV ?_encodeByte?BYTE+03H,A 0093 AB00 R MOV R3,key 0095 7D02 MOV R5,#02H 0097 AF00 R MOV R7,sum 0099 120000 R LCALL _encodeByte 009C AB00 R MOV R3,packet 009E AA00 R MOV R2,packet+01H 00A0 A900 R MOV R1,packet+02H 00A2 900008 MOV DPTR,#08H 00A5 EF MOV A,R7 00A6 020000 E LJMP ?C?CSTOPTR ; FUNCTION _encodeV2Packet (END) ; FUNCTION TestDecode (BEGIN) ; SOURCE LINE # 83 ; SOURCE LINE # 84 ; SOURCE LINE # 95 0000 22 RET ; FUNCTION TestDecode (END) C51 COMPILER V9.60.7.0 V2RFENCODING 08/17/2024 22:06:33 PAGE 10 NAME CLASS MSPACE TYPE OFFSET SIZE ==== ===== ====== ==== ====== ==== _decodeByte. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- byte . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0007H 1 s1 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0005H 1 xorKey . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 s2 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 value. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 uint16_t . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2 V2_OFFSETS . . . . . . . . . . . . . . PUBLIC CODE ARRAY 0000H 32 _xorKey. . . . . . . . . . . . . . . . PUBLIC CODE PROC 0006H ----- key. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 shift. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1 x. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1 msn. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0005H 1 lsn. . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 int32_t. . . . . . . . . . . . . . . . TYPEDEF ----- LONG ----- 4 _encodeByte. . . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- byte . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0007H 1 s1 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0005H 1 xorKey . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 s2 . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 value. . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1 int16_t. . . . . . . . . . . . . . . . TYPEDEF ----- INT ----- 2 size_t . . . . . . . . . . . . . . . . TYPEDEF ----- U_INT ----- 2 _decodeV2Packet. . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- packet . . . . . . . . . . . . . . . AUTO DATA PTR 0000H 3 i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1 key. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 uint8_t. . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1 _encodeV2Packet. . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- packet . . . . . . . . . . . . . . . AUTO DATA PTR 0000H 3 i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0006H 1 key. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0003H 1 sum. . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0004H 1 int8_t . . . . . . . . . . . . . . . . TYPEDEF ----- CHAR ----- 1 TestDecode . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H ----- uint32_t . . . . . . . . . . . . . . . TYPEDEF ----- U_LONG ----- 4 MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 354 ---- CONSTANT SIZE = 32 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 17 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- EDATA SIZE = ---- ---- HDATA SIZE = ---- ---- XDATA CONST SIZE = ---- ---- FAR CONST SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)