?? osdualtask.asm
字號:
;***********************************************************************************
; 6502 Dual Task Os
;Author: ZK
;Date: 2007-8-10 15:54 Update
;Mcu: Sunplus series
;Detail:
; This mini kernel support 2 task switch,each task provide
; stack space: (include interrupt save address,psw and ac,x,y)
; (0FFH -> C_Task0Bom) Task0 stack
; (C_Task0Bom -> 080H Task1) stack1 & all ram define
;NOTE: RAM define cannot location 0FFH->C_Task0Bom(Task0 stack area)
;***********************************************************************************
;%OsTaskLock ;Lock current task
;%OsTaskFree ;Release lock task
;%OsInitDualTask ;Inital Multi-task,and jmp to Task 0
;%OsMultiTaskIntServer ;Place Interrupt,per run once will swith next task,
;need set timer obtain switch frequency
;-----------------------------------------------------------------------------------
; Mutil-Task Kernel RAM
.PAGE0
R_MtCurrentTask .ds 1
R_MtStackPoint .ds 2
R_MtFlag .ds 1
B_MtTaskLock = 0x01
;-------------------------------
C_MaxTask = 2
C_Task0Bom = 0E9H
;===================================================================================
.CODE
%OsInitDualTask: .MACRO
sei
lda #0
sta R_MtCurrentTask
lda #0FFH-6
sta R_MtStackPoint
lda #C_Task0Bom-1-6
sta R_MtStackPoint+1
lda #>Main_Task0
sta 0FFH
lda #<Main_Task0
sta 0FEH
lda #>Main_Task1
sta C_Task0Bom-1
lda #<Main_Task1
sta C_Task0Bom-2
ldx #0FFH
txs
;jsr F_OsTaskFree
cli
jmp Main_Task0
.ENDM
;------------------------------------------------------------------------------------
%OsDualTaskIntServer: .MACRO
lda R_MtFlag
and #B_MtTaskLock
bne MT_End
MT_Switch:
ldy R_MtCurrentTask
tsx
stx R_MtStackPoint,y
iny
cpy #C_MaxTask
bcc ?Next
ldy #0
?Next:
sty R_MtCurrentTask
ldx R_MtStackPoint,y
txs
MT_End:
.ENDM
;------------------------------------------------------------------------------------
;%OsTaskLock: .MACRO
F_OsTaskLock:
sei
lda R_MtFlag
ora #B_MtTaskLock
sta R_MtFlag
cli
rts
; .ENDM
;%OsTaskFree: .MACRO
F_OsTaskFree:
sei
lda R_MtFlag
and #!B_MtTaskLock
sta R_MtFlag
cli
rts
; .ENDM
;===================================================================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -