📄 os_cpu_c.lis
字号:
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 *p_arg, OS_STK *ptos, INT16U opt)
0010 ; {
0010 .dbline 173
0010 ; INT8U *psoft_stk;
0010 ; INT8U *phard_stk; /* 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 ; psoft_stk = (INT8U *)ptos;
0010 4E81 ldd R20,y+6
0012 5F81 ldd R21,y+7
0014 .dbline 175
0014 ; phard_stk = (INT8U *)ptos
0014 20900200 lds R2,_OSTaskStkSize
0018 30900300 lds R3,_OSTaskStkSize+1
001C 2A01 movw R4,R20
001E 4218 sub R4,R2
0020 5308 sbc R5,R3
0022 A0900000 lds R10,_OSTaskHardStkSize
0026 B0900100 lds R11,_OSTaskHardStkSize+1
002A A40C add R10,R4
002C B51C adc R11,R5
002E .dbline 179
002E ; - OSTaskStkSize /* Task stack size */
002E ; + OSTaskHardStkSize; /* AVR return stack ("hardware stack") */
002E ;
002E ; tmp = *(INT16U const *)task; /* (1) ICC compiler handles function pointers indirectly! */
002E F801 movw R30,R16
0030 6591 lpm R22,Z+
0032 7491 lpm R23,Z
0034 .dbline 181
0034 ;
0034 ; *phard_stk-- = (INT8U)tmp; /* Put task start address on top of "hardware stack" */
0034 1501 movw R2,R10
0036 C101 movw R24,R2
0038 0197 sbiw R24,1
003A F101 movw R30,R2
003C 6083 std z+0,R22
003E .dbline 182
003E ; *phard_stk-- = (INT8U)(tmp >> 8);
003E 1C01 movw R2,R24
0040 0197 sbiw R24,1
0042 5C01 movw R10,R24
0044 2B01 movw R4,R22
0046 452C mov R4,R5
0048 5524 clr R5
004A F101 movw R30,R2
004C 4082 std z+0,R4
004E .dbline 184
004E ;
004E ; *psoft_stk-- = (INT8U)0x00; /* R0 = 0x00 */
004E 1A01 movw R2,R20
0050 4150 subi R20,1
0052 5040 sbci R21,0
0054 4424 clr R4
0056 F101 movw R30,R2
0058 4082 std z+0,R4
005A .dbline 185
005A ; *psoft_stk-- = (INT8U)0x01; /* R1 = 0x01 */
005A 1A01 movw R2,R20
005C 4150 subi R20,1
005E 5040 sbci R21,0
0060 81E0 ldi R24,1
0062 F101 movw R30,R2
0064 8083 std z+0,R24
0066 .dbline 186
0066 ; *psoft_stk-- = (INT8U)0x02; /* R2 = 0x02 */
0066 1A01 movw R2,R20
0068 4150 subi R20,1
006A 5040 sbci R21,0
006C 82E0 ldi R24,2
006E F101 movw R30,R2
0070 8083 std z+0,R24
0072 .dbline 187
0072 ; *psoft_stk-- = (INT8U)0x03; /* R3 = 0x03 */
0072 1A01 movw R2,R20
0074 4150 subi R20,1
0076 5040 sbci R21,0
0078 83E0 ldi R24,3
007A F101 movw R30,R2
007C 8083 std z+0,R24
007E .dbline 188
007E ; *psoft_stk-- = (INT8U)0x04; /* R4 = 0x04 */
007E 1A01 movw R2,R20
0080 4150 subi R20,1
0082 5040 sbci R21,0
0084 84E0 ldi R24,4
0086 F101 movw R30,R2
0088 8083 std z+0,R24
008A .dbline 189
008A ; *psoft_stk-- = (INT8U)0x05; /* R5 = 0x05 */
008A 1A01 movw R2,R20
008C 4150 subi R20,1
008E 5040 sbci R21,0
0090 85E0 ldi R24,5
0092 F101 movw R30,R2
0094 8083 std z+0,R24
0096 .dbline 190
0096 ; *psoft_stk-- = (INT8U)0x06; /* R6 = 0x06 */
0096 1A01 movw R2,R20
0098 4150 subi R20,1
009A 5040 sbci R21,0
009C 86E0 ldi R24,6
009E F101 movw R30,R2
00A0 8083 std z+0,R24
00A2 .dbline 191
00A2 ; *psoft_stk-- = (INT8U)0x07; /* R7 = 0x07 */
00A2 1A01 movw R2,R20
00A4 4150 subi R20,1
00A6 5040 sbci R21,0
00A8 87E0 ldi R24,7
00AA F101 movw R30,R2
00AC 8083 std z+0,R24
00AE .dbline 192
00AE ; *psoft_stk-- = (INT8U)0x08; /* R8 = 0x08 */
00AE 1A01 movw R2,R20
00B0 4150 subi R20,1
00B2 5040 sbci R21,0
00B4 88E0 ldi R24,8
00B6 F101 movw R30,R2
00B8 8083 std z+0,R24
00BA .dbline 193
00BA ; *psoft_stk-- = (INT8U)0x09; /* R9 = 0x09 */
00BA 1A01 movw R2,R20
00BC 4150 subi R20,1
00BE 5040 sbci R21,0
00C0 89E0 ldi R24,9
00C2 F101 movw R30,R2
00C4 8083 std z+0,R24
00C6 .dbline 194
00C6 ; *psoft_stk-- = (INT8U)0x10; /* R10 = 0x10 */
00C6 1A01 movw R2,R20
00C8 4150 subi R20,1
00CA 5040 sbci R21,0
00CC 80E1 ldi R24,16
00CE F101 movw R30,R2
00D0 8083 std z+0,R24
00D2 .dbline 195
00D2 ; *psoft_stk-- = (INT8U)0x11; /* R11 = 0x11 */
00D2 1A01 movw R2,R20
00D4 4150 subi R20,1
00D6 5040 sbci R21,0
00D8 81E1 ldi R24,17
00DA F101 movw R30,R2
00DC 8083 std z+0,R24
00DE .dbline 196
00DE ; *psoft_stk-- = (INT8U)0x12; /* R12 = 0x12 */
00DE 1A01 movw R2,R20
00E0 4150 subi R20,1
00E2 5040 sbci R21,0
00E4 82E1 ldi R24,18
00E6 F101 movw R30,R2
00E8 8083 std z+0,R24
00EA .dbline 197
00EA ; *psoft_stk-- = (INT8U)0x13; /* R13 = 0x13 */
00EA 1A01 movw R2,R20
00EC 4150 subi R20,1
00EE 5040 sbci R21,0
00F0 83E1 ldi R24,19
00F2 F101 movw R30,R2
00F4 8083 std z+0,R24
00F6 .dbline 198
00F6 ; *psoft_stk-- = (INT8U)0x14; /* R14 = 0x14 */
00F6 1A01 movw R2,R20
00F8 4150 subi R20,1
00FA 5040 sbci R21,0
00FC 84E1 ldi R24,20
00FE F101 movw R30,R2
0100 8083 std z+0,R24
0102 .dbline 199
0102 ; *psoft_stk-- = (INT8U)0x15; /* R15 = 0x15 */
0102 1A01 movw R2,R20
0104 4150 subi R20,1
0106 5040 sbci R21,0
0108 85E1 ldi R24,21
010A F101 movw R30,R2
010C 8083 std z+0,R24
010E .dbline 200
010E ; tmp = (INT16U)p_arg;
010E B901 movw R22,R18
0110 .dbline 201
0110 ; *psoft_stk-- = (INT8U)tmp; /* 'p_arg' passed in R17:R16 */
0110 1A01 movw R2,R20
0112 4150 subi R20,1
0114 5040 sbci R21,0
0116 F101 movw R30,R2
0118 6083 std z+0,R22
011A .dbline 202
011A ; *psoft_stk-- = (INT8U)(tmp >> 8);
011A 1A01 movw R2,R20
011C 4150 subi R20,1
011E 5040 sbci R21,0
0120 2B01 movw R4,R22
0122 452C mov R4,R5
0124 5524 clr R5
0126 F101 movw R30,R2
0128 4082 std z+0,R4
012A .dbline 203
012A ; *psoft_stk-- = (INT8U)0x18; /* R18 = 0x18 */
012A 1A01 movw R2,R20
012C 4150 subi R20,1
012E 5040 sbci R21,0
0130 88E1 ldi R24,24
0132 F101 movw R30,R2
0134 8083 std z+0,R24
0136 .dbline 204
0136 ; *psoft_stk-- = (INT8U)0x19; /* R19 = 0x19 */
0136 1A01 movw R2,R20
0138 4150 subi R20,1
013A 5040 sbci R21,0
013C 89E1 ldi R24,25
013E F101 movw R30,R2
0140 8083 std z+0,R24
0142 .dbline 205
0142 ; *psoft_stk-- = (INT8U)0x20; /* R20 = 0x20 */
0142 1A01 movw R2,R20
0144 4150 subi R20,1
0146 5040 sbci R21,0
0148 80E2 ldi R24,32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -