📄 ucos.lst
字号:
(0031) * location of the stack. If OS_STK_GROWTH is set to 0, 'pstk' will point to the
(0032) * lowest memory location of the stack and the stack will grow with increasing
(0033) * memory locations.
(0034) *
(0035) * prio is the task's priority. A unique priority MUST be assigned to each task and the
(0036) * lower the number, the higher the priority.
(0037) *
(0038) * Returns : OS_NO_ERR if the function was successful.
(0039) * OS_PRIO_EXIT if the task priority already exist
(0040) * (each task MUST have a unique priority).
(0041) * OS_PRIO_INVALID if the priority you specify is higher that the maximum allowed
(0042) * (i.e. >= OS_LOWEST_PRIO)
(0043) *********************************************************************************************************
(0044) */
(0045)
(0046) #if OS_TASK_CREATE_EN
(0047) OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt){
(0048)
(0049) INT8U *stk;
(0050) INT8U *stks; // Temp. variable used for setting up AVR hardware stack
(0051) INT16U tmp;
(0052)
(0053)
(0054) opt = opt; // 'opt' is not used, prevent warning
(0055) stk = (INT8U *)ptos; // Wandlung von ptos in Bytezeiger
049F 80AE LDD R10,Y+6
04A0 80BF LDD R11,Y+7
(0056) // AVR return stack ("hardware stack")
(0057) stks = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);
04A1 01C5 MOVW R24,R10
04A2 5484 SUBI R24,0x44
04A3 4090 SBCI R25,0
(0058)
(0059) // the function address has an extra level of indirection. Fetch the
(0060) // actual address.
(0061) //
(0062) tmp = *(INT16U const *)task;
04A4 01F8 MOVW R30,R16
04A5 90C5 LPM R12,Z+
04A6 90D4 LPM R13,0(Z)
(0063)
(0064) // 36 Bytes
(0065) *stks-- = (INT8U)tmp; //Put task start address on top of hardware stack
04A7 011C MOVW R2,R24
04A8 9701 SBIW R24,1
04A9 01F1 MOVW R30,R2
04AA 82C0 STD Z+0,R12
(0066) *stks-- = (INT8U)(tmp >> 8);
04AB 011C MOVW R2,R24
04AC 9701 SBIW R24,1
04AD 017C MOVW R14,R24
04AE 0126 MOVW R4,R12
04AF 2C45 MOV R4,R5
04B0 2455 CLR R5
04B1 01F1 MOVW R30,R2
04B2 8240 STD Z+0,R4
(0067)
(0068) *stk-- = (INT8U)0x00; // R0 = 0x00
04B3 0115 MOVW R2,R10
04B4 01C1 MOVW R24,R2
04B5 9701 SBIW R24,1
04B6 2444 CLR R4
04B7 01F1 MOVW R30,R2
04B8 8240 STD Z+0,R4
(0069) *stk-- = (INT8U)0x01;
04B9 011C MOVW R2,R24
04BA 9701 SBIW R24,1
04BB 015C MOVW R10,R24
04BC E081 LDI R24,1
04BD 01F1 MOVW R30,R2
04BE 8380 STD Z+0,R24
(0070) *stk-- = (INT8U)0x02;
04BF 0115 MOVW R2,R10
04C0 01C1 MOVW R24,R2
04C1 9701 SBIW R24,1
04C2 015C MOVW R10,R24
04C3 E082 LDI R24,2
04C4 01F1 MOVW R30,R2
04C5 8380 STD Z+0,R24
(0071) *stk-- = (INT8U)0x03;
04C6 0115 MOVW R2,R10
04C7 01C1 MOVW R24,R2
04C8 9701 SBIW R24,1
04C9 015C MOVW R10,R24
04CA E083 LDI R24,3
04CB 01F1 MOVW R30,R2
04CC 8380 STD Z+0,R24
(0072) *stk-- = (INT8U)0x04;
04CD 0115 MOVW R2,R10
04CE 01C1 MOVW R24,R2
04CF 9701 SBIW R24,1
04D0 015C MOVW R10,R24
04D1 E084 LDI R24,4
04D2 01F1 MOVW R30,R2
04D3 8380 STD Z+0,R24
(0073) *stk-- = (INT8U)0x05;
04D4 0115 MOVW R2,R10
04D5 01C1 MOVW R24,R2
04D6 9701 SBIW R24,1
04D7 015C MOVW R10,R24
04D8 E085 LDI R24,5
04D9 01F1 MOVW R30,R2
04DA 8380 STD Z+0,R24
(0074) *stk-- = (INT8U)0x06;
04DB 0115 MOVW R2,R10
04DC 01C1 MOVW R24,R2
04DD 9701 SBIW R24,1
04DE 015C MOVW R10,R24
04DF E086 LDI R24,6
04E0 01F1 MOVW R30,R2
04E1 8380 STD Z+0,R24
(0075) *stk-- = (INT8U)0x07;
04E2 0115 MOVW R2,R10
04E3 01C1 MOVW R24,R2
04E4 9701 SBIW R24,1
04E5 015C MOVW R10,R24
04E6 E087 LDI R24,7
04E7 01F1 MOVW R30,R2
04E8 8380 STD Z+0,R24
(0076) *stk-- = (INT8U)0x08;
04E9 0115 MOVW R2,R10
04EA 01C1 MOVW R24,R2
04EB 9701 SBIW R24,1
04EC 015C MOVW R10,R24
04ED E088 LDI R24,0x8
04EE 01F1 MOVW R30,R2
04EF 8380 STD Z+0,R24
(0077) *stk-- = (INT8U)0x09;
04F0 0115 MOVW R2,R10
04F1 01C1 MOVW R24,R2
04F2 9701 SBIW R24,1
04F3 015C MOVW R10,R24
04F4 E089 LDI R24,0x9
04F5 01F1 MOVW R30,R2
04F6 8380 STD Z+0,R24
(0078) *stk-- = (INT8U)0x10;
04F7 0115 MOVW R2,R10
04F8 01C1 MOVW R24,R2
04F9 9701 SBIW R24,1
04FA 015C MOVW R10,R24
04FB E180 LDI R24,0x10
04FC 01F1 MOVW R30,R2
04FD 8380 STD Z+0,R24
(0079) *stk-- = (INT8U)0x11;
04FE 0115 MOVW R2,R10
04FF 01C1 MOVW R24,R2
0500 9701 SBIW R24,1
0501 015C MOVW R10,R24
0502 E181 LDI R24,0x11
0503 01F1 MOVW R30,R2
0504 8380 STD Z+0,R24
(0080) *stk-- = (INT8U)0x12;
0505 0115 MOVW R2,R10
0506 01C1 MOVW R24,R2
0507 9701 SBIW R24,1
0508 015C MOVW R10,R24
0509 E182 LDI R24,0x12
050A 01F1 MOVW R30,R2
050B 8380 STD Z+0,R24
(0081) *stk-- = (INT8U)0x13;
050C 0115 MOVW R2,R10
050D 01C1 MOVW R24,R2
050E 9701 SBIW R24,1
050F 015C MOVW R10,R24
0510 E183 LDI R24,0x13
0511 01F1 MOVW R30,R2
0512 8380 STD Z+0,R24
(0082) *stk-- = (INT8U)0x14;
0513 0115 MOVW R2,R10
0514 01C1 MOVW R24,R2
0515 9701 SBIW R24,1
0516 015C MOVW R10,R24
0517 E184 LDI R24,0x14
0518 01F1 MOVW R30,R2
0519 8380 STD Z+0,R24
(0083) *stk-- = (INT8U)0x15;
051A 0115 MOVW R2,R10
051B 01C1 MOVW R24,R2
051C 9701 SBIW R24,1
051D 015C MOVW R10,R24
051E E185 LDI R24,0x15
051F 01F1 MOVW R30,R2
0520 8380 STD Z+0,R24
(0084) tmp = (INT16U)pdata;
0521 0169 MOVW R12,R18
(0085) *stk-- = (INT8U)tmp; //Simulate call to function with argument
0522 0115 MOVW R2,R10
0523 01C1 MOVW R24,R2
0524 9701 SBIW R24,1
0525 01F1 MOVW R30,R2
0526 82C0 STD Z+0,R12
(0086) *stk-- = (INT8U)(tmp >> 8);
0527 011C MOVW R2,R24
0528 9701 SBIW R24,1
0529 0126 MOVW R4,R12
052A 2C45 MOV R4,R5
052B 2455 CLR R5
052C 01F1 MOVW R30,R2
052D 8240 STD Z+0,R4
(0087) *stk-- = (INT8U)0x18;
052E 011C MOVW R2,R24
052F 9701 SBIW R24,1
0530 015C MOVW R10,R24
0531 E188 LDI R24,0x18
0532 01F1 MOVW R30,R2
0533 8380 STD Z+0,R24
(0088) *stk-- = (INT8U)0x19;
0534 0115 MOVW R2,R10
0535 01C1 MOVW R24,R2
0536 9701 SBIW R24,1
0537 015C MOVW R10,R24
0538 E189 LDI R24,0x19
0539 01F1 MOVW R30,R2
053A 8380 STD Z+0,R24
(0089) *stk-- = (INT8U)0x20;
053B 0115 MOVW R2,R10
053C 01C1 MOVW R24,R2
053D 9701 SBIW R24,1
053E 015C MOVW R10,R24
053F E280 LDI R24,0x20
0540 01F1 MOVW R30,R2
0541 8380 STD Z+0,R24
(0090) *stk-- = (INT8U)0x21;
0542 0115 MOVW R2,R10
0543 01C1 MOVW R24,R2
0544 9701 SBIW R24,1
0545 015C MOVW R10,R24
0546 E281 LDI R24,0x21
0547 01F1 MOVW R30,R2
0548 8380 STD Z+0,R24
(0091) *stk-- = (INT8U)0x22;
0549 0115 MOVW R2,R10
054A 01C1 MOVW R24,R2
054B 9701 SBIW R24,1
054C 015C MOVW R10,R24
054D E282 LDI R24,0x22
054E 01F1 MOVW R30,R2
054F 8380 STD Z+0,R24
(0092) *stk-- = (INT8U)0x23;
0550 0115 MOVW R2,R10
0551 01C1 MOVW R24,R2
0552 9701 SBIW R24,1
0553 015C MOVW R10,R24
0554 E283 LDI R24,0x23
0555 01F1 MOVW R30,R2
0556 8380 STD Z+0,R24
(0093) *stk-- = (INT8U)0x24;
0557 0115 MOVW R2,R10
0558 01C1 MOVW R24,R2
0559 9701 SBIW R24,1
055A 015C MOVW R10,R24
055B E284 LDI R24,0x24
055C 01F1 MOVW R30,R2
055D 8380 STD Z+0,R24
(0094) *stk-- = (INT8U)0x25;
055E 0115 MOVW R2,R10
055F 01C1 MOVW R24,R2
0560 9701 SBIW R24,1
0561 015C MOVW R10,R24
0562 E285 LDI R24,0x25
0563 01F1 MOVW R30,R2
0564 8380 STD Z+0,R24
(0095) *stk-- = (INT8U)0x26;
0565 0115 MOVW R2,R10
0566 01C1 MOVW R24,R2
0567 9701 SBIW R24,1
0568 015C MOVW R10,R24
0569 E286 LDI R24,0x26
056A 01F1 MOVW R30,R2
056B 8380 STD Z+0,R24
(0096) *stk-- = (INT8U)0x27;
056C 0115 MOVW R2,R10
056D 01C1 MOVW R24,R2
056E 9701 SBIW R24,1
056F 015C MOVW R10,R24
0570 E287 LDI R24,0x27
0571 01F1 MOVW R30,R2
0572 8380 STD Z+0,R24
(0097) // the heap pointer Y=R29:R28 will not be stored
(0098) *stk-- = (INT8U)0x30;
0573 0115 MOVW R2,R10
0574 01C1 MOVW R24,R2
0575 9701 SBIW R24,1
0576 015C MOVW R10,R24
0577 E380 LDI R24,0x30
0578 01F1 MOVW R30,R2
0579 8380 STD Z+0,R24
(0099) *stk-- = (INT8U)0x31;
057A 0115 MOVW R2,R10
057B 01C1 MOVW R24,R2
057C 9701 SBIW R24,1
057D 015C MOVW R10,R24
057E E381 LDI R24,0x31
057F 01F1 MOVW R30,R2
0580 8380 STD Z+0,R24
(0100) // *stk-- = (INT8U)0x3B;
(0101) *stk-- = (INT8U)0x80; //SREG = Interrupts enabled
0581 0115 MOVW R2,R10
0582 01C1 MOVW R24,R2
0583 9701 SBIW R24,1
0584 015C MOVW R10,R24
0585 E880 LDI R24,0x80
0586 01F1 MOVW R30,R2
0587 8380 STD Z+0,R24
(0102)
(0103) tmp = (INT16U)(stks);
0588 0167 MOVW R12,R14
(0104) *stk-- = (INT8U)(tmp >> 8);
0589 0115 MOVW R2,R10
058A 01C1 MOVW R24,R2
058B 9701 SBIW R24,1
058C 015C MOVW R10,R24
058D 0126 MOVW R4,R12
058E 2C45 MOV R4,R5
058F 2455 CLR R5
0590 01F1 MOVW R30,R2
0591 8240 STD Z+0,R4
(0105) *stk = (INT8U)(tmp);
0592 01FC MOVW R30,R24
0593 82C0 STD Z+0,R12
(0106) return ((void *)stk);
0594 018C MOVW R16,R24
0595 940E078C CALL pop_gset5x
0597 9508 RET
_OSTaskCreate:
psp --> R10
err --> R10
prio --> R12
ptos --> Y+16
pdata --> R14
task --> R10
0598 940E0796 CALL push_gset5x
059A 0179 MOVW R14,R18
059B 0158 MOVW R10,R16
059C 972A SBIW R28,0xA
059D 88CA LDD R12,Y+18
(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 */
059E E08F LDI R24,0xF
059F 158C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -