📄 os_cpu_c.lis
字号:
.module os_cpu_c.c
.area text(rom, con, rel)
0000 .dbfile G:\编程2002-10-15-HOME\做过的项目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\ucos-ii-source\os_cpu_c.c
0000 .dbfunc e OSTaskStkInit _OSTaskStkInit fpc
0000 ; stks -> R10,R11
0000 ; tmp -> R22,R23
0000 ; stk -> R20,R21
0000 ; opt -> y+10
0000 ; ptos -> y+8
0000 ; pdata -> R12,R13
0000 ; task -> R22,R23
.even
0000 _OSTaskStkInit::
0000 00D0 rcall push_gset4
0002 C22E mov R12,R18
0004 D32E mov R13,R19
0006 602F mov R22,R16
0008 712F mov R23,R17
000A .dbline -1
000A .dbline 60
000A ; /*
000A ; ********************************************************************************
000A ; * uC/OS-II
000A ; * The Real-Time Kernel
000A ; *
000A ; * AT90 Specific code
000A ; *
000A ; * File: OS_CPU_C.C
000A ; * By:
000A ; * Modified by:
000A ; * Revision:
000A ; *
000A ; *
000A ; *
000A ; ********************************************************************************
000A ; */
000A ;
000A ; #define OS_CPU_GLOBALS
000A ; #include "includes.h"
000A ;
000A ; /*
000A ; ********************************************************************************
000A ; * INITIALIZE A TASK'S STACK
000A ; *
000A ; * Description:
000A ; * This function is called by either OSTaskCreate() or OSTaskCreateExt() to
000A ; * initialize the stack frame of the task being created. This function is
000A ; * highly processor specific.
000A ; *
000A ; * Arguments:
000A ; * task - is a pointer to the task code
000A ; *
000A ; * pdata - is a pointer to a user supplied data area that will be passed to the
000A ; * task when the task first executes.
000A ; *
000A ; * ptos - is a pointer to the top of stack. It is assumed that 'ptos' points to
000A ; * the highest valid address on the stack.
000A ; *
000A ; * opt - specifies options that can be used to alter the behavior of
000A ; OSTaskStkInit(). (see uCOS_II.H for OS_TASK_OPT_???).
000A ; *
000A ; * Returns:
000A ; * Always returns the location of the new top-of-stack' once the processor
000A ; * registers have been placed on the stack in the proper order.
000A ; *
000A ; * Note(s):
000A ; * Interrupts are enabled when your task starts executing. You can change this
000A ; * by setting the SREG to 0x00 instead. In this case, interrupts would be
000A ; * disabled upon task startup. The application code would be responsible for
000A ; * enabling interrupts at the beginning of the task code. You will need to
000A ; * modify OSTaskIdle() and OSTaskStat() so that they enable interrupts. Failure
000A ; * to do this will make your system crash! The AVR return stack is placed 64
000A ; * bytes above the start of the (512 byte) stack. This provides 32 levels of
000A ; * function call nesting which should be more than enough for most applications
000A ; * (see the "read.me" file for more info).
000A ; *
000A ; ********************************************************************************
000A ; */
000A ; OS_STK *OSTaskStkInit (void (*task)(void *pd),
000A ; void *pdata, OS_STK *ptos, INT16U opt){
000A .dbline 67
000A ;
000A ; INT8U *stk;
000A ; INT8U *stks; // Temp. variable used for setting up AVR hardware stack
000A ; INT16U tmp;
000A ;
000A ;
000A ; opt = opt; // 'opt' is not used, prevent warning
000A .dbline 68
000A ; stk = (INT8U *)ptos; // Wandlung von ptos in Bytezeiger
000A 4885 ldd R20,y+8
000C 5985 ldd R21,y+9
000E .dbline 74
000E ; // AVR return stack ("hardware stack")
000E ; //from IAR C
000E ; //stks = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-64);/* AVR return stack ("hardware stack") */
000E ; //from ICC AVR C
000E ; //stks = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);
000E ; stks = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-64);
000E 8885 ldd R24,y+8
0010 9985 ldd R25,y+9
0012 C097 sbiw R24,48
0014 A82E mov R10,R24
0016 B92E mov R11,R25
0018 .dbline 79
0018 ;
0018 ; // the function address has an extra level of indirection. Fetch the
0018 ; // actual address.
0018 ; //
0018 ; tmp = *(INT16U const *)task;
0018 062F mov R16,R22
001A 172F mov R17,R23
001C 00D0 rcall lpm16
001E 602F mov R22,R16
0020 712F mov R23,R17
0022 .dbline 82
0022 ;
0022 ; // 36 Bytes
0022 ; *stks-- = (INT8U)tmp; //Put task start address on top of hardware stack
0022 2A2C mov R2,R10
0024 3B2C mov R3,R11
0026 822D mov R24,R2
0028 932D mov R25,R3
002A 0197 sbiw R24,1
002C E22D mov R30,R2
002E F32D mov R31,R3
0030 6083 std z+0,R22
0032 .dbline 83
0032 ; *stks-- = (INT8U)(tmp >> 8);
0032 282E mov R2,R24
0034 392E mov R3,R25
0036 0197 sbiw R24,1
0038 A82E mov R10,R24
003A B92E mov R11,R25
003C 462E mov R4,R22
003E 572E mov R5,R23
0040 452C mov R4,R5
0042 5524 clr R5
0044 E22D mov R30,R2
0046 F32D mov R31,R3
0048 4082 std z+0,R4
004A .dbline 85
004A ;
004A ; *stk-- = (INT8U)0x00; // R0 = 0x00
004A 242E mov R2,R20
004C 352E mov R3,R21
004E 4150 subi R20,1
0050 5040 sbci R21,0
0052 4424 clr R4
0054 E22D mov R30,R2
0056 F32D mov R31,R3
0058 4082 std z+0,R4
005A .dbline 86
005A ; *stk-- = (INT8U)0x01;
005A 242E mov R2,R20
005C 352E mov R3,R21
005E 4150 subi R20,1
0060 5040 sbci R21,0
0062 81E0 ldi R24,1
0064 E22D mov R30,R2
0066 F32D mov R31,R3
0068 8083 std z+0,R24
006A .dbline 87
006A ; *stk-- = (INT8U)0x02;
006A 242E mov R2,R20
006C 352E mov R3,R21
006E 4150 subi R20,1
0070 5040 sbci R21,0
0072 82E0 ldi R24,2
0074 E22D mov R30,R2
0076 F32D mov R31,R3
0078 8083 std z+0,R24
007A .dbline 88
007A ; *stk-- = (INT8U)0x03;
007A 242E mov R2,R20
007C 352E mov R3,R21
007E 4150 subi R20,1
0080 5040 sbci R21,0
0082 83E0 ldi R24,3
0084 E22D mov R30,R2
0086 F32D mov R31,R3
0088 8083 std z+0,R24
008A .dbline 89
008A ; *stk-- = (INT8U)0x04;
008A 242E mov R2,R20
008C 352E mov R3,R21
008E 4150 subi R20,1
0090 5040 sbci R21,0
0092 84E0 ldi R24,4
0094 E22D mov R30,R2
0096 F32D mov R31,R3
0098 8083 std z+0,R24
009A .dbline 90
009A ; *stk-- = (INT8U)0x05;
009A 242E mov R2,R20
009C 352E mov R3,R21
009E 4150 subi R20,1
00A0 5040 sbci R21,0
00A2 85E0 ldi R24,5
00A4 E22D mov R30,R2
00A6 F32D mov R31,R3
00A8 8083 std z+0,R24
00AA .dbline 91
00AA ; *stk-- = (INT8U)0x06;
00AA 242E mov R2,R20
00AC 352E mov R3,R21
00AE 4150 subi R20,1
00B0 5040 sbci R21,0
00B2 86E0 ldi R24,6
00B4 E22D mov R30,R2
00B6 F32D mov R31,R3
00B8 8083 std z+0,R24
00BA .dbline 92
00BA ; *stk-- = (INT8U)0x07;
00BA 242E mov R2,R20
00BC 352E mov R3,R21
00BE 4150 subi R20,1
00C0 5040 sbci R21,0
00C2 87E0 ldi R24,7
00C4 E22D mov R30,R2
00C6 F32D mov R31,R3
00C8 8083 std z+0,R24
00CA .dbline 93
00CA ; *stk-- = (INT8U)0x08;
00CA 242E mov R2,R20
00CC 352E mov R3,R21
00CE 4150 subi R20,1
00D0 5040 sbci R21,0
00D2 88E0 ldi R24,8
00D4 E22D mov R30,R2
00D6 F32D mov R31,R3
00D8 8083 std z+0,R24
00DA .dbline 94
00DA ; *stk-- = (INT8U)0x09;
00DA 242E mov R2,R20
00DC 352E mov R3,R21
00DE 4150 subi R20,1
00E0 5040 sbci R21,0
00E2 89E0 ldi R24,9
00E4 E22D mov R30,R2
00E6 F32D mov R31,R3
00E8 8083 std z+0,R24
00EA .dbline 95
00EA ; *stk-- = (INT8U)0x10;
00EA 242E mov R2,R20
00EC 352E mov R3,R21
00EE 4150 subi R20,1
00F0 5040 sbci R21,0
00F2 80E1 ldi R24,16
00F4 E22D mov R30,R2
00F6 F32D mov R31,R3
00F8 8083 std z+0,R24
00FA .dbline 96
00FA ; *stk-- = (INT8U)0x11;
00FA 242E mov R2,R20
00FC 352E mov R3,R21
00FE 4150 subi R20,1
0100 5040 sbci R21,0
0102 81E1 ldi R24,17
0104 E22D mov R30,R2
0106 F32D mov R31,R3
0108 8083 std z+0,R24
010A .dbline 97
010A ; *stk-- = (INT8U)0x12;
010A 242E mov R2,R20
010C 352E mov R3,R21
010E 4150 subi R20,1
0110 5040 sbci R21,0
0112 82E1 ldi R24,18
0114 E22D mov R30,R2
0116 F32D mov R31,R3
0118 8083 std z+0,R24
011A .dbline 98
011A ; *stk-- = (INT8U)0x13;
011A 242E mov R2,R20
011C 352E mov R3,R21
011E 4150 subi R20,1
0120 5040 sbci R21,0
0122 83E1 ldi R24,19
0124 E22D mov R30,R2
0126 F32D mov R31,R3
0128 8083 std z+0,R24
012A .dbline 99
012A ; *stk-- = (INT8U)0x14;
012A 242E mov R2,R20
012C 352E mov R3,R21
012E 4150 subi R20,1
0130 5040 sbci R21,0
0132 84E1 ldi R24,20
0134 E22D mov R30,R2
0136 F32D mov R31,R3
0138 8083 std z+0,R24
013A .dbline 100
013A ; *stk-- = (INT8U)0x15;
013A 242E mov R2,R20
013C 352E mov R3,R21
013E 4150 subi R20,1
0140 5040 sbci R21,0
0142 85E1 ldi R24,21
0144 E22D mov R30,R2
0146 F32D mov R31,R3
0148 8083 std z+0,R24
014A .dbline 101
014A ; tmp = (INT16U)pdata;
014A 6C2D mov R22,R12
014C 7D2D mov R23,R13
014E .dbline 102
014E ; *stk-- = (INT8U)tmp; //Simulate call to function with argument
014E 242E mov R2,R20
0150 352E mov R3,R21
0152 4150 subi R20,1
0154 5040 sbci R21,0
0156 E22D mov R30,R2
0158 F32D mov R31,R3
015A 6083 std z+0,R22
015C .dbline 103
015C ; *stk-- = (INT8U)(tmp >> 8);
015C 242E mov R2,R20
015E 352E mov R3,R21
0160 4150 subi R20,1
0162 5040 sbci R21,0
0164 462E mov R4,R22
0166 572E mov R5,R23
0168 452C mov R4,R5
016A 5524 clr R5
016C E22D mov R30,R2
016E F32D mov R31,R3
0170 4082 std z+0,R4
0172 .dbline 104
0172 ; *stk-- = (INT8U)0x18;
0172 242E mov R2,R20
0174 352E mov R3,R21
0176 4150 subi R20,1
0178 5040 sbci R21,0
017A 88E1 ldi R24,24
017C E22D mov R30,R2
017E F32D mov R31,R3
0180 8083 std z+0,R24
0182 .dbline 105
0182 ; *stk-- = (INT8U)0x19;
0182 242E mov R2,R20
0184 352E mov R3,R21
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -