📄 timers.lss
字号:
Timers.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000520 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 00000520 000005b4 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000007b 00800060 00800060 000005b4 2**2
ALLOC
3 .noinit 00000000 008000db 008000db 000005b4 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000005b4 2**0
CONTENTS
5 .stab 00001d40 00000000 00000000 000005b4 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 000003a2 00000000 00000000 000022f4 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 00000014 00000000 00000000 00002696 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 000000a2 00000000 00000000 000026aa 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00000262 00000000 00000000 0000274c 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 000000ed 00000000 00000000 000029ae 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 0000012e 00000000 00000000 00002a9b 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 00000134 00000000 00000000 00002bc9 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 31 00 jmp 0x62 <__init>
4: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
8: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
c: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
10: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
14: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
18: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
1c: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
20: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
24: 0c 94 4e 00 jmp 0x9c <__vector_9>
28: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
2c: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
30: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
34: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
38: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
3c: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
40: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
44: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
48: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
4c: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
50: 0c 94 4c 00 jmp 0x98 <__bad_interrupt>
00000054 <__ctors_end>:
54: 96 00 .word 0x0096 ; ????
56: 72 00 .word 0x0072 ; ????
58: 66 00 .word 0x0066 ; ????
5a: 02 cd rjmp .-1532 ; 0xfffffa60 <__eeprom_end+0xff7efa60>
0000005b <task1Tcb>:
5b: cd 00 56 00 9d 00 03 ..V....
00000062 <__init>:
62: 11 24 eor r1, r1
64: 1f be out 0x3f, r1 ; 63
66: cf e5 ldi r28, 0x5F ; 95
68: d4 e0 ldi r29, 0x04 ; 4
6a: de bf out 0x3e, r29 ; 62
6c: cd bf out 0x3d, r28 ; 61
0000006e <__do_copy_data>:
6e: 10 e0 ldi r17, 0x00 ; 0
70: a0 e6 ldi r26, 0x60 ; 96
72: b0 e0 ldi r27, 0x00 ; 0
74: e0 e2 ldi r30, 0x20 ; 32
76: f5 e0 ldi r31, 0x05 ; 5
78: 02 c0 rjmp .+4 ; 0x7e <.do_copy_data_start>
0000007a <.do_copy_data_loop>:
7a: 05 90 lpm r0, Z+
7c: 0d 92 st X+, r0
0000007e <.do_copy_data_start>:
7e: a0 36 cpi r26, 0x60 ; 96
80: b1 07 cpc r27, r17
82: d9 f7 brne .-10 ; 0x7a <.do_copy_data_loop>
00000084 <__do_clear_bss>:
84: 10 e0 ldi r17, 0x00 ; 0
86: a0 e6 ldi r26, 0x60 ; 96
88: b0 e0 ldi r27, 0x00 ; 0
8a: 01 c0 rjmp .+2 ; 0x8e <.do_clear_bss_start>
0000008c <.do_clear_bss_loop>:
8c: 1d 92 st X+, r1
0000008e <.do_clear_bss_start>:
8e: ab 3d cpi r26, 0xDB ; 219
90: b1 07 cpc r27, r17
92: e1 f7 brne .-8 ; 0x8c <.do_clear_bss_loop>
94: 0c 94 7d 00 jmp 0xfa <main>
00000098 <__bad_interrupt>:
98: 0c 94 00 00 jmp 0x0 <__vectors>
0000009c <__vector_9>:
#pragma optimize=z 4
AVRX_SIGINT(SIG_OVERFLOW0)
{
IntProlog(); // Switch to kernel stack/context
9c: 0e 94 9b 00 call 0x136 <IntProlog>
TCNT0 = TCNT0_INIT;
a0: 80 ee ldi r24, 0xE0 ; 224
a2: 82 bf out 0x32, r24 ; 50
// outp(TCNT0_INIT, TCNT0);
AvrXTimerHandler(); // Call Time queue manager
a4: 0e 94 24 02 call 0x448 <AvrXTimerHandler>
Epilog(); // Return to tasks
a8: 0e 94 e7 00 call 0x1ce <Epilog>
000000ac <task1>:
}
/*
Task 1 simply flashes the light off for 1/5 second and then on for 4/5th
for a 1 second cycle time.
*/
AVRX_IAR_TASKDEF(task1, 0, 6, 3)
AVRX_GCC_TASKDEF(task1, 8, 3)
{
while (1)
{
AvrXStartTimer(&timer1, 800); // 800 ms delay
ac: 60 e2 ldi r22, 0x20 ; 32
ae: 73 e0 ldi r23, 0x03 ; 3
b0: 87 e9 ldi r24, 0x97 ; 151
b2: 90 e0 ldi r25, 0x00 ; 0
b4: 0e 94 f8 01 call 0x3f0 <AvrXStartTimer>
AvrXWaitTimer(&timer1);
b8: 87 e9 ldi r24, 0x97 ; 151
ba: 90 e0 ldi r25, 0x00 ; 0
bc: 0e 94 85 01 call 0x30a <AvrXWaitMessageAck>
LED = LED ^ 0x01;
c0: 88 b3 in r24, 0x18 ; 24
c2: 11 e0 ldi r17, 0x01 ; 1
c4: 81 27 eor r24, r17
c6: 88 bb out 0x18, r24 ; 24
// outp(inp(LED) ^ 0x01, LED);
AvrXStartTimer(&timer1, 200); // 200 ms delay
c8: 68 ec ldi r22, 0xC8 ; 200
ca: 70 e0 ldi r23, 0x00 ; 0
cc: 87 e9 ldi r24, 0x97 ; 151
ce: 90 e0 ldi r25, 0x00 ; 0
d0: 0e 94 f8 01 call 0x3f0 <AvrXStartTimer>
AvrXWaitTimer(&timer1);
d4: 87 e9 ldi r24, 0x97 ; 151
d6: 90 e0 ldi r25, 0x00 ; 0
d8: 0e 94 85 01 call 0x30a <AvrXWaitMessageAck>
LED = LED ^ 0x01;
dc: 88 b3 in r24, 0x18 ; 24
de: 81 27 eor r24, r17
e0: 88 bb out 0x18, r24 ; 24
e2: e4 cf rjmp .-56 ; 0xac <task1>
000000e4 <task2>:
// outp(inp(LED) ^ 0x01, LED);
}
}
/*
Task 2 cycles the light on/off over 4 seconds. It uses a simplified
form of the delay API
*/
AVRX_IAR_TASKDEF(task2, 0, 6, 2)
AVRX_GCC_TASKDEF(task2, 8, 2)
{
while (1)
{
AvrXDelay(&timer2, 2000); // 2 second delay
e4: 60 ed ldi r22, 0xD0 ; 208
e6: 77 e0 ldi r23, 0x07 ; 7
e8: 80 e6 ldi r24, 0x60 ; 96
ea: 90 e0 ldi r25, 0x00 ; 0
ec: 0e 94 f6 01 call 0x3ec <AvrXDelay>
LED = LED ^ 0x02;
f0: 88 b3 in r24, 0x18 ; 24
f2: 92 e0 ldi r25, 0x02 ; 2
f4: 89 27 eor r24, r25
f6: 88 bb out 0x18, r24 ; 24
f8: f5 cf rjmp .-22 ; 0xe4 <task2>
000000fa <main>:
// outp((inp(LED) ^ 0x02), LED);
}
}
int main(void) // Main runs under the AvrX Stack
{
fa: cf e5 ldi r28, 0x5F ; 95
fc: d4 e0 ldi r29, 0x04 ; 4
fe: de bf out 0x3e, r29 ; 62
100: cd bf out 0x3d, r28 ; 61
AvrXSetKernelStack(0);
102: 80 e0 ldi r24, 0x00 ; 0
104: 90 e0 ldi r25, 0x00 ; 0
106: 0e 94 20 01 call 0x240 <AvrXSetKernelStack>
/*
outp((1<<SE), MCUCR); // Enable "Sleep" instruction
outp(TCNT0_INIT, TCNT0);
outp(TMC8_CK256, TCCR0); // Set up Timer0 for CLK/256 rate
outp((1<<TOIE0), TIMSK); // Enable Timer0 overflow interrupt
outp(0xFF, LEDDDR); // Make LED output and
outp(0xFF, LED); // drive high (LEDs off)
*/
MCUCR = 1<<SE;
10a: 80 e4 ldi r24, 0x40 ; 64
10c: 85 bf out 0x35, r24 ; 53
TCNT0 = TCNT0_INIT;
10e: 80 ee ldi r24, 0xE0 ; 224
110: 82 bf out 0x32, r24 ; 50
TCCR0 = TMC8_CK256;
112: 84 e0 ldi r24, 0x04 ; 4
114: 83 bf out 0x33, r24 ; 51
TIMSK = 1<<TOIE0;
116: 81 e0 ldi r24, 0x01 ; 1
118: 89 bf out 0x39, r24 ; 57
LEDDDR = 0xFF;
11a: 8f ef ldi r24, 0xFF ; 255
11c: 87 bb out 0x17, r24 ; 23
LED = 0xFF;
11e: 88 bb out 0x18, r24 ; 24
AvrXRunTask(TCB(task1));
120: 8b e5 ldi r24, 0x5B ; 91
122: 90 e0 ldi r25, 0x00 ; 0
124: 0e 94 2c 01 call 0x258 <AvrXRunTask>
AvrXRunTask(TCB(task2));
128: 84 e5 ldi r24, 0x54 ; 84
12a: 90 e0 ldi r25, 0x00 ; 0
12c: 0e 94 2c 01 call 0x258 <AvrXRunTask>
// AvrXRunTask(TCB(Monitor));
// InitSerialIO(UBRR_INIT); // Initialize USART baud rate generator
Epilog(); // Switch from AvrX Stack to first task
130: 0e 94 e7 00 call 0x1ce <Epilog>
while(1);
134: ff cf rjmp .-2 ; 0x134 <main+0x3a>
00000136 <IntProlog>:
136: df 93 push r29
138: cf 93 push r28
13a: bf 93 push r27
13c: af 93 push r26
13e: 9f 93 push r25
140: d0 e0 ldi r29, 0x00 ; 0
142: c0 ed ldi r28, 0xD0 ; 208
144: 9f b7 in r25, 0x3f ; 63
146: ae 81 ldd r26, Y+6 ; 0x06
148: af 5f subi r26, 0xFF ; 255
14a: ae 83 std Y+6, r26 ; 0x06
14c: 60 f0 brcs .+24 ; 0x166 <SaveContext>
14e: aa 81 ldd r26, Y+2 ; 0x02
150: bb 81 ldd r27, Y+3 ; 0x03
152: ba 2b or r27, r26
154: 41 f4 brne .+16 ; 0x166 <SaveContext>
156: cd b7 in r28, 0x3d ; 61
158: de b7 in r29, 0x3e ; 62
15a: fe 81 ldd r31, Y+6 ; 0x06
15c: ef 81 ldd r30, Y+7 ; 0x07
15e: 29 96 adiw r28, 0x09 ; 9
160: cd bf out 0x3d, r28 ; 61
162: de bf out 0x3e, r29 ; 62
164: 09 94 ijmp
00000166 <SaveContext>:
166: 8f 93 push r24
168: 7f 93 push r23
16a: 6f 93 push r22
16c: 5f 93 push r21
16e: 4f 93 push r20
170: 3f 93 push r19
172: 2f 93 push r18
174: 1f 93 push r17
176: 0f 93 push r16
178: ff 92 push r15
17a: ef 92 push r14
17c: df 92 push r13
17e: cf 92 push r12
180: bf 92 push r11
182: af 92 push r10
184: 9f 92 push r9
186: 8f 92 push r8
188: 7f 92 push r7
18a: 6f 92 push r6
18c: 5f 92 push r5
18e: 4f 92 push r4
190: 3f 92 push r3
192: 2f 92 push r2
194: 1f 92 push r1
196: 0f 92 push r0
198: 9f 93 push r25
19a: cd b7 in r28, 0x3d ; 61
19c: de b7 in r29, 0x3e ; 62
19e: 9b 8d ldd r25, Y+27 ; 0x1b
1a0: 39 a1 ldd r19, Y+33 ; 0x21
1a2: 48 a1 ldd r20, Y+32 ; 0x20
1a4: e8 a3 std Y+32, r30 ; 0x20
1a6: f9 a3 std Y+33, r31 ; 0x21
1a8: 70 f0 brcs .+28 ; 0x1c6 <AlreadyInKernel>
1aa: f0 e0 ldi r31, 0x00 ; 0
1ac: e0 ed ldi r30, 0xD0 ; 208
1ae: d3 81 ldd r29, Z+3 ; 0x03
1b0: c2 81 ldd r28, Z+2 ; 0x02
1b2: be b7 in r27, 0x3e ; 62
1b4: ad b7 in r26, 0x3d ; 61
1b6: bd 83 std Y+5, r27 ; 0x05
1b8: ac 83 std Y+4, r26 ; 0x04
1ba: 24 81 ldd r18, Z+4 ; 0x04
1bc: 2d bf out 0x3d, r18 ; 61
1be: 25 81 ldd r18, Z+5 ; 0x05
1c0: 2e bf out 0x3e, r18 ; 62
1c2: ca 2f mov r28, r26
1c4: db 2f mov r29, r27
000001c6 <AlreadyInKernel>:
1c6: 11 24 eor r1, r1
1c8: e3 2f mov r30, r19
1ca: f4 2f mov r31, r20
1cc: 09 94 ijmp
000001ce <Epilog>:
1ce: ef 91 pop r30
1d0: ef 91 pop r30
000001d2 <_Epilog>:
1d2: e0 ed ldi r30, 0xD0 ; 208
1d4: f0 e0 ldi r31, 0x00 ; 0
1d6: f8 94 cli
1d8: 06 81 ldd r16, Z+6 ; 0x06
1da: 0a 95 dec r16
1dc: 06 83 std Z+6, r16 ; 0x06
1de: 54 f4 brge .+20 ; 0x1f4 <SkipTaskSwap>
1e0: d1 81 ldd r29, Z+1 ; 0x01
1e2: c0 81 ld r28, Z
1e4: d3 83 std Z+3, r29 ; 0x03
1e6: c2 83 std Z+2, r28 ; 0x02
1e8: 20 96 adiw r28, 0x00 ; 0
1ea: 39 f1 breq .+78 ; 0x23a <_IdleTask>
1ec: bd 81 ldd r27, Y+5 ; 0x05
1ee: ac 81 ldd r26, Y+4 ; 0x04
1f0: ad bf out 0x3d, r26 ; 61
1f2: be bf out 0x3e, r27 ; 62
000001f4 <SkipTaskSwap>:
1f4: 0f 90 pop r0
1f6: 0f be out 0x3f, r0 ; 63
1f8: 0f 90 pop r0
1fa: 1f 90 pop r1
1fc: 2f 90 pop r2
1fe: 3f 90 pop r3
200: 4f 90 pop r4
202: 5f 90 pop r5
204: 6f 90 pop r6
206: 7f 90 pop r7
208: 8f 90 pop r8
20a: 9f 90 pop r9
20c: af 90 pop r10
20e: bf 90 pop r11
210: cf 90 pop r12
212: df 90 pop r13
214: ef 90 pop r14
216: ff 90 pop r15
218: 0f 91 pop r16
21a: 1f 91 pop r17
21c: 2f 91 pop r18
21e: 3f 91 pop r19
220: 4f 91 pop r20
222: 5f 91 pop r21
224: 6f 91 pop r22
226: 7f 91 pop r23
228: 8f 91 pop r24
22a: 9f 91 pop r25
22c: af 91 pop r26
22e: bf 91 pop r27
230: cf 91 pop r28
232: df 91 pop r29
234: ef 91 pop r30
236: ff 91 pop r31
238: 18 95 reti
0000023a <_IdleTask>:
23a: 78 94 sei
23c: 88 95 sleep
0000023e <snooze>:
23e: fd cf rjmp .-6 ; 0x23a <_IdleTask>
00000240 <AvrXSetKernelStack>:
240: ff 91 pop r31
242: ef 91 pop r30
244: 80 50 subi r24, 0x00 ; 0
246: 90 40 sbci r25, 0x00 ; 0
248: 11 f4 brne .+4 ; 0x24e <sks1>
24a: 8d b7 in r24, 0x3d ; 61
24c: 9e b7 in r25, 0x3e ; 62
0000024e <sks1>:
24e: 80 93 d4 00 sts 0x00D4, r24
252: 90 93 d5 00 sts 0x00D5, r25
256: 09 94 ijmp
00000258 <AvrXRunTask>:
258: 01 d0 rcall .+2 ; 0x25c <AvrXInitTask>
25a: 23 c0 rjmp .+70 ; 0x2a2 <AvrXResume>
0000025c <AvrXInitTask>:
25c: e8 2f mov r30, r24
25e: f9 2f mov r31, r25
260: 1d d0 rcall .+58 ; 0x29c <lpm_inc>
262: a0 2d mov r26, r0
264: 1b d0 rcall .+54 ; 0x29c <lpm_inc>
266: b0 2d mov r27, r0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -