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

📄 main.lss

📁 用超声波来测量距离
💻 LSS
📖 第 1 页 / 共 5 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000171c  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000094  00800060  0000171c  000017b0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          000001d7  008000f4  008000f4  00001844  2**0
                  ALLOC
  3 .noinit       00000000  008002cb  008002cb  00001844  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00001844  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  00001844  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  00001bb0  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000014  00000000  00000000  00001c34  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 000004be  00000000  00000000  00001c48  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00000e2a  00000000  00000000  00002106  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 0000020b  00000000  00000000  00002f30  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   00000ea1  00000000  00000000  0000313b  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    0000051f  00000000  00000000  00003fdc  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
       0:	0c 94 2a 00 	jmp	0x54 <__ctors_end>
       4:	0c 94 60 05 	jmp	0xac0 <__vector_1>
       8:	0c 94 b8 07 	jmp	0xf70 <__vector_2>
       c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      10:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      14:	0c 94 9f 06 	jmp	0xd3e <__vector_5>
      18:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      1c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      20:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      24:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      28:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      2c:	0c 94 d5 01 	jmp	0x3aa <__vector_11>
      30:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      34:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      38:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      3c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      40:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      44:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      48:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      4c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      50:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>

00000054 <__ctors_end>:
      54:	11 24       	eor	r1, r1
      56:	1f be       	out	0x3f, r1	; 63
      58:	cf e5       	ldi	r28, 0x5F	; 95
      5a:	d8 e0       	ldi	r29, 0x08	; 8
      5c:	de bf       	out	0x3e, r29	; 62
      5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
      60:	10 e0       	ldi	r17, 0x00	; 0
      62:	a0 e6       	ldi	r26, 0x60	; 96
      64:	b0 e0       	ldi	r27, 0x00	; 0
      66:	ec e1       	ldi	r30, 0x1C	; 28
      68:	f7 e1       	ldi	r31, 0x17	; 23
      6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
      6c:	05 90       	lpm	r0, Z+
      6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
      70:	a4 3f       	cpi	r26, 0xF4	; 244
      72:	b1 07       	cpc	r27, r17
      74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
      76:	12 e0       	ldi	r17, 0x02	; 2
      78:	a4 ef       	ldi	r26, 0xF4	; 244
      7a:	b0 e0       	ldi	r27, 0x00	; 0
      7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
      7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
      80:	ab 3c       	cpi	r26, 0xCB	; 203
      82:	b1 07       	cpc	r27, r17
      84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
      86:	0c 94 33 0a 	jmp	0x1466 <main>

0000008a <__bad_interrupt>:
      8a:	0c 94 00 00 	jmp	0x0 <__vectors>

0000008e <OSTaskCreate>:
** 功  能: 初始化任务堆栈
--------------------------------------------------------
*******************************************************/
void OSTaskCreate(void (*Task)(void),unsigned char *Stack,unsigned char TaskID) 
{ 
      8e:	db 01       	movw	r26, r22
  unsigned char i;                      
  *Stack--=(unsigned int)Task;       //将任务的地址低位压入堆栈, 
      90:	8c 93       	st	X, r24
  *Stack--=(unsigned int)Task>>8;    //将任务的地址高位压入堆栈, 
      92:	89 2f       	mov	r24, r25
      94:	99 27       	eor	r25, r25
      96:	8e 93       	st	-X, r24
  
  *Stack--=0x00;                     //R1 __zero_reg__             
      98:	1e 92       	st	-X, r1
  *Stack--=0x00;                     //R0 __tmp_reg__ 
      9a:	1e 92       	st	-X, r1
  *Stack--=0x80;                                         
      9c:	80 e8       	ldi	r24, 0x80	; 128
      9e:	8e 93       	st	-X, r24
      a0:	11 97       	sbiw	r26, 0x01	; 1

//SREG 在任务中,开启全局中断         
  for(i=0;i<14;i++)    //在 avr-libc 中的 FAQ中的 What registers are used by the C compiler? 
      a2:	80 e0       	ldi	r24, 0x00	; 0
    *Stack--=i;                    //描述了寄存器的作用     
      a4:	8c 93       	st	X, r24
      a6:	11 97       	sbiw	r26, 0x01	; 1
      a8:	8f 5f       	subi	r24, 0xFF	; 255
      aa:	8e 30       	cpi	r24, 0x0E	; 14
      ac:	d8 f3       	brcs	.-10     	; 0xa4 <OSTaskCreate+0x16>
  TCB[TaskID].OSTaskStackTop=(unsigned int)Stack;    //将人工堆栈的栈顶,保存到堆栈的数组中 
      ae:	84 2f       	mov	r24, r20
      b0:	99 27       	eor	r25, r25
      b2:	fc 01       	movw	r30, r24
      b4:	ee 0f       	add	r30, r30
      b6:	ff 1f       	adc	r31, r31
      b8:	ee 0f       	add	r30, r30
      ba:	ff 1f       	adc	r31, r31
      bc:	eb 5f       	subi	r30, 0xFB	; 251
      be:	fe 4f       	sbci	r31, 0xFE	; 254
      c0:	b1 83       	std	Z+1, r27	; 0x01
      c2:	a0 83       	st	Z, r26
  OSRdyTbl|=0x01<<TaskID;      //任务就绪表已经准备好 
      c4:	21 e0       	ldi	r18, 0x01	; 1
      c6:	30 e0       	ldi	r19, 0x00	; 0
      c8:	02 c0       	rjmp	.+4      	; 0xce <OSTaskCreate+0x40>
      ca:	22 0f       	add	r18, r18
      cc:	33 1f       	adc	r19, r19
      ce:	8a 95       	dec	r24
      d0:	e2 f7       	brpl	.-8      	; 0xca <OSTaskCreate+0x3c>
      d2:	22 2a       	or	r2, r18
      d4:	08 95       	ret

000000d6 <OSStartTask>:
} 

/*******************************************************
** 函数名: OSStartTask()
** 子函数: 无
** 输  入: 无
** 输  出: 无
** 功  能: 开始任务调度,从最低优先级的任务的开始 
--------------------------------------------------------
*******************************************************/
//
void OSStartTask(void)         
{ 
  OSTaskRunningPrio=OS_TASKS; 
      d6:	34 e0       	ldi	r19, 0x04	; 4
      d8:	33 2e       	mov	r3, r19
  SP=TCB[OS_TASKS].OSTaskStackTop+17;
      da:	80 91 15 01 	lds	r24, 0x0115
      de:	90 91 16 01 	lds	r25, 0x0116
      e2:	41 96       	adiw	r24, 0x11	; 17
      e4:	9e bf       	out	0x3e, r25	; 62
      e6:	8d bf       	out	0x3d, r24	; 61
  __asm__ __volatile__(    "reti"       " \
      e8:	18 95       	reti
      ea:	08 95       	ret

000000ec <OSSched>:
\t"  );  
} 

/*******************************************************
** 函数名: OSSched()
** 子函数: 无
** 输  入: 无
** 输  出: 无
** 功  能: 进行任务调度,SP是指向堆栈的指针,在该任务要改变
--------------------------------------------------------
*******************************************************/
void OSSched(void) 
{  

  __asm__ __volatile__("LDI  R16,0x01              \
      ec:	01 e0       	ldi	r16, 0x01	; 1
\t");   
  //清除中断要求任务切换的标志位,设置正在任务切换标志位 
  __asm__ __volatile__("SEI                        \
      ee:	78 94       	sei
\t");       
   //开中断,因为如果因中断在任务调度中进行,要重新进行调度时,已经关中断 
   //根据中断时保存寄存器的次序入栈,模拟一次中断后,入栈的情况
  __asm__ __volatile__("PUSH __zero_reg__          \
      f0:	1f 92       	push	r1
\t");  //R1 
  __asm__ __volatile__("PUSH __tmp_reg__           \
      f2:	0f 92       	push	r0
\t");  //R0  
  __asm__ __volatile__("IN   __tmp_reg__,__SREG__  \
      f4:	0f b6       	in	r0, 0x3f	; 63
\t");  //保存状态寄存器SREG 
  __asm__ __volatile__("PUSH __tmp_reg__           \
      f6:	0f 92       	push	r0
\t"); 
  __asm__ __volatile__("CLR  __zero_reg__          \
      f8:	11 24       	eor	r1, r1
\t");  //R0重新清零 
  __asm__ __volatile__("PUSH R18                   \
      fa:	2f 93       	push	r18
\t"); 
  __asm__ __volatile__("PUSH R19                   \
      fc:	3f 93       	push	r19
\t"); 
  __asm__ __volatile__("PUSH R20                   \
      fe:	4f 93       	push	r20
\t"); 
  __asm__ __volatile__("PUSH R21                   \
     100:	5f 93       	push	r21
\t"); 
  __asm__ __volatile__("PUSH R22                   \
     102:	6f 93       	push	r22
\t"); 
  __asm__ __volatile__("PUSH R23                   \
     104:	7f 93       	push	r23
\t"); 
  __asm__ __volatile__("PUSH R24                   \
     106:	8f 93       	push	r24
\t"); 
  __asm__ __volatile__("PUSH R25                   \
     108:	9f 93       	push	r25
\t"); 
  __asm__ __volatile__("PUSH R26                   \
     10a:	af 93       	push	r26
\t"); 
  __asm__ __volatile__("PUSH R27                   \
     10c:	bf 93       	push	r27
\t"); 
  __asm__ __volatile__("PUSH R30                   \
     10e:	ef 93       	push	r30
\t");     
  __asm__ __volatile__("PUSH R31                   \
     110:	ff 93       	push	r31

00000112 <Int_OSSched>:
\t"); 
     
  __asm__ __volatile__("Int_OSSched:               \
\t");  //当中断要求调度,直接进入这里 
  __asm__ __volatile__("SEI                        \
     112:	78 94       	sei
\t");  
    //开中断,因为如果因中断在任务调度中进行,已经关中断
  __asm__ __volatile__("PUSH R28                   \
     114:	cf 93       	push	r28
\t");  //R28与R29用于建立在堆栈上的指针
  __asm__ __volatile__("PUSH R29                   \
     116:	df 93       	push	r29
\t");  //入栈完成 
     
  TCB[OSTaskRunningPrio].OSTaskStackTop=SP;           //将正在运行的任务的堆栈底保存 
     118:	e3 2d       	mov	r30, r3
     11a:	ff 27       	eor	r31, r31
     11c:	ee 0f       	add	r30, r30
     11e:	ff 1f       	adc	r31, r31
     120:	ee 0f       	add	r30, r30
     122:	ff 1f       	adc	r31, r31
     124:	eb 5f       	subi	r30, 0xFB	; 251
     126:	fe 4f       	sbci	r31, 0xFE	; 254
     128:	8d b7       	in	r24, 0x3d	; 61
     12a:	9e b7       	in	r25, 0x3e	; 62
     12c:	91 83       	std	Z+1, r25	; 0x01
     12e:	80 83       	st	Z, r24

  unsigned char OSNextTaskPrio;                            //在现有堆栈上开设新的空间  
  for (OSNextTaskPrio = 0;                                 //进行任务调度 
     130:	40 e0       	ldi	r20, 0x00	; 0
     132:	22 2d       	mov	r18, r2
     134:	33 27       	eor	r19, r19
     136:	20 fd       	sbrc	r18, 0
     138:	0c c0       	rjmp	.+24     	; 0x152 <Int_OSSched+0x40>
     13a:	4f 5f       	subi	r20, 0xFF	; 255
     13c:	44 30       	cpi	r20, 0x04	; 4
     13e:	48 f4       	brcc	.+18     	; 0x152 <Int_OSSched+0x40>
     140:	c9 01       	movw	r24, r18
     142:	04 2e       	mov	r0, r20
     144:	02 c0       	rjmp	.+4      	; 0x14a <Int_OSSched+0x38>
     146:	95 95       	asr	r25
     148:	87 95       	ror	r24
     14a:	0a 94       	dec	r0
     14c:	e2 f7       	brpl	.-8      	; 0x146 <Int_OSSched+0x34>
     14e:	80 ff       	sbrs	r24, 0
     150:	f4 cf       	rjmp	.-24     	; 0x13a <Int_OSSched+0x28>
    OSNextTaskPrio < OS_TASKS && !(OSRdyTbl & (0x01<<OSNextTaskPrio));  
    OSNextTaskPrio++); 
    OSTaskRunningPrio = OSNextTaskPrio ; 
     152:	34 2e       	mov	r3, r20

  cli();  //保护堆栈转换 
     154:	f8 94       	cli
  SP=TCB[OSTaskRunningPrio].OSTaskStackTop; //将将要运行的任务的堆栈底赋给SP
     156:	e4 2f       	mov	r30, r20
     158:	ff 27       	eor	r31, r31
     15a:	ee 0f       	add	r30, r30
     15c:	ff 1f       	adc	r31, r31
     15e:	ee 0f       	add	r30, r30
     160:	ff 1f       	adc	r31, r31
     162:	eb 5f       	subi	r30, 0xFB	; 251
     164:	fe 4f       	sbci	r31, 0xFE	; 254
     166:	80 81       	ld	r24, Z
     168:	91 81       	ldd	r25, Z+1	; 0x01
     16a:	9e bf       	out	0x3e, r25	; 62
     16c:	8d bf       	out	0x3d, r24	; 61
  sei(); 
     16e:	78 94       	sei
  //根据中断时的出栈次序 
  __asm__ __volatile__("POP  R29                   \
     170:	df 91       	pop	r29
\t");     
  __asm__ __volatile__("POP  R28                   \
     172:	cf 91       	pop	r28
\t");         
  __asm__ __volatile__("POP  R31                   \
     174:	ff 91       	pop	r31
\t");     
  __asm__ __volatile__("POP  R30                   \
     176:	ef 91       	pop	r30
\t");     
  __asm__ __volatile__("POP  R27                   \
     178:	bf 91       	pop	r27

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -