📄 os_cpu_c.lis
字号:
0014 ; * p_arg is a pointer to a user supplied data area that will be passed to the task
0014 ; * when the task first executes.
0014 ; *
0014 ; * ptos is a pointer to the top of stack. It is assumed that 'ptos' points to the
0014 ; * highest valid address on the stack.
0014 ; *
0014 ; * opt specifies options that can be used to alter the behavior of OSTaskStkInit().
0014 ; * (see uCOS_II.H for OS_TASK_OPT_???).
0014 ; *
0014 ; * Returns:
0014 ; * Always returns the location of the new top-of-stack' once the processor
0014 ; * registers have been placed on the stack in the proper order.
0014 ; *
0014 ; * Note(s):
0014 ; * Interrupts are enabled when your task starts executing. You can change this
0014 ; * by setting the SREG to 0x00 instead. In this case, interrupts would be
0014 ; * disabled upon task startup. The application code would be responsible for
0014 ; * enabling interrupts at the beginning of the task code. You will need to
0014 ; * modify OSTaskIdle() and OSTaskStat() so that they enable interrupts. Failure
0014 ; * to do this will make your system crash! The AVR return stack is placed 64
0014 ; * bytes above the start of the (512 byte) stack. This provides 32 levels of
0014 ; * function call nesting which should be more than enough for most applications
0014 ; * (see the "read.me" file for more info).
0014 ; *
0014 ; ********************************************************************************
0014 ; */
0014 ;
0014 ;
0014 ; OS_STK *OSTaskStkInit (void (*task)(void *pd), void *p_arg, OS_STK *ptos, INT16U opt){
0014 .dbline 190
0014 ;
0014 ; INT8U *psoft_stk;
0014 ; INT8U *phard_stk; /* Temp. variable used for setting up AVR hardware stack */
0014 ; INT16U tmp;
0014 ;
0014 ;
0014 ; (void)opt; /* 'opt' is not used, prevent warning */
0014 .dbline 191
0014 ; psoft_stk = (INT8U *)ptos;
0014 A501 movw R20,R10
0016 .dbline 192
0016 ; phard_stk = (INT8U *)ptos
0016 20900200 lds R2,_OSTaskStkSize
001A 30900300 lds R3,_OSTaskStkSize+1
001E 2501 movw R4,R10
0020 4218 sub R4,R2
0022 5308 sbc R5,R3
0024 A0900000 lds R10,_OSTaskStkSizeHard
0028 B0900100 lds R11,_OSTaskStkSizeHard+1
002C A40C add R10,R4
002E B51C adc R11,R5
0030 .dbline 196
0030 ; - OSTaskStkSize /* Task stack size */
0030 ; + OSTaskStkSizeHard; /* AVR return stack ("hardware stack") */
0030 ;
0030 ; tmp = *(INT16U const *)task; /* (1) ICC compiler handles function pointers indirectly! */
0030 F801 movw R30,R16
0032 6081 ldd R22,z+0
0034 7181 ldd R23,z+1
0036 .dbline 198
0036 ;
0036 ; *phard_stk-- = (INT8U)(tmp & 0xFF); /* Put task start address on top of "hardware stack" */
0036 1501 movw R2,R10
0038 C101 movw R24,R2
003A 0197 sbiw R24,1
003C 5C01 movw R10,R24
003E CB01 movw R24,R22
0040 9070 andi R25,0
0042 F101 movw R30,R2
0044 8083 std z+0,R24
0046 .dbline 199
0046 ; tmp >>= 8;
0046 672F mov R22,R23
0048 7727 clr R23
004A .dbline 200
004A ; *phard_stk-- = (INT8U)(tmp & 0xFF);
004A 1501 movw R2,R10
004C C101 movw R24,R2
004E 0197 sbiw R24,1
0050 5C01 movw R10,R24
0052 CB01 movw R24,R22
0054 9070 andi R25,0
0056 F101 movw R30,R2
0058 8083 std z+0,R24
005A .dbline 202
005A ;
005A ; *psoft_stk-- = (INT8U)0x00; /* R0 = 0x00 */
005A 6A01 movw R12,R20
005C 4150 subi R20,1
005E 5040 sbci R21,0
0060 2224 clr R2
0062 F601 movw R30,R12
0064 2082 std z+0,R2
0066 .dbline 203
0066 ; *psoft_stk-- = (INT8U)0x01; /* R1 = 0x01 */
0066 6A01 movw R12,R20
0068 4150 subi R20,1
006A 5040 sbci R21,0
006C 81E0 ldi R24,1
006E F601 movw R30,R12
0070 8083 std z+0,R24
0072 .dbline 204
0072 ; *psoft_stk-- = (INT8U)0x02; /* R2 = 0x02 */
0072 6A01 movw R12,R20
0074 4150 subi R20,1
0076 5040 sbci R21,0
0078 82E0 ldi R24,2
007A F601 movw R30,R12
007C 8083 std z+0,R24
007E .dbline 205
007E ; *psoft_stk-- = (INT8U)0x03; /* R3 = 0x03 */
007E 6A01 movw R12,R20
0080 4150 subi R20,1
0082 5040 sbci R21,0
0084 83E0 ldi R24,3
0086 F601 movw R30,R12
0088 8083 std z+0,R24
008A .dbline 206
008A ; *psoft_stk-- = (INT8U)0x04; /* R4 = 0x04 */
008A 6A01 movw R12,R20
008C 4150 subi R20,1
008E 5040 sbci R21,0
0090 84E0 ldi R24,4
0092 F601 movw R30,R12
0094 8083 std z+0,R24
0096 .dbline 207
0096 ; *psoft_stk-- = (INT8U)0x05; /* R5 = 0x05 */
0096 6A01 movw R12,R20
0098 4150 subi R20,1
009A 5040 sbci R21,0
009C 85E0 ldi R24,5
009E F601 movw R30,R12
00A0 8083 std z+0,R24
00A2 .dbline 208
00A2 ; *psoft_stk-- = (INT8U)0x06; /* R6 = 0x06 */
00A2 6A01 movw R12,R20
00A4 4150 subi R20,1
00A6 5040 sbci R21,0
00A8 86E0 ldi R24,6
00AA F601 movw R30,R12
00AC 8083 std z+0,R24
00AE .dbline 209
00AE ; *psoft_stk-- = (INT8U)0x07; /* R7 = 0x07 */
00AE 6A01 movw R12,R20
00B0 4150 subi R20,1
00B2 5040 sbci R21,0
00B4 87E0 ldi R24,7
00B6 F601 movw R30,R12
00B8 8083 std z+0,R24
00BA .dbline 210
00BA ; *psoft_stk-- = (INT8U)0x08; /* R8 = 0x08 */
00BA 6A01 movw R12,R20
00BC 4150 subi R20,1
00BE 5040 sbci R21,0
00C0 88E0 ldi R24,8
00C2 F601 movw R30,R12
00C4 8083 std z+0,R24
00C6 .dbline 211
00C6 ; *psoft_stk-- = (INT8U)0x09; /* R9 = 0x09 */
00C6 6A01 movw R12,R20
00C8 4150 subi R20,1
00CA 5040 sbci R21,0
00CC 89E0 ldi R24,9
00CE F601 movw R30,R12
00D0 8083 std z+0,R24
00D2 .dbline 212
00D2 ; *psoft_stk-- = (INT8U)0x10; /* R10 = 0x10 */
00D2 6A01 movw R12,R20
00D4 4150 subi R20,1
00D6 5040 sbci R21,0
00D8 80E1 ldi R24,16
00DA F601 movw R30,R12
00DC 8083 std z+0,R24
00DE .dbline 213
00DE ; *psoft_stk-- = (INT8U)0x11; /* R11 = 0x11 */
00DE 6A01 movw R12,R20
00E0 4150 subi R20,1
00E2 5040 sbci R21,0
00E4 81E1 ldi R24,17
00E6 F601 movw R30,R12
00E8 8083 std z+0,R24
00EA .dbline 214
00EA ; *psoft_stk-- = (INT8U)0x12; /* R12 = 0x12 */
00EA 6A01 movw R12,R20
00EC 4150 subi R20,1
00EE 5040 sbci R21,0
00F0 82E1 ldi R24,18
00F2 F601 movw R30,R12
00F4 8083 std z+0,R24
00F6 .dbline 215
00F6 ; *psoft_stk-- = (INT8U)0x13; /* R13 = 0x13 */
00F6 6A01 movw R12,R20
00F8 4150 subi R20,1
00FA 5040 sbci R21,0
00FC 83E1 ldi R24,19
00FE F601 movw R30,R12
0100 8083 std z+0,R24
0102 .dbline 216
0102 ; *psoft_stk-- = (INT8U)0x14; /* R14 = 0x14 */
0102 6A01 movw R12,R20
0104 4150 subi R20,1
0106 5040 sbci R21,0
0108 84E1 ldi R24,20
010A F601 movw R30,R12
010C 8083 std z+0,R24
010E .dbline 217
010E ; *psoft_stk-- = (INT8U)0x15; /* R15 = 0x15 */
010E 6A01 movw R12,R20
0110 4150 subi R20,1
0112 5040 sbci R21,0
0114 85E1 ldi R24,21
0116 F601 movw R30,R12
0118 8083 std z+0,R24
011A .dbline 218
011A ; tmp = (INT16U)p_arg;
011A B901 movw R22,R18
011C .dbline 219
011C ; *psoft_stk-- = (INT8U)(tmp & 0xFF); /* 'p_arg' passed in R17:R16 */
011C 6A01 movw R12,R20
011E 4150 subi R20,1
0120 5040 sbci R21,0
0122 CB01 movw R24,R22
0124 9070 andi R25,0
0126 F601 movw R30,R12
0128 8083 std z+0,R24
012A .dbline 220
012A ; tmp >>= 8;
012A 672F mov R22,R23
012C 7727 clr R23
012E .dbline 221
012E ; *psoft_stk-- = (INT8U)(tmp & 0xFF);
012E 6A01 movw R12,R20
0130 4150 subi R20,1
0132 5040 sbci R21,0
0134 CB01 movw R24,R22
0136 9070 andi R25,0
0138 F601 movw R30,R12
013A 8083 std z+0,R24
013C .dbline 222
013C ; *psoft_stk-- = (INT8U)0x18; /* R18 = 0x18 */
013C 6A01 movw R12,R20
013E 4150 subi R20,1
0140 5040 sbci R21,0
0142 88E1 ldi R24,24
0144 F601 movw R30,R12
0146 8083 std z+0,R24
0148 .dbline 223
0148 ; *psoft_stk-- = (INT8U)0x19; /* R19 = 0x19 */
0148 6A01 movw R12,R20
014A 4150 subi R20,1
014C 5040 sbci R21,0
014E 89E1 ldi R24,25
0150 F601 movw R30,R12
0152 8083 std z+0,R24
0154 .dbline 224
0154 ; *psoft_stk-- = (INT8U)0x20; /* R20 = 0x20 */
0154 6A01 movw R12,R20
0156 4150 subi R20,1
0158 5040 sbci R21,0
015A 80E2 ldi R24,32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -