?? 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\os-task-switch\os_cpu_c.c
0000 .dbfunc e OSTaskStkInit _OSTaskStkInit fpc
0000 ; stks -> R10,R11
0000 ; tmp -> R22,R23
0000 ; stk -> R20,R21
0000 ; stk_size -> 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 42
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 stk_size){
000A .dbline 48
000A ; INT8U *stk;
000A ; INT8U *stks; // Temp. variable used for setting up AVR hardware stack
000A ; INT16U tmp;
000A ;
000A ;
000A ; stk = (INT8U *)ptos;
000A 4885 ldd R20,y+8
000C 5985 ldd R21,y+9
000E .dbline 54
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)-(stk_size - OS_HARDWARE_STACK_SIZE);
000E 8A85 ldd R24,y+10
0010 9B85 ldd R25,y+11
0012 8054 subi R24,64
0014 9040 sbci R25,0
0016 A884 ldd R10,y+8
0018 B984 ldd R11,y+9
001A A81A sub R10,R24
001C B90A sbc R11,R25
001E .dbline 56
001E ; #if OS_STRICT
001E ; if((0==task)||(ptos==0)||((INT16U)ptos<stk_size)||(stk_size<OS_HARDWARE_STACK_SIZE+40))
001E 6030 cpi R22,0
0020 6707 cpc R22,R23
0022 89F0 breq L6
0024 X0:
0024 2884 ldd R2,y+8
0026 3984 ldd R3,y+9
0028 2220 tst R2
002A 11F4 brne X1
002C 3320 tst R3
002E 59F0 breq L6
0030 X1:
0030 0A84 ldd R0,y+10
0032 1B84 ldd R1,y+11
0034 2014 cp R2,R0
0036 3104 cpc R3,R1
0038 30F0 brlo L6
003A 8A85 ldd R24,y+10
003C 9B85 ldd R25,y+11
003E 8836 cpi R24,104
0040 E0E0 ldi R30,0
0042 9E07 cpc R25,R30
0044 10F4 brsh L2
0046 L6:
0046 .dbline 57
0046 ; OSError(0);
0046 0027 clr R16
0048 00D0 rcall _OSError
004A L2:
004A .dbline 62
004A ; #endif
004A ; // the function address has an extra level of indirection. Fetch the
004A ; // actual address.
004A ; //
004A ; tmp = *(INT16U const *)task;
004A 062F mov R16,R22
004C 172F mov R17,R23
004E 00D0 rcall lpm16
0050 602F mov R22,R16
0052 712F mov R23,R17
0054 .dbline 65
0054 ;
0054 ; // 36 Bytes
0054 ; *stks-- = (INT8U)tmp; //Put task start address on top of hardware stack
0054 2A2C mov R2,R10
0056 3B2C mov R3,R11
0058 822D mov R24,R2
005A 932D mov R25,R3
005C 0197 sbiw R24,1
005E E22D mov R30,R2
0060 F32D mov R31,R3
0062 6083 std z+0,R22
0064 .dbline 66
0064 ; *stks-- = (INT8U)(tmp >> 8);
0064 282E mov R2,R24
0066 392E mov R3,R25
0068 0197 sbiw R24,1
006A A82E mov R10,R24
006C B92E mov R11,R25
006E 462E mov R4,R22
0070 572E mov R5,R23
0072 452C mov R4,R5
0074 5524 clr R5
0076 E22D mov R30,R2
0078 F32D mov R31,R3
007A 4082 std z+0,R4
007C .dbline 68
007C ;
007C ; *stk-- = (INT8U)0x00; // R0 = 0x00
007C 242E mov R2,R20
007E 352E mov R3,R21
0080 4150 subi R20,1
0082 5040 sbci R21,0
0084 4424 clr R4
0086 E22D mov R30,R2
0088 F32D mov R31,R3
008A 4082 std z+0,R4
008C .dbline 69
008C ; *stk-- = (INT8U)0x01;
008C 242E mov R2,R20
008E 352E mov R3,R21
0090 4150 subi R20,1
0092 5040 sbci R21,0
0094 81E0 ldi R24,1
0096 E22D mov R30,R2
0098 F32D mov R31,R3
009A 8083 std z+0,R24
009C .dbline 70
009C ; *stk-- = (INT8U)0x02;
009C 242E mov R2,R20
009E 352E mov R3,R21
00A0 4150 subi R20,1
00A2 5040 sbci R21,0
00A4 82E0 ldi R24,2
00A6 E22D mov R30,R2
00A8 F32D mov R31,R3
00AA 8083 std z+0,R24
00AC .dbline 71
00AC ; *stk-- = (INT8U)0x03;
00AC 242E mov R2,R20
00AE 352E mov R3,R21
00B0 4150 subi R20,1
00B2 5040 sbci R21,0
00B4 83E0 ldi R24,3
00B6 E22D mov R30,R2
00B8 F32D mov R31,R3
00BA 8083 std z+0,R24
00BC .dbline 72
00BC ; *stk-- = (INT8U)0x04;
00BC 242E mov R2,R20
00BE 352E mov R3,R21
00C0 4150 subi R20,1
00C2 5040 sbci R21,0
00C4 84E0 ldi R24,4
00C6 E22D mov R30,R2
00C8 F32D mov R31,R3
00CA 8083 std z+0,R24
00CC .dbline 73
00CC ; *stk-- = (INT8U)0x05;
00CC 242E mov R2,R20
00CE 352E mov R3,R21
00D0 4150 subi R20,1
00D2 5040 sbci R21,0
00D4 85E0 ldi R24,5
00D6 E22D mov R30,R2
00D8 F32D mov R31,R3
00DA 8083 std z+0,R24
00DC .dbline 74
00DC ; *stk-- = (INT8U)0x06;
00DC 242E mov R2,R20
00DE 352E mov R3,R21
00E0 4150 subi R20,1
00E2 5040 sbci R21,0
00E4 86E0 ldi R24,6
00E6 E22D mov R30,R2
00E8 F32D mov R31,R3
00EA 8083 std z+0,R24
00EC .dbline 75
00EC ; *stk-- = (INT8U)0x07;
00EC 242E mov R2,R20
00EE 352E mov R3,R21
00F0 4150 subi R20,1
00F2 5040 sbci R21,0
00F4 87E0 ldi R24,7
00F6 E22D mov R30,R2
00F8 F32D mov R31,R3
00FA 8083 std z+0,R24
00FC .dbline 76
00FC ; *stk-- = (INT8U)0x08;
00FC 242E mov R2,R20
00FE 352E mov R3,R21
0100 4150 subi R20,1
0102 5040 sbci R21,0
0104 88E0 ldi R24,8
0106 E22D mov R30,R2
0108 F32D mov R31,R3
010A 8083 std z+0,R24
010C .dbline 77
010C ; *stk-- = (INT8U)0x09;
010C 242E mov R2,R20
010E 352E mov R3,R21
0110 4150 subi R20,1
0112 5040 sbci R21,0
0114 89E0 ldi R24,9
0116 E22D mov R30,R2
0118 F32D mov R31,R3
011A 8083 std z+0,R24
011C .dbline 78
011C ; *stk-- = (INT8U)0x10;
011C 242E mov R2,R20
011E 352E mov R3,R21
0120 4150 subi R20,1
0122 5040 sbci R21,0
0124 80E1 ldi R24,16
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -