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

📄 test.lss

📁 改程序是ucos-ii在meg16上的移植
💻 LSS
📖 第 1 页 / 共 4 页
字号:

test.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000005aa  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  000005aa  0000063e  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          000001c2  00800060  00800060  0000063e  2**0
                  ALLOC
  3 .noinit       00000000  00800222  00800222  0000063e  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  0000063e  2**0
                  CONTENTS
  5 .debug_aranges 00000014  00000000  00000000  0000063e  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 00000181  00000000  00000000  00000652  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00000596  00000000  00000000  000007d3  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 000001a4  00000000  00000000  00000d69  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   00000579  00000000  00000000  00000f0d  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    00000296  00000000  00000000  00001486  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54
   4:	0c 94 45 00 	jmp	0x8a
   8:	0c 94 45 00 	jmp	0x8a
   c:	0c 94 45 00 	jmp	0x8a
  10:	0c 94 45 00 	jmp	0x8a
  14:	0c 94 45 00 	jmp	0x8a
  18:	0c 94 45 00 	jmp	0x8a
  1c:	0c 94 45 00 	jmp	0x8a
  20:	0c 94 45 00 	jmp	0x8a
  24:	0c 94 45 00 	jmp	0x8a
  28:	0c 94 45 00 	jmp	0x8a
  2c:	0c 94 45 00 	jmp	0x8a
  30:	0c 94 45 00 	jmp	0x8a
  34:	0c 94 45 00 	jmp	0x8a
  38:	0c 94 45 00 	jmp	0x8a
  3c:	0c 94 45 00 	jmp	0x8a
  40:	0c 94 45 00 	jmp	0x8a
  44:	0c 94 45 00 	jmp	0x8a
  48:	0c 94 45 00 	jmp	0x8a
  4c:	0c 94 45 00 	jmp	0x8a
  50:	0c 94 45 00 	jmp	0x8a

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  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:	ea ea       	ldi	r30, 0xAA	; 170
  68:	f5 e0       	ldi	r31, 0x05	; 5
  6a:	02 c0       	rjmp	.+4      	; 0x70

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

00000070 <.do_copy_data_start>:
  70:	a0 36       	cpi	r26, 0x60	; 96
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	12 e0       	ldi	r17, 0x02	; 2
  78:	a0 e6       	ldi	r26, 0x60	; 96
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

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

00000080 <.do_clear_bss_start>:
  80:	a2 32       	cpi	r26, 0x22	; 34
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 b3 02 	jmp	0x566

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

0000008e <OSTaskCreate>:
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void OSTaskCreate(void (*Task)(void),Uint_8bit *Stack,Uint_8bit TaskID)
{
  8e:	db 01       	movw	r26, r22
	Uint_8bit i;
	*Stack--=(Uint_16bit)Task;				/*将任务的地址低位压入堆栈		*/
  90:	8c 93       	st	X, r24
	*Stack--=(Uint_16bit)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;							/*SREG 在任务中,开启全局中断	*/
  9c:	80 e8       	ldi	r24, 0x80	; 128
  9e:	8e 93       	st	-X, r24
  a0:	11 97       	sbiw	r26, 0x01	; 1
	for(i=0;i<14;i++)
  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
	/*
		在 avr-libc 中的 FAQ中的 What registers are used by the C compiler?
		描述了寄存器的作用
	*/
	TCB[TaskID].OSTaskStackTop = (Uint_16bit)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:	e8 0f       	add	r30, r24
  be:	f9 1f       	adc	r31, r25
  c0:	e0 5a       	subi	r30, 0xA0	; 160
  c2:	ff 4f       	sbci	r31, 0xFF	; 255
  c4:	a0 83       	st	Z, r26
  c6:	b1 83       	std	Z+1, r27	; 0x01
	/*
		将人工堆栈的栈顶,保存到堆栈的数组中
	*/
	OSRdyTbl |= 0x01<<TaskID;      			/*任务就绪表已经准备好			*/
  c8:	21 e0       	ldi	r18, 0x01	; 1
  ca:	30 e0       	ldi	r19, 0x00	; 0
  cc:	02 c0       	rjmp	.+4      	; 0xd2
  ce:	22 0f       	add	r18, r18
  d0:	33 1f       	adc	r19, r19
  d2:	8a 95       	dec	r24
  d4:	e2 f7       	brpl	.-8      	; 0xce
  d6:	22 2a       	or	r2, r18
  d8:	08 95       	ret

000000da <OSStartTask>:
}

/************************************************************************************************************************
函数名称:	OSStartTask
函数原型:	void OSStartTask(void)
函数功能:	开始任务调度,从空闲任务开始运行 
入口参数:	无
出口参数:	无
有关说明:	执行"reti"指令之后打开全局中断
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void OSStartTask(void)
{
	OSPrioCur = OS_TASKS;
  da:	43 e0       	ldi	r20, 0x03	; 3
  dc:	34 2e       	mov	r3, r20
	OSPrioHighRdy = OS_TASKS;
  de:	53 2c       	mov	r5, r3
	SP=TCB[OS_TASKS].OSTaskStackTop+17;
  e0:	80 91 6f 00 	lds	r24, 0x006F
  e4:	90 91 70 00 	lds	r25, 0x0070
  e8:	41 96       	adiw	r24, 0x11	; 17
  ea:	9e bf       	out	0x3e, r25	; 62
  ec:	8d bf       	out	0x3d, r24	; 61
	__asm__ __volatile__(    "reti"       "\n\t"  );
  ee:	18 95       	reti
  f0:	08 95       	ret

000000f2 <OS_TASK_SW>:
}

/************************************************************************************************************************
函数名称:	OS_TASK_SW
函数原型:	void OS_TASK_SW(void)
函数功能:	进行任务调度 
入口参数:	无
出口参数:	无
有关说明:	中断和任务都可以调用这个任务调度函数
创建时间:	2007年3月3日
修改时间:	
************************************************************************************************************************/
void OS_TASK_SW(void)
{

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

00000118 <Int_OSSched>:
	
	__asm__ __volatile__("Int_OSSched:              \n\t");	/*当中断要求调度,直接进入这里		*/ 
	__asm__ __volatile__("SEI                       \n\t");
 118:	78 94       	sei
	/*
		开中断,因为如果因中断在任务调度中进行,已经关中断
	*/
	__asm__ __volatile__("PUSH R28                  \n\t");	/*R28与R29用于建立在堆栈上的指针	*/
 11a:	cf 93       	push	r28
	__asm__ __volatile__("PUSH R29                  \n\t");	/*入栈完成							*/
 11c:	df 93       	push	r29
	
	TCB[OSPrioCur].OSTaskStackTop=SP;					/*将正在运行的任务的堆栈底保存		*/
 11e:	83 2d       	mov	r24, r3
 120:	99 27       	eor	r25, r25
 122:	fc 01       	movw	r30, r24
 124:	ee 0f       	add	r30, r30
 126:	ff 1f       	adc	r31, r31
 128:	ee 0f       	add	r30, r30
 12a:	ff 1f       	adc	r31, r31
 12c:	e8 0f       	add	r30, r24
 12e:	f9 1f       	adc	r31, r25
 130:	e0 5a       	subi	r30, 0xA0	; 160
 132:	ff 4f       	sbci	r31, 0xFF	; 255
 134:	8d b7       	in	r24, 0x3d	; 61
 136:	9e b7       	in	r25, 0x3e	; 62
 138:	80 83       	st	Z, r24
 13a:	91 83       	std	Z+1, r25	; 0x01
	
	OSPrioCur = OSPrioHighRdy ;							/*运行当前就绪表中的最高优先级任务	*/
 13c:	35 2c       	mov	r3, r5
	
	cli();												/*保护堆栈转换,属于临界代码,要保护	*/
 13e:	f8 94       	cli
	SP=TCB[OSPrioCur].OSTaskStackTop;
 140:	85 2d       	mov	r24, r5
 142:	99 27       	eor	r25, r25
 144:	fc 01       	movw	r30, r24
 146:	ee 0f       	add	r30, r30
 148:	ff 1f       	adc	r31, r31
 14a:	ee 0f       	add	r30, r30
 14c:	ff 1f       	adc	r31, r31
 14e:	e8 0f       	add	r30, r24
 150:	f9 1f       	adc	r31, r25
 152:	e0 5a       	subi	r30, 0xA0	; 160
 154:	ff 4f       	sbci	r31, 0xFF	; 255
 156:	80 81       	ld	r24, Z
 158:	91 81       	ldd	r25, Z+1	; 0x01
 15a:	9e bf       	out	0x3e, r25	; 62
 15c:	8d bf       	out	0x3d, r24	; 61
	sei();
 15e:	78 94       	sei
	
	/*根据中断时的出栈次序*/
	__asm__ __volatile__("POP  R29                  \n\t");
 160:	df 91       	pop	r29
	__asm__ __volatile__("POP  R28                  \n\t");
 162:	cf 91       	pop	r28
	__asm__ __volatile__("POP  R31                  \n\t");
 164:	ff 91       	pop	r31
	__asm__ __volatile__("POP  R30                  \n\t");
 166:	ef 91       	pop	r30
	__asm__ __volatile__("POP  R27                  \n\t");
 168:	bf 91       	pop	r27
	__asm__ __volatile__("POP  R26                  \n\t");
 16a:	af 91       	pop	r26
	__asm__ __volatile__("POP  R25                  \n\t");
 16c:	9f 91       	pop	r25
	__asm__ __volatile__("POP  R24                  \n\t");
 16e:	8f 91       	pop	r24
	__asm__ __volatile__("POP  R23                  \n\t");
 170:	7f 91       	pop	r23
	__asm__ __volatile__("POP  R22                  \n\t");
 172:	6f 91       	pop	r22
	__asm__ __volatile__("POP  R21                  \n\t");
 174:	5f 91       	pop	r21
	__asm__ __volatile__("POP  R20                  \n\t");
 176:	4f 91       	pop	r20
	__asm__ __volatile__("POP  R19                  \n\t");
 178:	3f 91       	pop	r19
	__asm__ __volatile__("POP  R18                  \n\t");
 17a:	2f 91       	pop	r18
	__asm__ __volatile__("POP  __tmp_reg__          \n\t");		/*SERG 出栈并恢复	*/
 17c:	0f 90       	pop	r0
	__asm__ __volatile__("OUT  __SREG__,__tmp_reg__ \n\t");
 17e:	0f be       	out	0x3f, r0	; 63
	__asm__ __volatile__("POP  __tmp_reg__          \n\t");		/*R0 出栈			*/
 180:	0f 90       	pop	r0
	__asm__ __volatile__("POP  __zero_reg__         \n\t");		/*R1 出栈			*/
 182:	1f 90       	pop	r1
	/*中断时出栈完成*/
	__asm__ __volatile__("CLI                       \n\t");		/*关中断			*/
 184:	f8 94       	cli
	__asm__ __volatile__("SBRC R16,1                \n\t");
 186:	01 fd       	sbrc	r16, 1
	/*
		SBRC当寄存器位为0则跳过下一条指令
		检查系统正在进行任务调度时,是否有中断发生并进行要求任务调度,
		如果中断要求调度则重新进行一次任务调度。
		0x02是中断要求调度的标志位
	*/
	__asm__ __volatile__("RJMP OSSched              \n\t");		/*重新调度			*/
 188:	22 c0       	rjmp	.+68     	; 0x1ce

⌨️ 快捷键说明

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