📄 os_cpu_c.s
字号:
.module os_cpu_c.c
.area text(rom, con, rel)
.dbfile F:\开发工具\AVR开发工具\RTOSIC~1\source\os_cpu_c.c
.dbfunc e OSTaskStkInit _OSTaskStkInit fpc
; stks -> R10,R11
; tmp -> R22,R23
; stk -> R20,R21
; opt -> y+10
; ptos -> y+8
; pdata -> R12,R13
; task -> R22,R23
.even
_OSTaskStkInit::
xcall push_gset4
mov R12,R18
mov R13,R19
mov R22,R16
mov R23,R17
.dbline -1
.dbline 60
; /*
; ********************************************************************************
; * uC/OS-II
; * The Real-Time Kernel
; *
; * ATmega103 Specific code
; *
; * File: OS_CPU_C.C
; * By: Ole Saether
; * Modified by: Joerg Meyer
; * Revision: 0
; *
; *
; *
; ********************************************************************************
; */
;
; #define OS_CPU_GLOBALS
; #include "includes.h"
;
; /*
; ********************************************************************************
; * INITIALIZE A TASK'S STACK
; *
; * Description:
; * This function is called by either OSTaskCreate() or OSTaskCreateExt() to
; * initialize the stack frame of the task being created. This function is
; * highly processor specific.
; *
; * Arguments:
; * task - is a pointer to the task code
; *
; * pdata - is a pointer to a user supplied data area that will be passed to the
; * task when the task first executes.
; *
; * ptos - is a pointer to the top of stack. It is assumed that 'ptos' points to
; * the highest valid address on the stack.
; *
; * opt - specifies options that can be used to alter the behavior of
; OSTaskStkInit(). (see uCOS_II.H for OS_TASK_OPT_???).
; *
; * Returns:
; * Always returns the location of the new top-of-stack' once the processor
; * registers have been placed on the stack in the proper order.
; *
; * Note(s):
; * Interrupts are enabled when your task starts executing. You can change this
; * by setting the SREG to 0x00 instead. In this case, interrupts would be
; * disabled upon task startup. The application code would be responsible for
; * enabling interrupts at the beginning of the task code. You will need to
; * modify OSTaskIdle() and OSTaskStat() so that they enable interrupts. Failure
; * to do this will make your system crash! The AVR return stack is placed 64
; * bytes above the start of the (512 byte) stack. This provides 32 levels of
; * function call nesting which should be more than enough for most applications
; * (see the "read.me" file for more info).
; *
; ********************************************************************************
; */
; OS_STK *OSTaskStkInit (void (*task)(void *pd),
; void *pdata, OS_STK *ptos, INT16U opt){
.dbline 67
;
; INT8U *stk;
; INT8U *stks; // Temp. variable used for setting up AVR hardware stack
; INT16U tmp;
;
;
; opt = opt; // 'opt' is not used, prevent warning
.dbline 68
; stk = (INT8U *)ptos; // Wandlung von ptos in Bytezeiger
ldd R20,y+8
ldd R21,y+9
.dbline 70
; // AVR return stack ("hardware stack")
; stks = (INT8U *)(ptos)-(OS_TASK_DEF_STK_SIZE-32);
mov R24,R20
mov R25,R21
subi R24,96
sbci R25,0
mov R10,R24
mov R11,R25
.dbline 75
;
; // the function address has an extra level of indirection. Fetch the
; // actual address.
; //
; tmp = *(INT16U const *)task;
mov R16,R22
mov R17,R23
xcall lpm16
mov R22,R16
mov R23,R17
.dbline 78
;
; // 36 Bytes
; *stks-- = (INT8U)tmp; //Put task start address on top of hardware stack
mov R2,R10
mov R3,R11
mov R24,R2
mov R25,R3
sbiw R24,1
mov R30,R2
mov R31,R3
std z+0,R22
.dbline 79
; *stks-- = (INT8U)(tmp >> 8);
mov R2,R24
mov R3,R25
sbiw R24,1
mov R10,R24
mov R11,R25
mov R4,R22
mov R5,R23
mov R4,R5
clr R5
mov R30,R2
mov R31,R3
std z+0,R4
.dbline 81
;
; *stk-- = (INT8U)0x00; // R0 = 0x00
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
clr R4
mov R30,R2
mov R31,R3
std z+0,R4
.dbline 82
; *stk-- = (INT8U)0x01;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,1
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 83
; *stk-- = (INT8U)0x02;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,2
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 84
; *stk-- = (INT8U)0x03;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,3
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 85
; *stk-- = (INT8U)0x04;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,4
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 86
; *stk-- = (INT8U)0x05;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,5
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 87
; *stk-- = (INT8U)0x06;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,6
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 88
; *stk-- = (INT8U)0x07;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,7
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 89
; *stk-- = (INT8U)0x08;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,8
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 90
; *stk-- = (INT8U)0x09;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,9
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 91
; *stk-- = (INT8U)0x10;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,16
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 92
; *stk-- = (INT8U)0x11;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,17
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 93
; *stk-- = (INT8U)0x12;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,18
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 94
; *stk-- = (INT8U)0x13;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,19
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 95
; *stk-- = (INT8U)0x14;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,20
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 96
; *stk-- = (INT8U)0x15;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,21
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 97
; tmp = (INT16U)pdata;
mov R22,R12
mov R23,R13
.dbline 98
; *stk-- = (INT8U)tmp; //Simulate call to function with argument
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
mov R30,R2
mov R31,R3
std z+0,R22
.dbline 99
; *stk-- = (INT8U)(tmp >> 8);
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
mov R4,R22
mov R5,R23
mov R4,R5
clr R5
mov R30,R2
mov R31,R3
std z+0,R4
.dbline 100
; *stk-- = (INT8U)0x18;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,24
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 101
; *stk-- = (INT8U)0x19;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,25
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 102
; *stk-- = (INT8U)0x20;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,32
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 103
; *stk-- = (INT8U)0x21;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,33
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 104
; *stk-- = (INT8U)0x22;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,34
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 105
; *stk-- = (INT8U)0x23;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,35
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 106
; *stk-- = (INT8U)0x24;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,36
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 107
; *stk-- = (INT8U)0x25;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,37
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 108
; *stk-- = (INT8U)0x26;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,38
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 109
; *stk-- = (INT8U)0x27;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,39
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 111
; // the heap pointer Y=R29:R28 will not be stored
; *stk-- = (INT8U)0x30;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,48
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 112
; *stk-- = (INT8U)0x31;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,49
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 113
; *stk-- = (INT8U)0x3B;
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,59
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 114
; *stk-- = (INT8U)0x80; //SREG = Interrupts enabled
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
ldi R24,128
mov R30,R2
mov R31,R3
std z+0,R24
.dbline 116
;
; tmp = (INT16U)(stks);
mov R22,R10
mov R23,R11
.dbline 117
; *stk-- = (INT8U)(tmp >> 8);
mov R2,R20
mov R3,R21
subi R20,1
sbci R21,0
mov R4,R22
mov R5,R23
mov R4,R5
clr R5
mov R30,R2
mov R31,R3
std z+0,R4
.dbline 118
; *stk = (INT8U)(tmp);
mov R30,R20
mov R31,R21
std z+0,R22
.dbline 119
; return ((void *)stk);
mov R16,R30
mov R17,R31
.dbline -2
L1:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r stks 10 pc
.dbsym r tmp 22 i
.dbsym r stk 20 pc
.dbsym l opt 10 i
.dbsym l ptos 8 pc
.dbsym r pdata 12 pV
.dbsym r task 22 pfV
.dbend
.dbfunc e OSTaskCreateHook _OSTaskCreateHook fV
; OS_TCB -> R0,R1
.even
_OSTaskCreateHook::
.dbline 0 ; func end
ret
.dbsym l OS_TCB 0 I
.dbend
.dbfunc e OSTaskDelHook _OSTaskDelHook fV
; OS_TCB -> R0,R1
.even
_OSTaskDelHook::
.dbline 0 ; func end
ret
.dbsym l OS_TCB 0 I
.dbend
.dbfunc e OSTaskSwHook _OSTaskSwHook fV
.even
_OSTaskSwHook::
.dbline 0 ; func end
ret
.dbend
.dbfunc e OSTaskStatHook _OSTaskStatHook fV
.even
_OSTaskStatHook::
.dbline 0 ; func end
ret
.dbend
.dbfunc e OSTimeTickHook _OSTimeTickHook fV
.even
_OSTimeTickHook::
.dbline 0 ; func end
ret
.dbend
.dbfunc e TC2_Init _TC2_Init fV
.even
_TC2_Init::
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 40
jmp _OSTickISR
.area text(rom, con, rel)
.dbfile F:\开发工具\AVR开发工具\RTOSIC~1\source\os_cpu_c.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -