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

📄 os_cpu_c.lis

📁 uCOS-II工程文件,使用ICC编译。
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0010           ; /*
 0010           ; **********************************************************************************************************
 0010           ; *                                       INITIALIZE A TASK'S STACK
 0010           ; *
 0010           ; * Description: This function is called by either OSTaskCreate() or OSTaskCreateExt() to initialize the
 0010           ; *              stack frame of the task being created. This function is highly processor specific.
 0010           ; *
 0010           ; * Arguments  : task          is a pointer to the task code
 0010           ; *
 0010           ; *              p_arg         is a pointer to a user supplied data area that will be passed to the task
 0010           ; *                            when the task first executes.
 0010           ; *
 0010           ; *              ptos          is a pointer to the top of stack. It is assumed that 'ptos' points to the
 0010           ; *                            highest valid address on the stack.
 0010           ; *
 0010           ; *              opt           specifies options that can be used to alter the behavior of OSTaskStkInit().
 0010           ; *                            (see uCOS_II.H for OS_TASK_OPT_???).
 0010           ; *
 0010           ; * Returns    : Always returns the location of the new top-of-stack' once the processor registers have
 0010           ; *              been placed on the stack in the proper order.
 0010           ; *
 0010           ; * Note(s)    : Interrupts are enabled when your task starts executing. You can change this by setting the
 0010           ; *              SREG to 0x00 instead. In this case, interrupts would be disabled upon task startup. The
 0010           ; *              application code would be responsible for enabling interrupts at the beginning of the task
 0010           ; *              code. You will need to modify OSTaskIdle() and OSTaskStat() so that they enable interrupts.
 0010           ; *              Failure to do this will make your system crash!
 0010           ; *
 0010           ; *              The AVR return stack is placed OS_TASK_HARD_STK_SIZE bytes before the bottom of the task's
 0010           ; *              stack.
 0010           ; *
 0010           ; *              (1) IMPORTANT: The ICC compiler handles function pointers by actually passing the pointer
 0010           ; *                             to a location in Flash that actually contains the pointer to the function.
 0010           ; **********************************************************************************************************
 0010           ; */
 0010           ; 
 0010           ; OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt){
 0010                   .dbline 173
 0010           ;     
 0010           ;       INT8U  *stk;
 0010           ;     INT8U  *stks;             // Temp. variable used for setting up AVR hardware stack
 0010           ;     INT16U tmp;
 0010           ; 
 0010           ; 
 0010           ;     opt     = opt;                    // 'opt' is not used, prevent warning
 0010                   .dbline 174
 0010           ;     stk     = (INT8U *)ptos;          // Wandlung von ptos in Bytezeiger
 0010 4E81              ldd R20,y+6
 0012 5F81              ldd R21,y+7
 0014                   .dbline 176
 0014           ;       // AVR return stack ("hardware stack")
 0014           ;     stks    = (INT8U *)(ptos)-(OS_TASK_STK_SIZE-32);
 0014 CA01              movw R24,R20
 0016 8454              subi R24,68
 0018 9040              sbci R25,0
 001A                   .dbline 181
 001A           ; 
 001A           ;       // the function address has an extra level of indirection. Fetch the
 001A           ;     // actual address.
 001A           ;     //    
 001A           ;     tmp = *(INT16U const *)task;
 001A F801              movw R30,R16
 001C 6591              lpm R22,Z+
 001E 7491              lpm R23,Z
 0020                   .dbline 184
 0020           ;    
 0020           ;       // 36 Bytes
 0020           ;     *stks-- = (INT8U)tmp;     //Put task start address on top of hardware stack
 0020 1C01              movw R2,R24
 0022 0197              sbiw R24,1
 0024 F101              movw R30,R2
 0026 6083              std z+0,R22
 0028                   .dbline 185
 0028           ;     *stks-- = (INT8U)(tmp >> 8);
 0028 1C01              movw R2,R24
 002A 0197              sbiw R24,1
 002C 5C01              movw R10,R24
 002E 2B01              movw R4,R22
 0030 452C              mov R4,R5
 0032 5524              clr R5
 0034 F101              movw R30,R2
 0036 4082              std z+0,R4
 0038                   .dbline 187
 0038           ; 
 0038           ;     *stk-- = (INT8U)0x00;             // R0  = 0x00
 0038 1A01              movw R2,R20
 003A 4150              subi R20,1
 003C 5040              sbci R21,0
 003E 4424              clr R4
 0040 F101              movw R30,R2
 0042 4082              std z+0,R4
 0044                   .dbline 188
 0044           ;     *stk-- = (INT8U)0x01; 
 0044 1A01              movw R2,R20
 0046 4150              subi R20,1
 0048 5040              sbci R21,0
 004A 81E0              ldi R24,1
 004C F101              movw R30,R2
 004E 8083              std z+0,R24
 0050                   .dbline 189
 0050           ;     *stk-- = (INT8U)0x02;
 0050 1A01              movw R2,R20
 0052 4150              subi R20,1
 0054 5040              sbci R21,0
 0056 82E0              ldi R24,2
 0058 F101              movw R30,R2
 005A 8083              std z+0,R24
 005C                   .dbline 190
 005C           ;     *stk-- = (INT8U)0x03;
 005C 1A01              movw R2,R20
 005E 4150              subi R20,1
 0060 5040              sbci R21,0
 0062 83E0              ldi R24,3
 0064 F101              movw R30,R2
 0066 8083              std z+0,R24
 0068                   .dbline 191
 0068           ;     *stk-- = (INT8U)0x04;
 0068 1A01              movw R2,R20
 006A 4150              subi R20,1
 006C 5040              sbci R21,0
 006E 84E0              ldi R24,4
 0070 F101              movw R30,R2
 0072 8083              std z+0,R24
 0074                   .dbline 192
 0074           ;     *stk-- = (INT8U)0x05;
 0074 1A01              movw R2,R20
 0076 4150              subi R20,1
 0078 5040              sbci R21,0
 007A 85E0              ldi R24,5
 007C F101              movw R30,R2
 007E 8083              std z+0,R24
 0080                   .dbline 193
 0080           ;     *stk-- = (INT8U)0x06;
 0080 1A01              movw R2,R20
 0082 4150              subi R20,1
 0084 5040              sbci R21,0
 0086 86E0              ldi R24,6
 0088 F101              movw R30,R2
 008A 8083              std z+0,R24
 008C                   .dbline 194
 008C           ;     *stk-- = (INT8U)0x07;
 008C 1A01              movw R2,R20
 008E 4150              subi R20,1
 0090 5040              sbci R21,0
 0092 87E0              ldi R24,7
 0094 F101              movw R30,R2
 0096 8083              std z+0,R24
 0098                   .dbline 195
 0098           ;     *stk-- = (INT8U)0x08;
 0098 1A01              movw R2,R20
 009A 4150              subi R20,1
 009C 5040              sbci R21,0
 009E 88E0              ldi R24,8
 00A0 F101              movw R30,R2
 00A2 8083              std z+0,R24
 00A4                   .dbline 196
 00A4           ;     *stk-- = (INT8U)0x09;
 00A4 1A01              movw R2,R20
 00A6 4150              subi R20,1
 00A8 5040              sbci R21,0
 00AA 89E0              ldi R24,9
 00AC F101              movw R30,R2
 00AE 8083              std z+0,R24
 00B0                   .dbline 197
 00B0           ;     *stk-- = (INT8U)0x10;
 00B0 1A01              movw R2,R20
 00B2 4150              subi R20,1
 00B4 5040              sbci R21,0
 00B6 80E1              ldi R24,16
 00B8 F101              movw R30,R2
 00BA 8083              std z+0,R24
 00BC                   .dbline 198
 00BC           ;     *stk-- = (INT8U)0x11;
 00BC 1A01              movw R2,R20
 00BE 4150              subi R20,1
 00C0 5040              sbci R21,0
 00C2 81E1              ldi R24,17
 00C4 F101              movw R30,R2
 00C6 8083              std z+0,R24
 00C8                   .dbline 199
 00C8           ;     *stk-- = (INT8U)0x12;
 00C8 1A01              movw R2,R20
 00CA 4150              subi R20,1
 00CC 5040              sbci R21,0
 00CE 82E1              ldi R24,18
 00D0 F101              movw R30,R2
 00D2 8083              std z+0,R24
 00D4                   .dbline 200
 00D4           ;     *stk-- = (INT8U)0x13;
 00D4 1A01              movw R2,R20
 00D6 4150              subi R20,1
 00D8 5040              sbci R21,0
 00DA 83E1              ldi R24,19
 00DC F101              movw R30,R2
 00DE 8083              std z+0,R24
 00E0                   .dbline 201
 00E0           ;     *stk-- = (INT8U)0x14;
 00E0 1A01              movw R2,R20
 00E2 4150              subi R20,1
 00E4 5040              sbci R21,0
 00E6 84E1              ldi R24,20
 00E8 F101              movw R30,R2
 00EA 8083              std z+0,R24
 00EC                   .dbline 202
 00EC           ;     *stk-- = (INT8U)0x15;
 00EC 1A01              movw R2,R20
 00EE 4150              subi R20,1
 00F0 5040              sbci R21,0
 00F2 85E1              ldi R24,21
 00F4 F101              movw R30,R2
 00F6 8083              std z+0,R24
 00F8                   .dbline 203
 00F8           ;     tmp    = (INT16U)pdata;
 00F8 B901              movw R22,R18
 00FA                   .dbline 204
 00FA           ;     *stk-- = (INT8U)tmp;      //Simulate call to function with argument
 00FA 1A01              movw R2,R20
 00FC 4150              subi R20,1
 00FE 5040              sbci R21,0
 0100 F101              movw R30,R2
 0102 6083              std z+0,R22
 0104                   .dbline 205
 0104           ;     *stk-- = (INT8U)(tmp >> 8);
 0104 1A01              movw R2,R20
 0106 4150              subi R20,1
 0108 5040              sbci R21,0
 010A 2B01              movw R4,R22
 010C 452C              mov R4,R5
 010E 5524              clr R5
 0110 F101              movw R30,R2
 0112 4082              std z+0,R4
 0114                   .dbline 206
 0114           ;     *stk-- = (INT8U)0x18;
 0114 1A01              movw R2,R20
 0116 4150              subi R20,1
 0118 5040              sbci R21,0
 011A 88E1              ldi R24,24
 011C F101              movw R30,R2

⌨️ 快捷键说明

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