⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucos.lst

📁 Atmega128的proteus仿真例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -