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

📄 os_task.lis

📁 使用mega8和iccavr编译器的一段ucos操作系统程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module os_task.c
                        .area text(rom, con, rel)
 0000                   .dbfile G:\IccPro\ucos_m8_icc\source\os_task.c
 0000                   .dbfunc e OSTaskStkInit _OSTaskStkInit fpc
 0000           ;           stks -> R14,R15
 0000           ;            tmp -> R12,R13
 0000           ;            stk -> R10,R11
 0000           ;            opt -> y+8
 0000           ;           ptos -> y+6
 0000           ;          pdata -> R18,R19
 0000           ;           task -> R16,R17
                        .even
 0000           _OSTaskStkInit::
 0000 00D0              rcall push_gset5x
 0002                   .dbline -1
 0002                   .dbline 47
 0002           ; 
 0002           ; #ifndef  OS_MASTER_FILE
 0002           ; #include "includes.h"
 0002           ; #endif
 0002           ; 
 0002           ; /*$PAGE*/
 0002           ; /*
 0002           ; *********************************************************************************************************
 0002           ; *                                            CREATE A TASK
 0002           ; *
 0002           ; * Description: This function is used to have uC/OS-II manage the execution of a task.  Tasks can either
 0002           ; *              be created prior to the start of multitasking or by a running task.  A task cannot be
 0002           ; *              created by an ISR.
 0002           ; *
 0002           ; * Arguments  : task     is a pointer to the task's code
 0002           ; *
 0002           ; *              pdata    is a pointer to an optional data area which can be used to pass parameters to
 0002           ; *                       the task when the task first executes.  Where the task is concerned it thinks
 0002           ; *                       it was invoked and passed the argument 'pdata' as follows:
 0002           ; *
 0002           ; *                           void Task (void *pdata)
 0002           ; *                           {
 0002           ; *                               for (;;) {
 0002           ; *                                   Task code;
 0002           ; *                               }
 0002           ; *                           }
 0002           ; *
 0002           ; *              ptos     is a pointer to the task's top of stack.  If the configuration constant 
 0002           ; *                       OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high
 0002           ; *                       memory to low memory).  'pstk' will thus point to the highest (valid) memory 
 0002           ; *                       location of the stack.  If OS_STK_GROWTH is set to 0, 'pstk' will point to the 
 0002           ; *                       lowest memory location of the stack and the stack will grow with increasing
 0002           ; *                       memory locations.
 0002           ; *
 0002           ; *              prio     is the task's priority.  A unique priority MUST be assigned to each task and the
 0002           ; *                       lower the number, the higher the priority.
 0002           ; *
 0002           ; * Returns    : OS_NO_ERR        if the function was successful.
 0002           ; *              OS_PRIO_EXIT     if the task priority already exist 
 0002           ; *                               (each task MUST have a unique priority).
 0002           ; *              OS_PRIO_INVALID  if the priority you specify is higher that the maximum allowed 
 0002           ; *                               (i.e. >= OS_LOWEST_PRIO)
 0002           ; *********************************************************************************************************
 0002           ; */
 0002           ; 
 0002           ; #if OS_TASK_CREATE_EN
 0002           ; OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt){
 0002                   .dbline 54
 0002           ; 
 0002           ;     INT8U  *stk;
 0002           ;     INT8U  *stks;             // Temp. variable used for setting up AVR hardware stack
 0002           ;     INT16U tmp;
 0002           ; 
 0002           ; 
 0002           ;     opt     = opt;                    // 'opt' is not used, prevent warning
 0002                   .dbline 55
 0002           ;     stk     = (INT8U *)ptos;          // Wandlung von ptos in Bytezeiger
 0002 AE80              ldd R10,y+6
 0004 BF80              ldd R11,y+7
 0006                   .dbline 57
 0006           ;       // AVR return stack ("hardware stack")
 0006           ;     stks    = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);
 0006 C501              movw R24,R10
 0008 8454              subi R24,68
 000A 9040              sbci R25,0
 000C                   .dbline 62
 000C           ; 
 000C           ;       // the function address has an extra level of indirection. Fetch the
 000C           ;     // actual address.
 000C           ;     //    
 000C           ;     tmp = *(INT16U const *)task;
 000C F801              movw R30,R16
 000E C590              lpm R12,Z+
 0010 D490              lpm R13,Z
 0012                   .dbline 65
 0012           ;    
 0012           ;       // 36 Bytes
 0012           ;     *stks-- = (INT8U)tmp;     //Put task start address on top of hardware stack
 0012 1C01              movw R2,R24
 0014 0197              sbiw R24,1
 0016 F101              movw R30,R2
 0018 C082              std z+0,R12
 001A                   .dbline 66
 001A           ;     *stks-- = (INT8U)(tmp >> 8);
 001A 1C01              movw R2,R24
 001C 0197              sbiw R24,1
 001E 7C01              movw R14,R24
 0020 2601              movw R4,R12
 0022 452C              mov R4,R5
 0024 5524              clr R5
 0026 F101              movw R30,R2
 0028 4082              std z+0,R4
 002A                   .dbline 68
 002A           ; 
 002A           ;     *stk-- = (INT8U)0x00;             // R0  = 0x00
 002A 1501              movw R2,R10
 002C C101              movw R24,R2
 002E 0197              sbiw R24,1
 0030 4424              clr R4
 0032 F101              movw R30,R2
 0034 4082              std z+0,R4
 0036                   .dbline 69
 0036           ;     *stk-- = (INT8U)0x01; 
 0036 1C01              movw R2,R24
 0038 0197              sbiw R24,1
 003A 5C01              movw R10,R24
 003C 81E0              ldi R24,1
 003E F101              movw R30,R2
 0040 8083              std z+0,R24
 0042                   .dbline 70
 0042           ;     *stk-- = (INT8U)0x02;
 0042 1501              movw R2,R10
 0044 C101              movw R24,R2
 0046 0197              sbiw R24,1
 0048 5C01              movw R10,R24
 004A 82E0              ldi R24,2
 004C F101              movw R30,R2
 004E 8083              std z+0,R24
 0050                   .dbline 71
 0050           ;     *stk-- = (INT8U)0x03;
 0050 1501              movw R2,R10
 0052 C101              movw R24,R2
 0054 0197              sbiw R24,1
 0056 5C01              movw R10,R24
 0058 83E0              ldi R24,3
 005A F101              movw R30,R2
 005C 8083              std z+0,R24
 005E                   .dbline 72
 005E           ;     *stk-- = (INT8U)0x04;
 005E 1501              movw R2,R10
 0060 C101              movw R24,R2
 0062 0197              sbiw R24,1
 0064 5C01              movw R10,R24
 0066 84E0              ldi R24,4
 0068 F101              movw R30,R2
 006A 8083              std z+0,R24
 006C                   .dbline 73
 006C           ;     *stk-- = (INT8U)0x05;
 006C 1501              movw R2,R10
 006E C101              movw R24,R2
 0070 0197              sbiw R24,1
 0072 5C01              movw R10,R24
 0074 85E0              ldi R24,5
 0076 F101              movw R30,R2
 0078 8083              std z+0,R24
 007A                   .dbline 74
 007A           ;     *stk-- = (INT8U)0x06;
 007A 1501              movw R2,R10
 007C C101              movw R24,R2
 007E 0197              sbiw R24,1
 0080 5C01              movw R10,R24
 0082 86E0              ldi R24,6
 0084 F101              movw R30,R2
 0086 8083              std z+0,R24
 0088                   .dbline 75
 0088           ;     *stk-- = (INT8U)0x07;
 0088 1501              movw R2,R10
 008A C101              movw R24,R2
 008C 0197              sbiw R24,1
 008E 5C01              movw R10,R24
 0090 87E0              ldi R24,7
 0092 F101              movw R30,R2
 0094 8083              std z+0,R24
 0096                   .dbline 76
 0096           ;     *stk-- = (INT8U)0x08;
 0096 1501              movw R2,R10
 0098 C101              movw R24,R2
 009A 0197              sbiw R24,1
 009C 5C01              movw R10,R24
 009E 88E0              ldi R24,8
 00A0 F101              movw R30,R2
 00A2 8083              std z+0,R24
 00A4                   .dbline 77
 00A4           ;     *stk-- = (INT8U)0x09;
 00A4 1501              movw R2,R10
 00A6 C101              movw R24,R2
 00A8 0197              sbiw R24,1
 00AA 5C01              movw R10,R24
 00AC 89E0              ldi R24,9
 00AE F101              movw R30,R2
 00B0 8083              std z+0,R24
 00B2                   .dbline 78
 00B2           ;     *stk-- = (INT8U)0x10;
 00B2 1501              movw R2,R10
 00B4 C101              movw R24,R2
 00B6 0197              sbiw R24,1
 00B8 5C01              movw R10,R24
 00BA 80E1              ldi R24,16
 00BC F101              movw R30,R2
 00BE 8083              std z+0,R24
 00C0                   .dbline 79
 00C0           ;     *stk-- = (INT8U)0x11;
 00C0 1501              movw R2,R10
 00C2 C101              movw R24,R2
 00C4 0197              sbiw R24,1
 00C6 5C01              movw R10,R24
 00C8 81E1              ldi R24,17
 00CA F101              movw R30,R2
 00CC 8083              std z+0,R24
 00CE                   .dbline 80
 00CE           ;     *stk-- = (INT8U)0x12;
 00CE 1501              movw R2,R10
 00D0 C101              movw R24,R2
 00D2 0197              sbiw R24,1
 00D4 5C01              movw R10,R24
 00D6 82E1              ldi R24,18
 00D8 F101              movw R30,R2
 00DA 8083              std z+0,R24
 00DC                   .dbline 81
 00DC           ;     *stk-- = (INT8U)0x13;
 00DC 1501              movw R2,R10
 00DE C101              movw R24,R2
 00E0 0197              sbiw R24,1
 00E2 5C01              movw R10,R24
 00E4 83E1              ldi R24,19
 00E6 F101              movw R30,R2
 00E8 8083              std z+0,R24
 00EA                   .dbline 82
 00EA           ;     *stk-- = (INT8U)0x14;
 00EA 1501              movw R2,R10
 00EC C101              movw R24,R2
 00EE 0197              sbiw R24,1
 00F0 5C01              movw R10,R24
 00F2 84E1              ldi R24,20
 00F4 F101              movw R30,R2
 00F6 8083              std z+0,R24
 00F8                   .dbline 83
 00F8           ;     *stk-- = (INT8U)0x15;
 00F8 1501              movw R2,R10
 00FA C101              movw R24,R2
 00FC 0197              sbiw R24,1
 00FE 5C01              movw R10,R24
 0100 85E1              ldi R24,21
 0102 F101              movw R30,R2
 0104 8083              std z+0,R24
 0106                   .dbline 84
 0106           ;     tmp    = (INT16U)pdata;
 0106 6901              movw R12,R18
 0108                   .dbline 85
 0108           ;     *stk-- = (INT8U)tmp;      //Simulate call to function with argument
 0108 1501              movw R2,R10
 010A C101              movw R24,R2
 010C 0197              sbiw R24,1
 010E F101              movw R30,R2
 0110 C082              std z+0,R12
 0112                   .dbline 86
 0112           ;     *stk-- = (INT8U)(tmp >> 8);
 0112 1C01              movw R2,R24
 0114 0197              sbiw R24,1
 0116 2601              movw R4,R12
 0118 452C              mov R4,R5
 011A 5524              clr R5
 011C F101              movw R30,R2
 011E 4082              std z+0,R4
 0120                   .dbline 87
 0120           ;     *stk-- = (INT8U)0x18;
 0120 1C01              movw R2,R24
 0122 0197              sbiw R24,1
 0124 5C01              movw R10,R24
 0126 88E1              ldi R24,24
 0128 F101              movw R30,R2
 012A 8083              std z+0,R24
 012C                   .dbline 88
 012C           ;     *stk-- = (INT8U)0x19;
 012C 1501              movw R2,R10
 012E C101              movw R24,R2
 0130 0197              sbiw R24,1
 0132 5C01              movw R10,R24
 0134 89E1              ldi R24,25
 0136 F101              movw R30,R2
 0138 8083              std z+0,R24
 013A                   .dbline 89
 013A           ;     *stk-- = (INT8U)0x20;
 013A 1501              movw R2,R10
 013C C101              movw R24,R2
 013E 0197              sbiw R24,1
 0140 5C01              movw R10,R24
 0142 80E2              ldi R24,32
 0144 F101              movw R30,R2
 0146 8083              std z+0,R24
 0148                   .dbline 90
 0148           ;     *stk-- = (INT8U)0x21;
 0148 1501              movw R2,R10
 014A C101              movw R24,R2
 014C 0197              sbiw R24,1
 014E 5C01              movw R10,R24
 0150 81E2              ldi R24,33
 0152 F101              movw R30,R2
 0154 8083              std z+0,R24
 0156                   .dbline 91
 0156           ;     *stk-- = (INT8U)0x22;
 0156 1501              movw R2,R10
 0158 C101              movw R24,R2
 015A 0197              sbiw R24,1
 015C 5C01              movw R10,R24
 015E 82E2              ldi R24,34
 0160 F101              movw R30,R2
 0162 8083              std z+0,R24
 0164                   .dbline 92
 0164           ;     *stk-- = (INT8U)0x23;
 0164 1501              movw R2,R10
 0166 C101              movw R24,R2
 0168 0197              sbiw R24,1
 016A 5C01              movw R10,R24
 016C 83E2              ldi R24,35
 016E F101              movw R30,R2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -