?? main.lss
字號:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000388 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 00000388 0000041c 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 0000011d 00800060 00800060 0000041c 2**0
ALLOC
3 .noinit 00000000 0080017d 0080017d 0000041c 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 0000041c 2**0
CONTENTS
5 .stab 00000d14 00000000 00000000 0000041c 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 000008da 00000000 00000000 00001130 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c c0 rjmp .+24 ; 0x1a
2: 26 c0 rjmp .+76 ; 0x50
4: 25 c0 rjmp .+74 ; 0x50
6: 24 c0 rjmp .+72 ; 0x50
8: 23 c0 rjmp .+70 ; 0x50
a: 22 c0 rjmp .+68 ; 0x50
c: 21 c0 rjmp .+66 ; 0x50
e: 96 c1 rjmp .+812 ; 0x33c
10: 1f c0 rjmp .+62 ; 0x50
12: 1e c0 rjmp .+60 ; 0x50
14: 1d c0 rjmp .+58 ; 0x50
16: 1c c0 rjmp .+56 ; 0x50
18: 1b c0 rjmp .+54 ; 0x50
0000001a <__ctors_end>:
1a: 11 24 eor r1, r1
1c: 1f be out 0x3f, r1 ; 63
1e: cf e5 ldi r28, 0x5F ; 95
20: d2 e0 ldi r29, 0x02 ; 2
22: de bf out 0x3e, r29 ; 62
24: cd bf out 0x3d, r28 ; 61
00000026 <__do_copy_data>:
26: 10 e0 ldi r17, 0x00 ; 0
28: a0 e6 ldi r26, 0x60 ; 96
2a: b0 e0 ldi r27, 0x00 ; 0
2c: e8 e8 ldi r30, 0x88 ; 136
2e: f3 e0 ldi r31, 0x03 ; 3
30: 03 c0 rjmp .+6 ; 0x38
00000032 <.do_copy_data_loop>:
32: c8 95 lpm
34: 31 96 adiw r30, 0x01 ; 1
36: 0d 92 st X+, r0
00000038 <.do_copy_data_start>:
38: a0 36 cpi r26, 0x60 ; 96
3a: b1 07 cpc r27, r17
3c: d1 f7 brne .-12 ; 0x32
0000003e <__do_clear_bss>:
3e: 11 e0 ldi r17, 0x01 ; 1
40: a0 e6 ldi r26, 0x60 ; 96
42: b0 e0 ldi r27, 0x00 ; 0
44: 01 c0 rjmp .+2 ; 0x48
00000046 <.do_clear_bss_loop>:
46: 1d 92 st X+, r1
00000048 <.do_clear_bss_start>:
48: ad 37 cpi r26, 0x7D ; 125
4a: b1 07 cpc r27, r17
4c: e1 f7 brne .-8 ; 0x46
4e: 01 c0 rjmp .+2 ; 0x52
00000050 <__bad_interrupt>:
50: d7 cf rjmp .-82 ; 0x0
00000052 <main>:
#define TaskCPrio 3 //聲明任務TaskC(void)的優先級。
OS_STK TaskCStk[MAX_STK_SIZE]; //聲明任務TaskC(void)的堆棧空間。
int main(void)
{
52: cf e5 ldi r28, 0x5F ; 95
54: d2 e0 ldi r29, 0x02 ; 2
56: de bf out 0x3e, r29 ; 62
58: cd bf out 0x3d, r28 ; 61
wdt_disable();
5a: 88 e1 ldi r24, 0x18 ; 24
5c: 90 e0 ldi r25, 0x00 ; 0
5e: 20 e0 ldi r18, 0x00 ; 0
60: 0f b6 in r0, 0x3f ; 63
62: f8 94 cli
64: a8 95 wdr
66: 81 bd out 0x21, r24 ; 33
68: 0f be out 0x3f, r0 ; 63
6a: 21 bd out 0x21, r18 ; 33
OSInit(); //初始化OS任務控制塊(initialization OSTCB)。
6c: 3e d0 rcall .+124 ; 0xea
OSTaskCreate(TaskA,&TaskAStk[MAX_STK_SIZE-1],TaskAPrio); //建立任務TaskA(void)。
6e: 41 e0 ldi r20, 0x01 ; 1
70: 61 e2 ldi r22, 0x21 ; 33
72: 71 e0 ldi r23, 0x01 ; 1
74: 88 e5 ldi r24, 0x58 ; 88
76: 90 e0 ldi r25, 0x00 ; 0
78: ee d0 rcall .+476 ; 0x256
OSTaskCreate(TaskB,&TaskBStk[MAX_STK_SIZE-1],TaskBPrio); //建立任務TaskB(void)。
7a: 42 e0 ldi r20, 0x02 ; 2
7c: 61 ea ldi r22, 0xA1 ; 161
7e: 70 e0 ldi r23, 0x00 ; 0
80: 83 e6 ldi r24, 0x63 ; 99
82: 90 e0 ldi r25, 0x00 ; 0
84: e8 d0 rcall .+464 ; 0x256
OSTaskCreate(TaskC,&TaskCStk[MAX_STK_SIZE-1],TaskCPrio); //建立任務TaskC(void)。
86: 43 e0 ldi r20, 0x03 ; 3
88: 61 ee ldi r22, 0xE1 ; 225
8a: 70 e0 ldi r23, 0x00 ; 0
8c: 8c e6 ldi r24, 0x6C ; 108
8e: 90 e0 ldi r25, 0x00 ; 0
90: e2 d0 rcall .+452 ; 0x256
INIT_LED_Drv();
92: 87 b3 in r24, 0x17 ; 23
94: 80 6f ori r24, 0xF0 ; 240
96: 87 bb out 0x17, r24 ; 23
OSStart(); //起動OS。
98: 36 d0 rcall .+108 ; 0x106
while (1)
{
LED1_ON();
9a: c4 9a sbi 0x18, 4 ; 24
OSTaskResume(TaskAPrio);
9c: 81 e0 ldi r24, 0x01 ; 1
9e: c2 d0 rcall .+388 ; 0x224
// OSTaskSuspend(OS_TASK_Me);
OSTimeDly(1);
a0: 81 e0 ldi r24, 0x01 ; 1
a2: 90 e0 ldi r25, 0x00 ; 0
a4: 89 d0 rcall .+274 ; 0x1b8
LED1_OFF();
a6: c4 98 cbi 0x18, 4 ; 24
OSTimeDly(1);
a8: 81 e0 ldi r24, 0x01 ; 1
aa: 90 e0 ldi r25, 0x00 ; 0
ac: 85 d0 rcall .+266 ; 0x1b8
ae: f5 cf rjmp .-22 ; 0x9a
000000b0 <TaskA>:
}
}
void TaskA(void)
{
while (1)
{
OSTaskResume(Task_main_Prio);
b0: 80 e0 ldi r24, 0x00 ; 0
b2: b8 d0 rcall .+368 ; 0x224
LED2_ON();
b4: c5 9a sbi 0x18, 5 ; 24
OSTimeDly(2);
b6: 82 e0 ldi r24, 0x02 ; 2
b8: 90 e0 ldi r25, 0x00 ; 0
ba: 7e d0 rcall .+252 ; 0x1b8
LED2_OFF();
bc: c5 98 cbi 0x18, 5 ; 24
OSTimeDly(2);
be: 82 e0 ldi r24, 0x02 ; 2
c0: 90 e0 ldi r25, 0x00 ; 0
c2: 7a d0 rcall .+244 ; 0x1b8
c4: f5 cf rjmp .-22 ; 0xb0
000000c6 <TaskB>:
}
}
void TaskB(void)
{
while (1)
{
LED3_ON();
c6: c6 9a sbi 0x18, 6 ; 24
OSTimeDly(3);
c8: 83 e0 ldi r24, 0x03 ; 3
ca: 90 e0 ldi r25, 0x00 ; 0
cc: 75 d0 rcall .+234 ; 0x1b8
LED3_OFF();
ce: c6 98 cbi 0x18, 6 ; 24
OSTimeDly(3);
d0: 83 e0 ldi r24, 0x03 ; 3
d2: 90 e0 ldi r25, 0x00 ; 0
d4: 71 d0 rcall .+226 ; 0x1b8
d6: f7 cf rjmp .-18 ; 0xc6
000000d8 <TaskC>:
}
}
void TaskC(void)
{
while (1)
{
LED4_ON();
d8: c7 9a sbi 0x18, 7 ; 24
OSTimeDly(5);
da: 85 e0 ldi r24, 0x05 ; 5
dc: 90 e0 ldi r25, 0x00 ; 0
de: 6c d0 rcall .+216 ; 0x1b8
LED4_OFF();
e0: c7 98 cbi 0x18, 7 ; 24
OSTimeDly(5);
e2: 85 e0 ldi r24, 0x05 ; 5
e4: 90 e0 ldi r25, 0x00 ; 0
e6: 68 d0 rcall .+208 ; 0x1b8
e8: f7 cf rjmp .-18 ; 0xd8
000000ea <OSInit>:
// initialization OSTCB --- 初始化任務控制塊.
void OSInit(void)
{ INT8U i;
OS_TCB *pOS_TCB;
pOS_TCB=OSTCB;
ea: e3 e6 ldi r30, 0x63 ; 99
ec: f1 e0 ldi r31, 0x01 ; 1
ee: 9f ef ldi r25, 0xFF ; 255
f0: 84 e0 ldi r24, 0x04 ; 4
for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++)
{
pOS_TCB->OSStkTop=(INT16U)NULL;
f2: 10 82 st Z, r1
f4: 11 82 std Z+1, r1 ; 0x01
pOS_TCB->OSTaskStatus=no_TASK_Rdy;
f6: 92 83 std Z+2, r25 ; 0x02
pOS_TCB->OSTimeDly=0;
f8: 13 82 std Z+3, r1 ; 0x03
fa: 14 82 std Z+4, r1 ; 0x04
fc: 81 50 subi r24, 0x01 ; 1
fe: 35 96 adiw r30, 0x05 ; 5
100: 87 ff sbrs r24, 7
102: f7 cf rjmp .-18 ; 0xf2
104: 08 95 ret
00000106 <OSStart>:
}
}
//Start OS --- 啟動OS
void OSStart(void)
{
Init_OS_Timer();
106: 9c d0 rcall .+312 ; 0x240
OS_TASK_CrtPrio=Task_main_Prio;
108: 10 92 62 01 sts 0x0162, r1
OS_TASK_HighPri=OS_TASK_CrtPrio;
10c: 10 92 7c 01 sts 0x017C, r1
OSTCB[OS_TASK_HighPri].OSTaskStatus=OS_TASK_Run;
110: 8b ef ldi r24, 0xFB ; 251
112: 80 93 65 01 sts 0x0165, r24
OS_INT_ENABLE();
OS_TASK_INT();
116: c1 d0 rcall .+386 ; 0x29a
118: 08 95 ret
0000011a <OSPrioHighRdy>:
}
//返回優先級最高的處于就緒態任務的優先級,否則返回no_TASK_Rdy。
static INT8U OSPrioHighRdy(void)
{ INT8U i;
OS_TCB *pOS_TCB;
pOS_TCB=OSTCB;
11a: e3 e6 ldi r30, 0x63 ; 99
11c: f1 e0 ldi r31, 0x01 ; 1
for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++)
11e: a0 e0 ldi r26, 0x00 ; 0
120: 60 e0 ldi r22, 0x00 ; 0
122: 70 e0 ldi r23, 0x00 ; 0
{
if ((pOS_TCB->OSStkTop!=(INT8U)NULL) & (pOS_TCB->OSTaskStatus==OS_TASK_Rdy)) {return i;}
124: 20 e0 ldi r18, 0x00 ; 0
126: 30 e0 ldi r19, 0x00 ; 0
128: 80 81 ld r24, Z
12a: 91 81 ldd r25, Z+1 ; 0x01
12c: 89 2b or r24, r25
12e: 11 f0 breq .+4 ; 0x134
130: 21 e0 ldi r18, 0x01 ; 1
132: 30 e0 ldi r19, 0x00 ; 0
134: 40 e0 ldi r20, 0x00 ; 0
136: 50 e0 ldi r21, 0x00 ; 0
138: 82 81 ldd r24, Z+2 ; 0x02
13a: 8c 3f cpi r24, 0xFC ; 252
13c: 11 f4 brne .+4 ; 0x142
13e: 41 e0 ldi r20, 0x01 ; 1
140: 50 e0 ldi r21, 0x00 ; 0
142: 24 23 and r18, r20
144: 35 23 and r19, r21
146: 23 2b or r18, r19
148: 19 f0 breq .+6 ; 0x150
14a: 97 2f mov r25, r23
14c: 86 2f mov r24, r22
14e: 08 95 ret
150: af 5f subi r26, 0xFF ; 255
152: 6f 5f subi r22, 0xFF ; 255
154: 7f 4f sbci r23, 0xFF ; 255
156: 35 96 adiw r30, 0x05 ; 5
158: a5 30 cpi r26, 0x05 ; 5
15a: 20 f3 brcs .-56 ; 0x124
}
return no_TASK_Rdy;
15c: 8f ef ldi r24, 0xFF ; 255
15e: 90 e0 ldi r25, 0x00 ; 0
}
160: 08 95 ret
162: 08 95 ret
00000164 <OSTimeTick>:
//Task OSTimeDly Decrease 1 per Time Tick --- 每個時鐘節拍,任務等待延時的時間OSTimeDly減1.
//如果任務的OSTimeDly減到0,把任務設置為準備就緒OS_TASK_Rdy。
void OSTimeTick(void)
{ INT8U i;
OS_TCB *pOS_TCB;
pOS_TCB=OSTCB;
164: e3 e6 ldi r30, 0x63 ; 99
166: f1 e0 ldi r31, 0x01 ; 1
168: 3c ef ldi r19, 0xFC ; 252
16a: 24 e0 ldi r18, 0x04 ; 4
for (i=0;i<OS_MAX_TASKS;i++,pOS_TCB++)
{
if (pOS_TCB->OSTimeDly>OS_TASK_TimeOut)
16c: 83 81 ldd r24, Z+3 ; 0x03
16e: 94 81 ldd r25, Z+4 ; 0x04
170: 00 97 sbiw r24, 0x00 ; 0
172: 31 f0 breq .+12 ; 0x180
{
if (--pOS_TCB->OSTimeDly==0) {pOS_TCB->OSTaskStatus=OS_TASK_Rdy;}
174: 01 97 sbiw r24, 0x01 ; 1
176: 83 83 std Z+3, r24 ; 0x03
178: 94 83 std Z+4, r25 ; 0x04
17a: 89 2b or r24, r25
17c: 09 f4 brne .+2 ; 0x180
17e: 32 83 std Z+2, r19 ; 0x02
180: 21 50 subi r18, 0x01 ; 1
182: 35 96 adiw r30, 0x05 ; 5
184: 27 ff sbrs r18, 7
186: f2 cf rjmp .-28 ; 0x16c
}
}
OS_TASK_HighPri=OSPrioHighRdy();
188: c8 df rcall .-112 ; 0x11a
18a: 80 93 7c 01 sts 0x017C, r24
18e: 08 95 ret
00000190 <OSSched>:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -