📄 os_cpu_c.lis
字号:
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 + -