?? main.lss
字號:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000614 00800100 00004642 000046d6 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00004642 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 0000051a 00800714 00800714 00004cea 2**0
ALLOC
3 .noinit 00000000 00800c2e 00800c2e 00004cea 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00004cea 2**0
CONTENTS
5 .stab 00000408 00000000 00000000 00004cec 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 000050f4 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 00000014 00000000 00000000 00005178 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 000005da 00000000 00000000 0000518c 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00002016 00000000 00000000 00005766 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 00000291 00000000 00000000 0000777c 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 00002003 00000000 00000000 00007a0d 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 000008b6 00000000 00000000 00009a10 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 46 00 jmp 0x8c <__ctors_end>
4: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
8: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
c: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
10: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
14: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
18: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
1c: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
20: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
24: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
28: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
2c: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
30: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
34: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
38: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
3c: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
40: 0c 94 b6 0d jmp 0x1b6c <__vector_16>
44: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
48: 0c 94 c3 0c jmp 0x1986 <__vector_18>
4c: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
50: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
54: 0c 94 6e 0e jmp 0x1cdc <__vector_21>
58: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
5c: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
60: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
64: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
68: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
6c: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
70: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
74: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
78: 0c 94 65 0d jmp 0x1aca <__vector_30>
7c: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
80: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
84: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
88: 0c 94 63 00 jmp 0xc6 <__bad_interrupt>
0000008c <__ctors_end>:
8c: 11 24 eor r1, r1
8e: 1f be out 0x3f, r1 ; 63
90: cf ef ldi r28, 0xFF ; 255
92: d0 e1 ldi r29, 0x10 ; 16
94: de bf out 0x3e, r29 ; 62
96: cd bf out 0x3d, r28 ; 61
00000098 <__do_copy_data>:
98: 17 e0 ldi r17, 0x07 ; 7
9a: a0 e0 ldi r26, 0x00 ; 0
9c: b1 e0 ldi r27, 0x01 ; 1
9e: e2 e4 ldi r30, 0x42 ; 66
a0: f6 e4 ldi r31, 0x46 ; 70
a2: 00 e0 ldi r16, 0x00 ; 0
a4: 0b bf out 0x3b, r16 ; 59
a6: 02 c0 rjmp .+4 ; 0xac <__do_copy_data+0x14>
a8: 07 90 elpm r0, Z+
aa: 0d 92 st X+, r0
ac: a4 31 cpi r26, 0x14 ; 20
ae: b1 07 cpc r27, r17
b0: d9 f7 brne .-10 ; 0xa8 <__do_copy_data+0x10>
000000b2 <__do_clear_bss>:
b2: 1c e0 ldi r17, 0x0C ; 12
b4: a4 e1 ldi r26, 0x14 ; 20
b6: b7 e0 ldi r27, 0x07 ; 7
b8: 01 c0 rjmp .+2 ; 0xbc <.do_clear_bss_start>
000000ba <.do_clear_bss_loop>:
ba: 1d 92 st X+, r1
000000bc <.do_clear_bss_start>:
bc: ae 32 cpi r26, 0x2E ; 46
be: b1 07 cpc r27, r17
c0: e1 f7 brne .-8 ; 0xba <.do_clear_bss_loop>
c2: 0c 94 e0 1b jmp 0x37c0 <main>
000000c6 <__bad_interrupt>:
c6: 0c 94 00 00 jmp 0x0 <__vectors>
000000ca <Myeeprom_write_block>:
#define WP_SWITCHWARNEN_ADDR WORK_PARA_ADDR+44 //16路開關量報警使能
#define WP_GPSBOUNDLEFTUP_ADDR WORK_PARA_ADDR+46 //活動范圍
void Myeeprom_write_block ( const void *pointer_ram, void *pointer_eeprom, unsigned char n)
{
ca: fc 01 movw r30, r24
cc: db 01 movw r26, r22
cli () ;
ce: f8 94 cli
while (eeprom_is_ready()==0);
d0: e1 99 sbic 0x1c, 1 ; 28
d2: fe cf rjmp .-4 ; 0xd0 <Myeeprom_write_block+0x6>
void
eeprom_write_block (const void *pointer_ram,
void *pointer_eeprom,
size_t n)
{
d4: 84 2f mov r24, r20
d6: 99 27 eor r25, r25
000000d8 <.24_start>:
if (!__builtin_constant_p (n)
|| n > 256)
{
/* make sure size is a 16 bit variable. */
uint16_t size = n;
asm volatile (
d8: 01 97 sbiw r24, 0x01 ; 1
da: 24 f0 brlt .+8 ; 0xe4 <.24_finished>
dc: 01 90 ld r0, Z+
de: 0e 94 b2 22 call 0x4564 <__eeprom_write_byte_1C1D1E>
e2: fa cf rjmp .-12 ; 0xd8 <.24_start>
000000e4 <.24_finished>:
{
cli () ;
while (eeprom_is_ready()==0);
eeprom_write_block( pointer_ram , pointer_eeprom , n ) ;
sei () ;
e4: 78 94 sei
e6: 08 95 ret
000000e8 <Myeeprom_read_block>:
}
void Myeeprom_read_block ( char *pointer_ram, const void *pointer_eeprom, unsigned char n)
{
e8: cf 93 push r28
ea: df 93 push r29
ec: ec 01 movw r28, r24
ee: db 01 movw r26, r22
if (!(n>0)) return ;
f0: 44 23 and r20, r20
f2: 89 f0 breq .+34 ; 0x116 <.67_finished+0xa>
cli () ;
f4: f8 94 cli
while (eeprom_is_ready()==0);
f6: e1 99 sbic 0x1c, 1 ; 28
f8: fe cf rjmp .-4 ; 0xf6 <Myeeprom_read_block+0xe>
void
eeprom_read_block (void *pointer_ram,
const void *pointer_eeprom,
size_t n)
{
fa: 55 27 eor r21, r21
if (!__builtin_constant_p (n)
|| n > 256)
{
/* make sure size is a 16 bit variable. */
uint16_t size = n;
asm volatile (
fc: ca 01 movw r24, r20
fe: fe 01 movw r30, r28
00000100 <.67_start>:
100: 01 97 sbiw r24, 0x01 ; 1
102: 24 f0 brlt .+8 ; 0x10c <.67_finished>
104: 0e 94 aa 22 call 0x4554 <__eeprom_read_byte_1C1D1E>
108: 01 92 st Z+, r0
10a: fa cf rjmp .-12 ; 0x100 <.67_start>
0000010c <.67_finished>:
cli () ;
while (eeprom_is_ready()==0);
eeprom_read_block( pointer_ram , pointer_eeprom , n ) ;
*(pointer_ram+n) = '\0' ;
10c: 4c 0f add r20, r28
10e: 5d 1f adc r21, r29
110: fa 01 movw r30, r20
112: 10 82 st Z, r1
sei () ;
114: 78 94 sei
116: df 91 pop r29
118: cf 91 pop r28
11a: 08 95 ret
0000011c <centFrameCheck>:
#define Myprintf RunMsgPrintf
#endif
char centFrameCheck( unsigned char *Commd, unsigned char Commdlen )
{
11c: 9c 01 movw r18, r24
//基本長度
if (Commdlen < F_BASIC_LENGTH)return 1;
11e: 6a 31 cpi r22, 0x1A ; 26
120: 18 f4 brcc .+6 ; 0x128 <centFrameCheck+0xc>
122: 81 e0 ldi r24, 0x01 ; 1
124: 90 e0 ldi r25, 0x00 ; 0
126: 08 95 ret
//幀頭
if (strstr(Commd, F_HEAD_STR) ==0)return 2;
128: 60 e0 ldi r22, 0x00 ; 0
12a: 71 e0 ldi r23, 0x01 ; 1
12c: c9 01 movw r24, r18
12e: 0e 94 09 1c call 0x3812 <strstr>
132: 89 2b or r24, r25
134: 19 f4 brne .+6 ; 0x13c <centFrameCheck+0x20>
136: 82 e0 ldi r24, 0x02 ; 2
138: 90 e0 ldi r25, 0x00 ; 0
13a: 08 95 ret
//幀長度
// if (!(Commd[F_LENGTH_BEGIN] == Commdlen))return 3;
//校驗和
//幀有效
return 0;
13c: 80 e0 ldi r24, 0x00 ; 0
13e: 90 e0 ldi r25, 0x00 ; 0
}
140: 08 95 ret
00000142 <centNoteTmlogin>:
//**************************************************************************
//函數:FrameDeal
//功能: 解析中心命令并進行相應的處理
//輸入:Cmmd=中心命令,Commdlen=中心命令長度
//返回:無
//**************************************************************************
void centFrameDeal(unsigned char *Commd, unsigned char Commdlen)
{
char result;
result = centFrameCheck(Commd, Commdlen);
//中心命令幀有效性判斷
if ((Commd[F_TYPE_BEGIN] != F_TYPE_COMMD)&&(Commd[F_TYPE_BEGIN] != F_TYPE_SURE))
{
Myprintf("\n無效的中心命令\n");
return;
}
switch (result)
{
case 0: Myprintf("\n中心命令正確\n");break;
case 1: Myprintf("\n中心命令基本長度錯誤\n");return;
case 2: Myprintf("\n中心命令幀頭錯誤\n");return;
case 3: Myprintf("\n中心命令幀長錯誤\n");return;
case 4: Myprintf("\n中心命令校驗和錯誤\n");return;
}
//根據幀類型進行相應的處理
switch ((int)Commd[F_TYPE_BEGIN])
{
case F_TYPE_COMMD:
switch (Commd[F_CODE_BEGIN])
{
case F_CODE_LOGIN:
//中心要求重新注冊
//設置注冊狀態為0,重新注冊
SysState.Logined = 0;
Myprintf("中心要求重新注冊");
centNoteTmlogin(Commd +F_DATA_BEGIN, Commdlen - F_BASIC_LENGTH);
break;
case F_CODE_CARSTATE:
//中心請求車輛狀態
Myprintf("中心請求車輛狀態");
centGetCarState(Commd +F_DATA_BEGIN, Commdlen - F_BASIC_LENGTH);
break;
case F_CODE_GETWORKPARA:
Myprintf("中心請求工作參數");
centGetWorkPara(Commd +F_DATA_BEGIN, Commdlen - F_BASIC_LENGTH);
break;
case F_CODE_SETWORKPARA:
Myprintf("中心設置工作參數");
centSetWorkPara(Commd +F_DATA_BEGIN, Commdlen - F_BASIC_LENGTH);
break;
case F_CODE_GETWORKSTATE:
Myprintf("中心請求工作狀態");
centGetWorkState(Commd +F_DATA_BEGIN, Commdlen - F_BASIC_LENGTH);
break;
case F_CODE_SETWORKSTATE:
Myprintf("中心設置工作狀態");
centSetWorkState(Commd +F_DATA_BEGIN, Commdlen - F_BASIC_LENGTH);
break;
case F_CODE_WARN:
break;
case F_CODE_CLEARWARN:
break;
case F_CODE_DETECT:
break;
}
break;//break case F_TYPE_COMMD
case F_TYPE_SURE:
switch (Commd[F_CODE_BEGIN])
{
case F_CODE_LOGIN:
Myprintf("\n中心確認登錄\n");
centLoginConfirm(Commd +F_DATA_BEGIN, Commdlen - F_BASIC_LENGTH);
break;
case F_CODE_WARN:
break;
case F_CODE_CLEARWARN:
break;
case F_CODE_DETECT:
break;
}
break;//break case F_TYPE_SURE
}
}
//**************************************************************************
//函數:LoginConfirm
//功能: 中心對終端注冊確認/否認幀
//輸入:Data=DATA部分,Datalen=Data長度
//返回:無
//
//
//**************************************************************************
void centLoginConfirm( unsigned char *Data , int Datalen)
{
if (Data[0] == LP_DATA_SEGMENT_PMT)
{
//合法/允許
//停止計時,進入工作狀態
SysState.Logined = 1;
SysState.fSendLoginMsg.TimeEnabled = 0;
SysState.fSendLoginMsg.flag = 0;
}
}
//**************************************************************************
//函數:centNoteTmlogin
//功能: 中心要求終端重新注冊
//輸入:Data=DATA部分,Datalen=Data長度
//返回:無
//
//
//**************************************************************************
void centNoteTmlogin( unsigned char *Data , int Datalen)
{
SysState.fSendLoginMsg.flag = 1;
142: 81 e0 ldi r24, 0x01 ; 1
144: 80 93 5c 09 sts 0x095C, r24
SysState.Logined = 0;
148: 10 92 72 09 sts 0x0972, r1
14c: 08 95 ret
0000014e <centGetCarState>:
}
//**************************************************************************
//函數:centGetCarState
//功能: 中心讀取車輛狀態
//輸入:Data=DATA部分,Datalen=Data長度
//返回:無
//**************************************************************************
void centGetCarState( unsigned char *Data, int Datalen)
{
//發送一次車輛狀態
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -