⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lss

📁 用来pdu编解码
💻 LSS
📖 第 1 页 / 共 5 页
字号:

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 + -