⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_cpu_a.asm

📁 nec平台下的ucos版本
💻 ASM
字号:
;OS_CPU_A.ASM                 78K/0 Series 

          VECT20  CSEG	AT    0020H
_@vect20:         DW	_OS_Timer

          VECT3E  CSEG	AT    003EH
_@vect3e:         DW	_OSCtxSw

                  PUBLIC   _OSStartHighRdy
                  EXTRN    _OSTaskSwHook
                  EXTRN    _OSRunning
                  EXTRN    _OSTCBHighRdy
                  PUBLIC   _OSCtxSw
                  EXTRN    _OSTCBCur
                  EXTRN    _OSPrioHighRdy
                  EXTRN    _OSPrioCur
                  PUBLIC   _OSIntCtxSw
                  EXTRN    _OSIntNesting
                  EXTRN    _OSTimeTick
                  EXTRN    _OSIntExit
                  PUBLIC   _OSCPUSaveSR
                  PUBLIC   _OSCPURestoreSR
                  PUBLIC   _OS_TASK_SW
                  
                  
                  
          PORTS   CSEG 

_OSStartHighRdy:
                  CALL    !_OSTaskSwHook
                  
	              MOV	  A,           #01H	              ;OSRunning = 1;
	              MOV	  !_OSRunning,  A
                  
                  MOVW    AX, !_OSTCBHighRdy
                  MOVW    HL, AX
                  MOV     A, [HL]
                  MOV     X,  A
                  MOV     A, [HL+1H]
                  MOVW    SP, AX
                  
                  POP     RP3
                  POP     RP2
                  POP     RP1
                  POP     RP0
                  
                  RETI

_OSCtxSw:
                  
                  PUSH    RP0
                  PUSH    RP1
                  PUSH    RP2
                  PUSH    RP3
                             
                  MOVW    AX, !_OSTCBCur                ; *OSTCBCur = SP                                   */
                  MOVW    HL, AX
                  MOVW    AX, SP
                  XCH     A,  X
                  MOV     [HL],A
                  XCH     A, X
                  MOV     [HL+1H],A
                  
                  CALL    !_OSTaskSwHook
                  
                  MOV     A, !_OSPrioHighRdy            ;OSPrioCur = OSPrioHighRdy
                  MOV     !_OSPrioCur, A
                  MOVW    AX, !_OSTCBHighRdy            ;OSTCBCur  = OSTCBHighRdy
                  MOVW    !_OSTCBCur, AX
                  MOVW    AX, !_OSTCBHighRdy            ;SP = OSTCBHighRdy->OSTCBStkPtr
                  MOVW    HL, AX
                  MOV     A, [HL]
                  MOV     X,  A 
                  MOV     A, [HL+1H]
                  MOVW    SP, AX
                  
                  POP     RP3
                  POP     RP2
                  POP     RP1
                  POP     RP0
                  
                  RETI

_OSIntCtxSw:
                  MOVW    AX, SP
                  ADDW    AX, #6
                  MOVW    SP, AX
                  
                  MOVW    AX, !_OSTCBCur                ; *OSTCBCur = SP
                  MOVW    HL, AX
                  MOVW    AX, SP
                  XCH     A,  X
                  MOV     [HL],A
                  XCH     A,  X
                  MOV     [HL+1H],A
                  
                  CALL    !_OSTaskSwHook
                  
                  MOV     A, !_OSPrioHighRdy            ;OSPrioCur = OSPrioHighRdy
                  MOV     !_OSPrioCur, A
                  MOVW    AX, !_OSTCBHighRdy            ;OSTCBCur  = OSTCBHighRdy
                  MOVW    !_OSTCBCur, AX
                  MOVW    AX, !_OSTCBHighRdy            ;SP = OSTCBHighRdy->OSTCBStkPtr
                  MOVW    HL, AX
                  MOV     A, [HL]
                  MOV     X,  A 
                  MOV     A, [HL+1H]
                  MOVW    SP, AX
                  
                  POP     RP3
                  POP     RP2
                  POP     RP1
                  POP     RP0
                  
                  RETI

_OS_Timer:
                  PUSH    RP0
                  PUSH    RP1
                  PUSH    RP2
                  PUSH    RP3
                  
                  MOV     A, !_OSIntNesting
                  ADD     A, #1
                  MOV     !_OSIntNesting, A
                  
                  CALL    !_OSTimeTick
                  
                  CALL    !_OSIntExit
                  
                  POP     RP3
                  POP     RP2
                  POP     RP1
                  POP     RP0
                  
                  RETI

_OSCPUSaveSR:
                  MOV     A, PSW
                  MOV     C, A
                  DI
                  RET

_OSCPURestoreSR:
                  MOV     A, X
                  MOV     PSW, A
                  RET

_OS_TASK_SW:
                  BRK
                  RET

                  END


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -