📄 ucos.lst
字号:
0483 910F POP R16
0484 BF0F OUT 0x3F,R16
0485 9109 LD R16,Y+
(0058)
(0059) // the function address has an extra level of indirection. Fetch the
(0060) // actual address.
(0061) //
(0062) tmp = *(INT16U const *)task;
0486 9508 RET
_OSTaskStkInit:
stks --> R14
tmp --> R12
stk --> R10
opt --> Y+8
ptos --> Y+6
pdata --> R18
task --> R16
0487 940E0853 CALL push_gset5x
(0063)
(0064) // 36 Bytes
(0065) *stks-- = (INT8U)tmp; //Put task start address on top of hardware stack
0489 80AE LDD R10,Y+6
048A 80BF LDD R11,Y+7
048B 01C5 MOVW R24,R10
048C 5484 SUBI R24,0x44
(0066) *stks-- = (INT8U)(tmp >> 8);
048D 4090 SBCI R25,0
048E 01F8 MOVW R30,R16
048F 90C5 LPM R12,Z+
0490 90D4 LPM R13,0(Z)
0491 011C MOVW R2,R24
0492 9701 SBIW R24,1
0493 01F1 MOVW R30,R2
0494 82C0 STD Z+0,R12
(0067)
(0068) *stk-- = (INT8U)0x00; // R0 = 0x00
0495 011C MOVW R2,R24
0496 9701 SBIW R24,1
0497 017C MOVW R14,R24
0498 0126 MOVW R4,R12
0499 2C45 MOV R4,R5
049A 2455 CLR R5
(0069) *stk-- = (INT8U)0x01;
049B 01F1 MOVW R30,R2
049C 8240 STD Z+0,R4
049D 0115 MOVW R2,R10
049E 01C1 MOVW R24,R2
049F 9701 SBIW R24,1
04A0 2444 CLR R4
(0070) *stk-- = (INT8U)0x02;
04A1 01F1 MOVW R30,R2
04A2 8240 STD Z+0,R4
04A3 011C MOVW R2,R24
04A4 9701 SBIW R24,1
04A5 015C MOVW R10,R24
04A6 E081 LDI R24,1
04A7 01F1 MOVW R30,R2
(0071) *stk-- = (INT8U)0x03;
04A8 8380 STD Z+0,R24
04A9 0115 MOVW R2,R10
04AA 01C1 MOVW R24,R2
04AB 9701 SBIW R24,1
04AC 015C MOVW R10,R24
04AD E082 LDI R24,2
04AE 01F1 MOVW R30,R2
(0072) *stk-- = (INT8U)0x04;
04AF 8380 STD Z+0,R24
04B0 0115 MOVW R2,R10
04B1 01C1 MOVW R24,R2
04B2 9701 SBIW R24,1
04B3 015C MOVW R10,R24
04B4 E083 LDI R24,3
04B5 01F1 MOVW R30,R2
(0073) *stk-- = (INT8U)0x05;
04B6 8380 STD Z+0,R24
04B7 0115 MOVW R2,R10
04B8 01C1 MOVW R24,R2
04B9 9701 SBIW R24,1
04BA 015C MOVW R10,R24
04BB E084 LDI R24,4
04BC 01F1 MOVW R30,R2
(0074) *stk-- = (INT8U)0x06;
04BD 8380 STD Z+0,R24
04BE 0115 MOVW R2,R10
04BF 01C1 MOVW R24,R2
04C0 9701 SBIW R24,1
04C1 015C MOVW R10,R24
04C2 E085 LDI R24,5
04C3 01F1 MOVW R30,R2
(0075) *stk-- = (INT8U)0x07;
04C4 8380 STD Z+0,R24
04C5 0115 MOVW R2,R10
04C6 01C1 MOVW R24,R2
04C7 9701 SBIW R24,1
04C8 015C MOVW R10,R24
04C9 E086 LDI R24,6
04CA 01F1 MOVW R30,R2
(0076) *stk-- = (INT8U)0x08;
04CB 8380 STD Z+0,R24
04CC 0115 MOVW R2,R10
04CD 01C1 MOVW R24,R2
04CE 9701 SBIW R24,1
04CF 015C MOVW R10,R24
04D0 E087 LDI R24,7
04D1 01F1 MOVW R30,R2
(0077) *stk-- = (INT8U)0x09;
04D2 8380 STD Z+0,R24
04D3 0115 MOVW R2,R10
04D4 01C1 MOVW R24,R2
04D5 9701 SBIW R24,1
04D6 015C MOVW R10,R24
04D7 E088 LDI R24,0x8
04D8 01F1 MOVW R30,R2
(0078) *stk-- = (INT8U)0x10;
04D9 8380 STD Z+0,R24
04DA 0115 MOVW R2,R10
04DB 01C1 MOVW R24,R2
04DC 9701 SBIW R24,1
04DD 015C MOVW R10,R24
04DE E089 LDI R24,0x9
04DF 01F1 MOVW R30,R2
(0079) *stk-- = (INT8U)0x11;
04E0 8380 STD Z+0,R24
04E1 0115 MOVW R2,R10
04E2 01C1 MOVW R24,R2
04E3 9701 SBIW R24,1
04E4 015C MOVW R10,R24
04E5 E180 LDI R24,0x10
04E6 01F1 MOVW R30,R2
(0080) *stk-- = (INT8U)0x12;
04E7 8380 STD Z+0,R24
04E8 0115 MOVW R2,R10
04E9 01C1 MOVW R24,R2
04EA 9701 SBIW R24,1
04EB 015C MOVW R10,R24
04EC E181 LDI R24,0x11
04ED 01F1 MOVW R30,R2
(0081) *stk-- = (INT8U)0x13;
04EE 8380 STD Z+0,R24
04EF 0115 MOVW R2,R10
04F0 01C1 MOVW R24,R2
04F1 9701 SBIW R24,1
04F2 015C MOVW R10,R24
04F3 E182 LDI R24,0x12
04F4 01F1 MOVW R30,R2
(0082) *stk-- = (INT8U)0x14;
04F5 8380 STD Z+0,R24
04F6 0115 MOVW R2,R10
04F7 01C1 MOVW R24,R2
04F8 9701 SBIW R24,1
04F9 015C MOVW R10,R24
04FA E183 LDI R24,0x13
04FB 01F1 MOVW R30,R2
(0083) *stk-- = (INT8U)0x15;
04FC 8380 STD Z+0,R24
04FD 0115 MOVW R2,R10
04FE 01C1 MOVW R24,R2
04FF 9701 SBIW R24,1
0500 015C MOVW R10,R24
0501 E184 LDI R24,0x14
0502 01F1 MOVW R30,R2
(0084) tmp = (INT16U)pdata;
0503 8380 STD Z+0,R24
(0085) *stk-- = (INT8U)tmp; //Simulate call to function with argument
0504 0115 MOVW R2,R10
0505 01C1 MOVW R24,R2
0506 9701 SBIW R24,1
0507 015C MOVW R10,R24
0508 E185 LDI R24,0x15
(0086) *stk-- = (INT8U)(tmp >> 8);
0509 01F1 MOVW R30,R2
050A 8380 STD Z+0,R24
050B 0169 MOVW R12,R18
050C 0115 MOVW R2,R10
050D 01C1 MOVW R24,R2
050E 9701 SBIW R24,1
050F 01F1 MOVW R30,R2
(0087) *stk-- = (INT8U)0x18;
0510 82C0 STD Z+0,R12
0511 011C MOVW R2,R24
0512 9701 SBIW R24,1
0513 0126 MOVW R4,R12
0514 2C45 MOV R4,R5
0515 2455 CLR R5
(0088) *stk-- = (INT8U)0x19;
0516 01F1 MOVW R30,R2
0517 8240 STD Z+0,R4
0518 011C MOVW R2,R24
0519 9701 SBIW R24,1
051A 015C MOVW R10,R24
051B E188 LDI R24,0x18
051C 01F1 MOVW R30,R2
(0089) *stk-- = (INT8U)0x20;
051D 8380 STD Z+0,R24
051E 0115 MOVW R2,R10
051F 01C1 MOVW R24,R2
0520 9701 SBIW R24,1
0521 015C MOVW R10,R24
0522 E189 LDI R24,0x19
0523 01F1 MOVW R30,R2
(0090) *stk-- = (INT8U)0x21;
0524 8380 STD Z+0,R24
0525 0115 MOVW R2,R10
0526 01C1 MOVW R24,R2
0527 9701 SBIW R24,1
0528 015C MOVW R10,R24
0529 E280 LDI R24,0x20
052A 01F1 MOVW R30,R2
(0091) *stk-- = (INT8U)0x22;
052B 8380 STD Z+0,R24
052C 0115 MOVW R2,R10
052D 01C1 MOVW R24,R2
052E 9701 SBIW R24,1
052F 015C MOVW R10,R24
0530 E281 LDI R24,0x21
0531 01F1 MOVW R30,R2
(0092) *stk-- = (INT8U)0x23;
0532 8380 STD Z+0,R24
0533 0115 MOVW R2,R10
0534 01C1 MOVW R24,R2
0535 9701 SBIW R24,1
0536 015C MOVW R10,R24
0537 E282 LDI R24,0x22
0538 01F1 MOVW R30,R2
(0093) *stk-- = (INT8U)0x24;
0539 8380 STD Z+0,R24
053A 0115 MOVW R2,R10
053B 01C1 MOVW R24,R2
053C 9701 SBIW R24,1
053D 015C MOVW R10,R24
053E E283 LDI R24,0x23
053F 01F1 MOVW R30,R2
(0094) *stk-- = (INT8U)0x25;
0540 8380 STD Z+0,R24
0541 0115 MOVW R2,R10
0542 01C1 MOVW R24,R2
0543 9701 SBIW R24,1
0544 015C MOVW R10,R24
0545 E284 LDI R24,0x24
0546 01F1 MOVW R30,R2
(0095) *stk-- = (INT8U)0x26;
0547 8380 STD Z+0,R24
0548 0115 MOVW R2,R10
0549 01C1 MOVW R24,R2
054A 9701 SBIW R24,1
054B 015C MOVW R10,R24
054C E285 LDI R24,0x25
054D 01F1 MOVW R30,R2
(0096) *stk-- = (INT8U)0x27;
054E 8380 STD Z+0,R24
054F 0115 MOVW R2,R10
0550 01C1 MOVW R24,R2
0551 9701 SBIW R24,1
0552 015C MOVW R10,R24
0553 E286 LDI R24,0x26
0554 01F1 MOVW R30,R2
(0097) // the heap pointer Y=R29:R28 will not be stored
(0098) *stk-- = (INT8U)0x30;
0555 8380 STD Z+0,R24
0556 0115 MOVW R2,R10
0557 01C1 MOVW R24,R2
0558 9701 SBIW R24,1
0559 015C MOVW R10,R24
055A E287 LDI R24,0x27
055B 01F1 MOVW R30,R2
(0099) *stk-- = (INT8U)0x31;
055C 8380 STD Z+0,R24
055D 0115 MOVW R2,R10
055E 01C1 MOVW R24,R2
055F 9701 SBIW R24,1
0560 015C MOVW R10,R24
0561 E380 LDI R24,0x30
0562 01F1 MOVW R30,R2
(0100) // *stk-- = (INT8U)0x3B;
(0101) *stk-- = (INT8U)0x80; //SREG = Interrupts enabled
0563 8380 STD Z+0,R24
0564 0115 MOVW R2,R10
0565 01C1 MOVW R24,R2
0566 9701 SBIW R24,1
0567 015C MOVW R10,R24
0568 E381 LDI R24,0x31
0569 01F1 MOVW R30,R2
(0102)
(0103) tmp = (INT16U)(stks);
056A 8380 STD Z+0,R24
(0104) *stk-- = (INT8U)(tmp >> 8);
056B 0115 MOVW R2,R10
056C 01C1 MOVW R24,R2
056D 9701 SBIW R24,1
056E 015C MOVW R10,R24
056F E880 LDI R24,0x80
0570 01F1 MOVW R30,R2
0571 8380 STD Z+0,R24
0572 0167 MOVW R12,R14
0573 0115 MOVW R2,R10
(0105) *stk = (INT8U)(tmp);
0574 01C1 MOVW R24,R2
0575 9701 SBIW R24,1
(0106) return ((void *)stk);
0576 015C MOVW R10,R24
0577 0126 MOVW R4,R12
0578 2C45 MOV R4,R5
0579 2455 CLR R5
057A 01F1 MOVW R30,R2
057B 8240 STD Z+0,R4
057C 01FC MOVW R30,R24
057D 82C0 STD Z+0,R12
057E 018C MOVW R16,R24
057F 940E0849 CALL pop_gset5x
(0107) }
(0108)
(0109) INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
(0110) {
(0111) void *psp;
(0112) INT8U err;
(0113)
(0114)
(0115) if (prio > OS_LOWEST_PRIO) { /* Make sure priority is within allowable range */
0581 9508 RET
_OSTaskCreate:
psp --> R10
err --> R10
prio --> R12
ptos --> Y+16
pdata --> R14
task --> R10
0582 940E0853 CALL push_gset5x
(0116) return (OS_PRIO_INVALID);
0584 0179 MOVW R14,R18
(0117) }
(0118) OS_ENTER_CRITICAL();
0585 0158 MOVW R10,R16
0586 972A SBIW R28,0xA
0587 88CA LDD R12,Y+18
0588 E08F LDI R24,0xF
0589 158C CP R24,R12
(0119) if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */
058A F410 BCC 0x058D
058B E20A LDI R16,0x2A
058C C070 RJMP 0x05FD
058D 930A ST R16,-Y
058E B70F IN R16,0x3F
058F 94F8 BCLR 7
0590 930F PUSH R16
0591 9109 LD R16,Y+
0592 E082 LDI R24,2
0593 9D8C MUL R24,R12
0594 01F0 MOVW R30,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -