?? main.lss
字號:
}
#if OS_TIME_DLY_EN
//OS Time Delay --- 使任務延時Tdly個時間節拍
void OSTimeDly(INT16U Tdly) /* Delay Tdly clock tick */
{
OSTCB[OS_TASK_CrtPrio].OSTimeDly=Tdly+OS_TASK_TimeOut;
OSTCB[OS_TASK_CrtPrio].OSTaskStatus=OS_TASK_WaitTicks;
OSSched();
}
#endif
#if OS_TASK_SUSPEND_EN>0
//把正在運行的任務掛起(Suspend a task)。
void OSTaskSuspend(INT8U TaskPrio)
{
OSTCB[OS_TASK_CrtPrio].OSTaskStatus=OS_TASK_Rdy;
OSTCB[TaskPrio].OSTaskStatus=OS_TASK_Suspend;
OSTCB[TaskPrio].OSTimeDly=OS_TASK_TimeOut;
OSSched();
}
#endif
#if OS_TASK_Resume_EN>0
// 恢復被掛起的任務(resume a task)。
void OSTaskResume(INT8U TaskPrio)
{
OSTCB[TaskPrio].OSTaskStatus=OS_TASK_Rdy;
}
#endif
//任務調度,把CPU控制權轉到優先級最高的處于就緒態的任務。如果沒有處于就緒態的任務,就地等待,
void OSSched(void)
{
do
{
OS_TASK_HighPri=OSPrioHighRdy();
190: c4 df rcall .-120 ; 0x11a
192: 80 93 7c 01 sts 0x017C, r24
} while (OS_TASK_HighPri==no_TASK_Rdy);
196: 8f 3f cpi r24, 0xFF ; 255
198: d9 f3 breq .-10 ; 0x190
OSTCB[OS_TASK_HighPri].OSTaskStatus=OS_TASK_Run;
19a: 99 27 eor r25, r25
19c: f9 2f mov r31, r25
19e: e8 2f mov r30, r24
1a0: ee 0f add r30, r30
1a2: ff 1f adc r31, r31
1a4: ee 0f add r30, r30
1a6: ff 1f adc r31, r31
1a8: e8 0f add r30, r24
1aa: f9 1f adc r31, r25
1ac: ed 59 subi r30, 0x9D ; 157
1ae: fe 4f sbci r31, 0xFE ; 254
1b0: 8b ef ldi r24, 0xFB ; 251
1b2: 82 83 std Z+2, r24 ; 0x02
OS_TASK_INT();
1b4: 72 d0 rcall .+228 ; 0x29a
1b6: 08 95 ret
000001b8 <OSTimeDly>:
1b8: 20 91 62 01 lds r18, 0x0162
1bc: 33 27 eor r19, r19
1be: f3 2f mov r31, r19
1c0: e2 2f mov r30, r18
1c2: ee 0f add r30, r30
1c4: ff 1f adc r31, r31
1c6: ee 0f add r30, r30
1c8: ff 1f adc r31, r31
1ca: e2 0f add r30, r18
1cc: f3 1f adc r31, r19
1ce: ed 59 subi r30, 0x9D ; 157
1d0: fe 4f sbci r31, 0xFE ; 254
1d2: 83 83 std Z+3, r24 ; 0x03
1d4: 94 83 std Z+4, r25 ; 0x04
1d6: 8a ef ldi r24, 0xFA ; 250
1d8: 82 83 std Z+2, r24 ; 0x02
1da: da df rcall .-76 ; 0x190
1dc: 08 95 ret
000001de <OSTaskSuspend>:
1de: 90 91 62 01 lds r25, 0x0162
1e2: 29 2f mov r18, r25
1e4: 33 27 eor r19, r19
1e6: 43 e6 ldi r20, 0x63 ; 99
1e8: 51 e0 ldi r21, 0x01 ; 1
1ea: f3 2f mov r31, r19
1ec: e2 2f mov r30, r18
1ee: ee 0f add r30, r30
1f0: ff 1f adc r31, r31
1f2: ee 0f add r30, r30
1f4: ff 1f adc r31, r31
1f6: e2 0f add r30, r18
1f8: f3 1f adc r31, r19
1fa: e4 0f add r30, r20
1fc: f5 1f adc r31, r21
1fe: 9c ef ldi r25, 0xFC ; 252
200: 92 83 std Z+2, r25 ; 0x02
202: 99 27 eor r25, r25
204: f9 2f mov r31, r25
206: e8 2f mov r30, r24
208: ee 0f add r30, r30
20a: ff 1f adc r31, r31
20c: ee 0f add r30, r30
20e: ff 1f adc r31, r31
210: e8 0f add r30, r24
212: f9 1f adc r31, r25
214: e4 0f add r30, r20
216: f5 1f adc r31, r21
218: 8d ef ldi r24, 0xFD ; 253
21a: 82 83 std Z+2, r24 ; 0x02
21c: 13 82 std Z+3, r1 ; 0x03
21e: 14 82 std Z+4, r1 ; 0x04
220: b7 df rcall .-146 ; 0x190
222: 08 95 ret
00000224 <OSTaskResume>:
224: 99 27 eor r25, r25
226: f9 2f mov r31, r25
228: e8 2f mov r30, r24
22a: ee 0f add r30, r30
22c: ff 1f adc r31, r31
22e: ee 0f add r30, r30
230: ff 1f adc r31, r31
232: e8 0f add r30, r24
234: f9 1f adc r31, r25
236: ed 59 subi r30, 0x9D ; 157
238: fe 4f sbci r31, 0xFE ; 254
23a: 8c ef ldi r24, 0xFC ; 252
23c: 82 83 std Z+2, r24 ; 0x02
23e: 08 95 ret
00000240 <InitOSTimer>:
#define T0_TCNT0 (256 - (T0_RELOAD & 0xff))
//Initial OS Timer for time ticks --- 初始化時間節拍定時器。
void InitOSTimer(void)
{
TIMSK |= (1<<1); // set T0IE0
240: 89 b7 in r24, 0x39 ; 57
242: 82 60 ori r24, 0x02 ; 2
244: 89 bf out 0x39, r24 ; 57
TCCR0 = 0x05; // CTC0=CK/1024
246: 85 e0 ldi r24, 0x05 ; 5
248: 83 bf out 0x33, r24 ; 51
TCNT0 = T0_TCNT0; // (256 - (T0_RELOAD & 0xff))
24a: 8a e7 ldi r24, 0x7A ; 122
24c: 82 bf out 0x32, r24 ; 50
SREG |= (1<<7); // SEI
24e: 8f b7 in r24, 0x3f ; 63
250: 80 68 ori r24, 0x80 ; 128
252: 8f bf out 0x3f, r24 ; 63
254: 08 95 ret
00000256 <OSTaskCreate>:
}
//建立一個任務(Create a Task)。
//Inport : tFunc --- function address , tStk --- stack bottom , prio --- Priority .
void OSTaskCreate (void (*tFunc)(void) , OS_STK *tStk, INT8U prio)
{
256: cf 93 push r28
258: df 93 push r29
25a: 28 2f mov r18, r24
25c: 39 2f mov r19, r25
25e: f7 2f mov r31, r23
260: e6 2f mov r30, r22
262: 84 2f mov r24, r20
OSTCB[prio].OSTaskStatus = OS_TASK_Rdy;
264: 99 27 eor r25, r25
266: b9 2f mov r27, r25
268: a8 2f mov r26, r24
26a: aa 0f add r26, r26
26c: bb 1f adc r27, r27
26e: aa 0f add r26, r26
270: bb 1f adc r27, r27
272: a8 0f add r26, r24
274: b9 1f adc r27, r25
276: ad 59 subi r26, 0x9D ; 157
278: be 4f sbci r27, 0xFE ; 254
27a: 8c ef ldi r24, 0xFC ; 252
27c: db 2f mov r29, r27
27e: ca 2f mov r28, r26
280: 8a 83 std Y+2, r24 ; 0x02
OSTCB[prio].OSStkTop = (INT16U)tStk-1 /* Initial value when main was called */
282: 3f 97 sbiw r30, 0x0f ; 15
284: ed 93 st X+, r30
286: fc 93 st X, r31
288: 3f 96 adiw r30, 0x0f ; 15
-12 /* reserve for to save R0-R5 , R26-R31 registers */
-sizeof(INT16U) /* The PC value to be loaded */
;
*--tStk = (INT16U const)tFunc & 0xff; /* Save low byte of task function address */
28a: 22 93 st -Z, r18
*--tStk = (INT16U const)tFunc / 0x100; /* Save high byte of task function address */
28c: 31 97 sbiw r30, 0x01 ; 1
28e: 83 2f mov r24, r19
290: 99 27 eor r25, r25
292: 80 83 st Z, r24
294: df 91 pop r29
296: cf 91 pop r28
298: 08 95 ret
0000029a <OSCtxSw>:
}
static unsigned int SaveSP; //用于保存需恢復的SP,在OSTickISR或用戶中斷結束做任務切換時,恢復SP.
//context switch interrupt --- 軟中斷任務切換
void OSCtxSw(void)
{
//asm("in %0, %1" : "=r" (value) : "I" (PORTD) : );
asm("PUSH R31");
29a: ff 93 push r31
asm("PUSH R30");
29c: ef 93 push r30
asm("PUSH R29");
29e: df 93 push r29
asm("PUSH R28");
2a0: cf 93 push r28
asm("PUSH R27");
2a2: bf 93 push r27
asm("PUSH R26");
2a4: af 93 push r26
asm("PUSH R0");
2a6: 0f 92 push r0
asm("PUSH R1");
2a8: 1f 92 push r1
asm("PUSH R2");
2aa: 2f 92 push r2
asm("PUSH R3");
2ac: 3f 92 push r3
asm("PUSH R4");
2ae: 4f 92 push r4
asm("PUSH R5");
2b0: 5f 92 push r5
asm("IN R31,0x3d");
2b2: fd b7 in r31, 0x3d ; 61
asm("STS SaveSP,R31");
2b4: f0 93 60 00 sts 0x0060, r31
asm("IN R31,0x3e");
2b8: fe b7 in r31, 0x3e ; 62
asm("STS SaveSP+1,R31");
2ba: f0 93 61 00 sts 0x0061, r31
OSTCB[OS_TASK_CrtPrio].OSStkTop = SaveSP; //Save the current task top.
2be: 80 91 62 01 lds r24, 0x0162
2c2: 99 27 eor r25, r25
2c4: 23 e6 ldi r18, 0x63 ; 99
2c6: 31 e0 ldi r19, 0x01 ; 1
2c8: f9 2f mov r31, r25
2ca: e8 2f mov r30, r24
2cc: ee 0f add r30, r30
2ce: ff 1f adc r31, r31
2d0: ee 0f add r30, r30
2d2: ff 1f adc r31, r31
2d4: e8 0f add r30, r24
2d6: f9 1f adc r31, r25
2d8: e2 0f add r30, r18
2da: f3 1f adc r31, r19
2dc: 80 91 60 00 lds r24, 0x0060
2e0: 90 91 61 00 lds r25, 0x0061
2e4: 80 83 st Z, r24
2e6: 91 83 std Z+1, r25 ; 0x01
OS_TASK_CrtPrio=OS_TASK_HighPri;
2e8: 80 91 7c 01 lds r24, 0x017C
2ec: 80 93 62 01 sts 0x0162, r24
// Load context from the stack
SaveSP = OSTCB[OS_TASK_CrtPrio].OSStkTop; //load the high priority task task top.
2f0: 99 27 eor r25, r25
2f2: f9 2f mov r31, r25
2f4: e8 2f mov r30, r24
2f6: ee 0f add r30, r30
2f8: ff 1f adc r31, r31
2fa: ee 0f add r30, r30
2fc: ff 1f adc r31, r31
2fe: e8 0f add r30, r24
300: f9 1f adc r31, r25
302: e2 0f add r30, r18
304: f3 1f adc r31, r19
306: 80 81 ld r24, Z
308: 91 81 ldd r25, Z+1 ; 0x01
30a: 90 93 61 00 sts 0x0061, r25
30e: 80 93 60 00 sts 0x0060, r24
asm("CLI");
312: f8 94 cli
asm("LDS R31,SaveSP");
314: f0 91 60 00 lds r31, 0x0060
asm("OUT 0x3d,R31");
318: fd bf out 0x3d, r31 ; 61
asm("LDS R31,SaveSP+1");
31a: f0 91 61 00 lds r31, 0x0061
asm("OUT 0x3e,R31");
31e: fe bf out 0x3e, r31 ; 62
asm("SEI");
320: 78 94 sei
asm("POP R5");
322: 5f 90 pop r5
asm("POP R4");
324: 4f 90 pop r4
asm("POP R3");
326: 3f 90 pop r3
asm("POP R2");
328: 2f 90 pop r2
asm("POP R1");
32a: 1f 90 pop r1
asm("POP R0");
32c: 0f 90 pop r0
asm("POP R26");
32e: af 91 pop r26
asm("POP R27");
330: bf 91 pop r27
asm("POP R28");
332: cf 91 pop r28
asm("POP R29");
334: df 91 pop r29
asm("POP R30");
336: ef 91 pop r30
asm("POP R31");
338: ff 91 pop r31
33a: 08 95 ret
0000033c <__vector_7>:
}
//OS Time Tick Interrupt,OS 時鐘節拍中斷.
INTERRUPT(SIG_OVERFLOW0)
{
33c: 78 94 sei
33e: 1f 92 push r1
340: 0f 92 push r0
342: 0f b6 in r0, 0x3f ; 63
344: 0f 92 push r0
346: 11 24 eor r1, r1
348: 2f 93 push r18
34a: 3f 93 push r19
34c: 4f 93 push r20
34e: 5f 93 push r21
350: 6f 93 push r22
352: 7f 93 push r23
354: 8f 93 push r24
356: 9f 93 push r25
358: af 93 push r26
35a: bf 93 push r27
35c: ef 93 push r30
35e: ff 93 push r31
TCNT0 = T0_TCNT0; // (256 - (T0_RELOAD & 0xff))
360: 8a e7 ldi r24, 0x7A ; 122
362: 82 bf out 0x32, r24 ; 50
#if OS_TICK_HOOK_EN>0
// AppTickHook(); //Hook file for a time tick --- 用戶每個時間節拍的鉤子函數
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -