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