📄 os_task.lis
字号:
.module os_task.c
.area text(rom, con, rel)
0000 .dbfile G:\IccPro\ucos_m8_icc\source\os_task.c
0000 .dbfunc e OSTaskStkInit _OSTaskStkInit fpc
0000 ; stks -> R14,R15
0000 ; tmp -> R12,R13
0000 ; stk -> R10,R11
0000 ; opt -> y+8
0000 ; ptos -> y+6
0000 ; pdata -> R18,R19
0000 ; task -> R16,R17
.even
0000 _OSTaskStkInit::
0000 00D0 rcall push_gset5x
0002 .dbline -1
0002 .dbline 47
0002 ;
0002 ; #ifndef OS_MASTER_FILE
0002 ; #include "includes.h"
0002 ; #endif
0002 ;
0002 ; /*$PAGE*/
0002 ; /*
0002 ; *********************************************************************************************************
0002 ; * CREATE A TASK
0002 ; *
0002 ; * Description: This function is used to have uC/OS-II manage the execution of a task. Tasks can either
0002 ; * be created prior to the start of multitasking or by a running task. A task cannot be
0002 ; * created by an ISR.
0002 ; *
0002 ; * Arguments : task is a pointer to the task's code
0002 ; *
0002 ; * pdata is a pointer to an optional data area which can be used to pass parameters to
0002 ; * the task when the task first executes. Where the task is concerned it thinks
0002 ; * it was invoked and passed the argument 'pdata' as follows:
0002 ; *
0002 ; * void Task (void *pdata)
0002 ; * {
0002 ; * for (;;) {
0002 ; * Task code;
0002 ; * }
0002 ; * }
0002 ; *
0002 ; * ptos is a pointer to the task's top of stack. If the configuration constant
0002 ; * OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high
0002 ; * memory to low memory). 'pstk' will thus point to the highest (valid) memory
0002 ; * location of the stack. If OS_STK_GROWTH is set to 0, 'pstk' will point to the
0002 ; * lowest memory location of the stack and the stack will grow with increasing
0002 ; * memory locations.
0002 ; *
0002 ; * prio is the task's priority. A unique priority MUST be assigned to each task and the
0002 ; * lower the number, the higher the priority.
0002 ; *
0002 ; * Returns : OS_NO_ERR if the function was successful.
0002 ; * OS_PRIO_EXIT if the task priority already exist
0002 ; * (each task MUST have a unique priority).
0002 ; * OS_PRIO_INVALID if the priority you specify is higher that the maximum allowed
0002 ; * (i.e. >= OS_LOWEST_PRIO)
0002 ; *********************************************************************************************************
0002 ; */
0002 ;
0002 ; #if OS_TASK_CREATE_EN
0002 ; OS_STK *OSTaskStkInit (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt){
0002 .dbline 54
0002 ;
0002 ; INT8U *stk;
0002 ; INT8U *stks; // Temp. variable used for setting up AVR hardware stack
0002 ; INT16U tmp;
0002 ;
0002 ;
0002 ; opt = opt; // 'opt' is not used, prevent warning
0002 .dbline 55
0002 ; stk = (INT8U *)ptos; // Wandlung von ptos in Bytezeiger
0002 AE80 ldd R10,y+6
0004 BF80 ldd R11,y+7
0006 .dbline 57
0006 ; // AVR return stack ("hardware stack")
0006 ; stks = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);
0006 C501 movw R24,R10
0008 8454 subi R24,68
000A 9040 sbci R25,0
000C .dbline 62
000C ;
000C ; // the function address has an extra level of indirection. Fetch the
000C ; // actual address.
000C ; //
000C ; tmp = *(INT16U const *)task;
000C F801 movw R30,R16
000E C590 lpm R12,Z+
0010 D490 lpm R13,Z
0012 .dbline 65
0012 ;
0012 ; // 36 Bytes
0012 ; *stks-- = (INT8U)tmp; //Put task start address on top of hardware stack
0012 1C01 movw R2,R24
0014 0197 sbiw R24,1
0016 F101 movw R30,R2
0018 C082 std z+0,R12
001A .dbline 66
001A ; *stks-- = (INT8U)(tmp >> 8);
001A 1C01 movw R2,R24
001C 0197 sbiw R24,1
001E 7C01 movw R14,R24
0020 2601 movw R4,R12
0022 452C mov R4,R5
0024 5524 clr R5
0026 F101 movw R30,R2
0028 4082 std z+0,R4
002A .dbline 68
002A ;
002A ; *stk-- = (INT8U)0x00; // R0 = 0x00
002A 1501 movw R2,R10
002C C101 movw R24,R2
002E 0197 sbiw R24,1
0030 4424 clr R4
0032 F101 movw R30,R2
0034 4082 std z+0,R4
0036 .dbline 69
0036 ; *stk-- = (INT8U)0x01;
0036 1C01 movw R2,R24
0038 0197 sbiw R24,1
003A 5C01 movw R10,R24
003C 81E0 ldi R24,1
003E F101 movw R30,R2
0040 8083 std z+0,R24
0042 .dbline 70
0042 ; *stk-- = (INT8U)0x02;
0042 1501 movw R2,R10
0044 C101 movw R24,R2
0046 0197 sbiw R24,1
0048 5C01 movw R10,R24
004A 82E0 ldi R24,2
004C F101 movw R30,R2
004E 8083 std z+0,R24
0050 .dbline 71
0050 ; *stk-- = (INT8U)0x03;
0050 1501 movw R2,R10
0052 C101 movw R24,R2
0054 0197 sbiw R24,1
0056 5C01 movw R10,R24
0058 83E0 ldi R24,3
005A F101 movw R30,R2
005C 8083 std z+0,R24
005E .dbline 72
005E ; *stk-- = (INT8U)0x04;
005E 1501 movw R2,R10
0060 C101 movw R24,R2
0062 0197 sbiw R24,1
0064 5C01 movw R10,R24
0066 84E0 ldi R24,4
0068 F101 movw R30,R2
006A 8083 std z+0,R24
006C .dbline 73
006C ; *stk-- = (INT8U)0x05;
006C 1501 movw R2,R10
006E C101 movw R24,R2
0070 0197 sbiw R24,1
0072 5C01 movw R10,R24
0074 85E0 ldi R24,5
0076 F101 movw R30,R2
0078 8083 std z+0,R24
007A .dbline 74
007A ; *stk-- = (INT8U)0x06;
007A 1501 movw R2,R10
007C C101 movw R24,R2
007E 0197 sbiw R24,1
0080 5C01 movw R10,R24
0082 86E0 ldi R24,6
0084 F101 movw R30,R2
0086 8083 std z+0,R24
0088 .dbline 75
0088 ; *stk-- = (INT8U)0x07;
0088 1501 movw R2,R10
008A C101 movw R24,R2
008C 0197 sbiw R24,1
008E 5C01 movw R10,R24
0090 87E0 ldi R24,7
0092 F101 movw R30,R2
0094 8083 std z+0,R24
0096 .dbline 76
0096 ; *stk-- = (INT8U)0x08;
0096 1501 movw R2,R10
0098 C101 movw R24,R2
009A 0197 sbiw R24,1
009C 5C01 movw R10,R24
009E 88E0 ldi R24,8
00A0 F101 movw R30,R2
00A2 8083 std z+0,R24
00A4 .dbline 77
00A4 ; *stk-- = (INT8U)0x09;
00A4 1501 movw R2,R10
00A6 C101 movw R24,R2
00A8 0197 sbiw R24,1
00AA 5C01 movw R10,R24
00AC 89E0 ldi R24,9
00AE F101 movw R30,R2
00B0 8083 std z+0,R24
00B2 .dbline 78
00B2 ; *stk-- = (INT8U)0x10;
00B2 1501 movw R2,R10
00B4 C101 movw R24,R2
00B6 0197 sbiw R24,1
00B8 5C01 movw R10,R24
00BA 80E1 ldi R24,16
00BC F101 movw R30,R2
00BE 8083 std z+0,R24
00C0 .dbline 79
00C0 ; *stk-- = (INT8U)0x11;
00C0 1501 movw R2,R10
00C2 C101 movw R24,R2
00C4 0197 sbiw R24,1
00C6 5C01 movw R10,R24
00C8 81E1 ldi R24,17
00CA F101 movw R30,R2
00CC 8083 std z+0,R24
00CE .dbline 80
00CE ; *stk-- = (INT8U)0x12;
00CE 1501 movw R2,R10
00D0 C101 movw R24,R2
00D2 0197 sbiw R24,1
00D4 5C01 movw R10,R24
00D6 82E1 ldi R24,18
00D8 F101 movw R30,R2
00DA 8083 std z+0,R24
00DC .dbline 81
00DC ; *stk-- = (INT8U)0x13;
00DC 1501 movw R2,R10
00DE C101 movw R24,R2
00E0 0197 sbiw R24,1
00E2 5C01 movw R10,R24
00E4 83E1 ldi R24,19
00E6 F101 movw R30,R2
00E8 8083 std z+0,R24
00EA .dbline 82
00EA ; *stk-- = (INT8U)0x14;
00EA 1501 movw R2,R10
00EC C101 movw R24,R2
00EE 0197 sbiw R24,1
00F0 5C01 movw R10,R24
00F2 84E1 ldi R24,20
00F4 F101 movw R30,R2
00F6 8083 std z+0,R24
00F8 .dbline 83
00F8 ; *stk-- = (INT8U)0x15;
00F8 1501 movw R2,R10
00FA C101 movw R24,R2
00FC 0197 sbiw R24,1
00FE 5C01 movw R10,R24
0100 85E1 ldi R24,21
0102 F101 movw R30,R2
0104 8083 std z+0,R24
0106 .dbline 84
0106 ; tmp = (INT16U)pdata;
0106 6901 movw R12,R18
0108 .dbline 85
0108 ; *stk-- = (INT8U)tmp; //Simulate call to function with argument
0108 1501 movw R2,R10
010A C101 movw R24,R2
010C 0197 sbiw R24,1
010E F101 movw R30,R2
0110 C082 std z+0,R12
0112 .dbline 86
0112 ; *stk-- = (INT8U)(tmp >> 8);
0112 1C01 movw R2,R24
0114 0197 sbiw R24,1
0116 2601 movw R4,R12
0118 452C mov R4,R5
011A 5524 clr R5
011C F101 movw R30,R2
011E 4082 std z+0,R4
0120 .dbline 87
0120 ; *stk-- = (INT8U)0x18;
0120 1C01 movw R2,R24
0122 0197 sbiw R24,1
0124 5C01 movw R10,R24
0126 88E1 ldi R24,24
0128 F101 movw R30,R2
012A 8083 std z+0,R24
012C .dbline 88
012C ; *stk-- = (INT8U)0x19;
012C 1501 movw R2,R10
012E C101 movw R24,R2
0130 0197 sbiw R24,1
0132 5C01 movw R10,R24
0134 89E1 ldi R24,25
0136 F101 movw R30,R2
0138 8083 std z+0,R24
013A .dbline 89
013A ; *stk-- = (INT8U)0x20;
013A 1501 movw R2,R10
013C C101 movw R24,R2
013E 0197 sbiw R24,1
0140 5C01 movw R10,R24
0142 80E2 ldi R24,32
0144 F101 movw R30,R2
0146 8083 std z+0,R24
0148 .dbline 90
0148 ; *stk-- = (INT8U)0x21;
0148 1501 movw R2,R10
014A C101 movw R24,R2
014C 0197 sbiw R24,1
014E 5C01 movw R10,R24
0150 81E2 ldi R24,33
0152 F101 movw R30,R2
0154 8083 std z+0,R24
0156 .dbline 91
0156 ; *stk-- = (INT8U)0x22;
0156 1501 movw R2,R10
0158 C101 movw R24,R2
015A 0197 sbiw R24,1
015C 5C01 movw R10,R24
015E 82E2 ldi R24,34
0160 F101 movw R30,R2
0162 8083 std z+0,R24
0164 .dbline 92
0164 ; *stk-- = (INT8U)0x23;
0164 1501 movw R2,R10
0166 C101 movw R24,R2
0168 0197 sbiw R24,1
016A 5C01 movw R10,R24
016C 83E2 ldi R24,35
016E F101 movw R30,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -