📄 ucos_ii.s
字号:
sts _OSTCBFreeList+1,R3
sts _OSTCBFreeList,R2
;
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
;
movw R30,R10
std z+1,R19
std z+0,R18
;
std z+9,R16
;
clr R2
movw R30,R10
std z+8,R2
;
clr R3
movw R30,R10
std z+7,R3
std z+6,R2
;
;
;
;
;
;
;
;
mov R2,R16
lsr R2
lsr R2
lsr R2
movw R30,R10
std z+11,R2
;
ldi R24,<_OSMapTbl
ldi R25,>_OSMapTbl
movw R30,R10
ldd R30,z+11
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
movw R26,R10
adiw R26,13
st x,R30
;
mov R24,R16
andi R24,7
movw R30,R10
std z+10,R24
;
ldi R24,<_OSMapTbl
ldi R25,>_OSMapTbl
movw R30,R10
ldd R30,z+10
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
movw R26,R10
adiw R26,12
st x,R30
;
;
st -y,r16
in r16,0x3F
cli
push r16
ld r16,y+
;
ldi R24,2
mul R24,R16
movw R30,R0
ldi R24,<_OSTCBPrioTbl
ldi R25,>_OSTCBPrioTbl
add R30,R24
adc R31,R25
std z+1,R11
std z+0,R10
;
lds R2,_OSTCBList
lds R3,_OSTCBList+1
movw R30,R10
std z+3,R3
std z+2,R2
;
clr R2
clr R3
movw R30,R10
std z+5,R3
std z+4,R2
;
lds R2,_OSTCBList
lds R3,_OSTCBList+1
tst R2
brne X5
tst R3
breq L45
X5:
;
lds R30,_OSTCBList
lds R31,_OSTCBList+1
std z+5,R11
std z+4,R10
;
L45:
;
sts _OSTCBList+1,R11
sts _OSTCBList,R10
;
movw R30,R10
ldd R2,z+13
lds R3,_OSRdyGrp
or R3,R2
sts _OSRdyGrp,R3
;
ldi R24,<_OSRdyTbl
ldi R25,>_OSRdyTbl
movw R30,R10
ldd R2,z+11
clr R3
add R2,R24
adc R3,R25
movw R30,R10
ldd R4,z+12
movw R30,R2
ldd R5,z+0
or R5,R4
std z+0,R5
;
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
;
clr R16
xjmp L42
L43:
;
;
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
;
ldi R16,70
L42:
xcall pop_gset3x
.dbline 0 ; func end
ret
; ptcb -> R16,R17
.even
_OSTimeTick::
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
lds R16,_OSTCBList
lds R17,_OSTCBList+1
xjmp L49
L48:
;
;
st -y,r16
in r16,0x3F
cli
push r16
ld r16,y+
;
movw R30,R16
ldd R2,z+6
ldd R3,z+7
tst R2
brne X7
tst R3
brne X9
xjmp L51
X9:
X7:
;
movw R24,R16
adiw R24,6
movw R30,R24
ldd R24,z+0
ldd R25,z+1
sbiw R24,1
movw R4,R24
std z+1,R5
std z+0,R4
cpi R24,0
cpc R24,R25
breq X10
xjmp L53
X10:
X8:
;
movw R30,R16
ldd R2,z+8
sbrc R2,3
rjmp L55
;
movw R30,R16
ldd R2,z+13
lds R3,_OSRdyGrp
or R3,R2
sts _OSRdyGrp,R3
;
ldi R24,<_OSRdyTbl
ldi R25,>_OSRdyTbl
movw R30,R16
ldd R2,z+11
clr R3
add R2,R24
adc R3,R25
movw R30,R16
ldd R4,z+12
movw R30,R2
ldd R5,z+0
or R5,R4
std z+0,R5
xjmp L56
L55:
;
;
ldi R24,1
ldi R25,0
movw R30,R16
std z+7,R25
std z+6,R24
;
L56:
;
L53:
;
L51:
movw R30,R16
ldd R16,z+2
ldd R17,z+3
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
L49:
movw R30,R16
ldd R24,z+9
cpi R24,15
breq X11
xjmp L48
X11:
;
;
;
;
st -y,r16
in r16,0x3F
cli
push r16
ld r16,y+
;
ldi R24,1
ldi R25,0
ldi R26,0
ldi R27,0
lds R4,_OSTime+2
lds R5,_OSTime+2+1
lds R2,_OSTime
lds R3,_OSTime+1
add R2,R24
adc R3,R25
adc R4,R26
adc R5,R27
sts _OSTime+1,R3
sts _OSTime,R2
sts _OSTime+2+1,R5
sts _OSTime+2,R4
;
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
L47:
.dbline 0 ; func end
ret
; stks -> R14,R15
; tmp -> R12,R13
; stk -> R10,R11
; opt -> y+8
; ptos -> y+6
; pdata -> R18,R19
; task -> R16,R17
.even
_OSTaskStkInit::
xcall push_gset5x
ldd R10,y+6
ldd R11,y+7
movw R24,R10
subi R24,68
sbci R25,0
movw R30,R16
lpm R12,Z+
lpm R13,Z
movw R2,R24
sbiw R24,1
movw R30,R2
std z+0,R12
movw R2,R24
sbiw R24,1
movw R14,R24
movw R4,R12
mov R4,R5
clr R5
movw R30,R2
std z+0,R4
movw R2,R10
movw R24,R2
sbiw R24,1
clr R4
movw R30,R2
std z+0,R4
movw R2,R24
sbiw R24,1
movw R10,R24
ldi R24,1
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,2
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,3
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,4
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,5
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,6
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,7
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,8
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,9
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,16
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,17
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,18
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,19
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,20
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,21
movw R30,R2
std z+0,R24
movw R12,R18
movw R2,R10
movw R24,R2
sbiw R24,1
movw R30,R2
std z+0,R12
movw R2,R24
sbiw R24,1
movw R4,R12
mov R4,R5
clr R5
movw R30,R2
std z+0,R4
movw R2,R24
sbiw R24,1
movw R10,R24
ldi R24,24
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,25
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,32
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,33
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,34
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,35
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,36
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,37
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,38
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,39
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,48
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,49
movw R30,R2
std z+0,R24
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
ldi R24,128
movw R30,R2
std z+0,R24
movw R12,R14
movw R2,R10
movw R24,R2
sbiw R24,1
movw R10,R24
movw R4,R12
mov R4,R5
clr R5
movw R30,R2
std z+0,R4
movw R30,R24
std z+0,R12
movw R16,R24
L57:
xcall pop_gset5x
.dbline 0 ; func end
ret
; psp -> R10,R11
; err -> R10
; prio -> R12
; ptos -> y+16
; pdata -> R14,R15
; task -> R10,R11
.even
_OSTaskCreate::
xcall push_gset5x
movw R14,R18
movw R10,R16
sbiw R28,10
ldd R12,y+18
ldi R24,15
cp R24,R12
brsh L59
ldi R16,42
xjmp L58
L59:
st -y,r16
in r16,0x3F
cli
push r16
ld r16,y+
ldi R24,2
mul R24,R12
movw R30,R0
ldi R24,<_OSTCBPrioTbl
ldi R25,>_OSTCBPrioTbl
add R30,R24
adc R31,R25
ldd R2,z+0
ldd R3,z+1
tst R2
breq X13
xjmp L61
X13:
tst R3
breq X14
xjmp L61
X14:
X12:
ldi R24,2
mul R24,R12
movw R30,R0
ldi R24,<_OSTCBPrioTbl
ldi R25,>_OSTCBPrioTbl
add R30,R24
adc R31,R25
ldi R24,1
ldi R25,0
std z+1,R25
std z+0,R24
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
clr R2
clr R3
std y+3,R3
std y+2,R2
ldd R0,y+16
ldd R1,y+17
std y+1,R1
std y+0,R0
movw R18,R14
movw R16,R10
xcall _OSTaskStkInit
movw R10,R16
clr R2
clr R3
std y+9,R3
std y+8,R2
std y+7,R3
std y+6,R2
std y+5,R3
std y+4,R2
std y+3,R3
std y+2,R2
std y+1,R3
std y+0,R2
movw R18,R10
mov R16,R12
xcall _OSTCBInit
mov R10,R16
tst R16
brne L63
st -y,r16
in r16,0x3F
cli
push r16
ld r16,y+
lds R24,_OSTaskCtr
subi R24,255 ; addi 1
sts _OSTaskCtr,R24
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
lds R2,_OSRunning
tst R2
breq L64
xcall _OSSched
xjmp L64
L63:
st -y,r16
in r16,0x3F
cli
push r16
ld r16,y+
ldi R24,2
mul R24,R12
movw R30,R0
ldi R24,<_OSTCBPrioTbl
ldi R25,>_OSTCBPrioTbl
add R30,R24
adc R31,R25
clr R2
clr R3
std z+1,R3
std z+0,R2
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
L64:
mov R16,R10
xjmp L58
L61:
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
ldi R16,40
L58:
adiw R28,10
xcall pop_gset5x
.dbline 0 ; func end
ret
; ticks -> R10,R11
.even
_OSTimeDly::
xcall push_gset3x
movw R10,R16
tst R10
brne X15
tst R11
brne X16
xjmp L68
X16:
X15:
st -y,r16
in r16,0x3F
cli
push r16
ld r16,y+
ldi R24,<_OSRdyTbl
ldi R25,>_OSRdyTbl
lds R30,_OSTCBCur
lds R31,_OSTCBCur+1
ldd R2,z+11
clr R3
add R2,R24
adc R3,R25
lds R30,_OSTCBCur
lds R31,_OSTCBCur+1
ldd R4,z+12
com R4
movw R30,R2
ldd R5,z+0
and R5,R4
mov R4,R5
std z+0,R4
tst R5
brne L70
lds R30,_OSTCBCur
lds R31,_OSTCBCur+1
ldd R2,z+13
com R2
lds R3,_OSRdyGrp
and R3,R2
sts _OSRdyGrp,R3
L70:
lds R30,_OSTCBCur
lds R31,_OSTCBCur+1
std z+7,R11
std z+6,R10
st -y,r16
pop r16
out 0x3F,r16
ld r16,y+
xcall _OSSched
L68:
L67:
xcall pop_gset3x
.dbline 0 ; func end
ret
; c -> R16
.even
_Putchar::
L73:
L74:
sbis 0xb,5
rjmp L73
sbi 0x12,2
out 0xc,R16
L76:
L77:
sbis 0xb,6
rjmp L76
sbi 0xb,6
cbi 0x12,2
L72:
.dbline 0 ; func end
ret
.even
_Getchar::
cbi 0x12,2
nop
L80:
L81:
sbis 0xb,7
rjmp L80
in R16,0xc
L79:
.dbline 0 ; func end
ret
; s -> R10,R11
.even
_Prints::
xcall push_gset3x
movw R10,R16
xjmp L85
L84:
movw R30,R10
ldd R16,z+0
xcall _Putchar
movw R24,R10
adiw R24,1
movw R10,R24
L85:
movw R30,R10
ldd R2,z+0
tst R2
brne L84
ldi R16,10
xcall _Putchar
ldi R16,13
xcall _Putchar
ldi R16,1
L83:
xcall pop_gset3x
.dbline 0 ; func end
ret
; i -> R10
; ch -> R12
.even
_Puthexbyte::
xcall push_gset4x
mov R12,R16
mov R24,R12
swap R24
andi R24,#0x0F
mov R10,R24
ldi R24,9
cp R24,R10
brlo L88
mov R16,R10
subi R16,208 ; addi 48
xcall _Putchar
xjmp L89
L88:
mov R16,R10
subi R16,201 ; addi 55
xcall _Putchar
L89:
mov R24,R12
andi R24,15
mov R10,R24
ldi R24,9
cp R24,R10
brlo L90
mov R16,R10
subi R16,208 ; addi 48
xcall _Putchar
xjmp L91
L90:
mov R16,R10
subi R16,201 ; addi 55
xcall _Putchar
L91:
L87:
xcall pop_gset4x
.dbline 0 ; func end
ret
; s -> R10,R11
.even
_Putstr::
xcall push_gset3x
movw R10,R16
xjmp L94
L93:
movw R30,R10
ldd R16,z+0
xcall _Putchar
movw R24,R10
adiw R24,1
movw R10,R24
L94:
movw R30,R10
ldd R2,z+0
tst R2
brne L93
L92:
xcall pop_gset3x
.dbline 0 ; func end
ret
.even
_Uart_init::
ldi R24,152
out 0xa,R24
ldi R24,26
out 0x9,R24
clr R2
out 0x20,R2
ldi R24,134
out 0x20,R24
cbi 0x12,2
L96:
.dbline 0 ; func end
ret
.area bss(ram, con, rel)
_OSTCBTbl:
.blkb 84
_OSTaskIdleStk:
.blkb 100
_OSIntExitY:
.blkb 1
_OSTime::
.blkb 4
_OSTCBPrioTbl::
.blkb 32
_OSTCBList::
.blkb 2
_OSTCBHighRdy::
.blkb 2
_OSTCBFreeList::
.blkb 2
_OSTCBCur::
.blkb 2
_OSTaskCtr::
.blkb 1
_OSRunning::
.blkb 1
_OSRdyTbl::
.blkb 2
_OSRdyGrp::
.blkb 1
_OSPrioHighRdy::
.blkb 1
_OSPrioCur::
.blkb 1
_OSLockNesting::
.blkb 1
_OSIntNesting::
.blkb 1
_OSIdleCtr::
.blkb 4
_OSEventTbl::
.blkb 16
_OSEventFreeList::
.blkb 2
_OSCtxSwCtr::
.blkb 4
.area func_lit
PL_OSTaskIdle: .word `_OSTaskIdle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -