📄 os_cpu.s
字号:
;************************************************
;
; MX RTOS AVR 嵌入式操作系统 V1.10 汇编 内核文件
; 作者:罗国祥 DEF edisonluo@sina.com
; 本人收回本内核所有权
; 2004年3月1日
;
;************************************************
;插入声明文件包
#include <avr/io.h>
#include <avr/signal.h>
#define OS_SET_I SEI ;开总中断
#define OS_CLEAR_I CLI ;关总中断
.global OS_GET_TO_TASK_INT ;汇编函数跳入下一条线程(中断模式)
.global OS_GET_TO_TASK_DISP ;汇编函数跳入下一条线程(普通模式)
.global START_TICK_POINT ;汇编函数第一次启动时跳入调度入口点
.global OS_DISP_TIME_P ;汇编线程等待处理过程
.extern OS_ATTEMPER ;C函数获取下一条线程
.extern OS_GETTO_NEXT_TASK_INT ;C函数进入下一条线程(中断模式)
.extern OS_GETTO_NEXT_TASK_DISP ;C函数进入下一条线程(普通模式)
.extern OS_SAVE_TASK_SP ;C函数保存当前线程SP指针
.extern OS_DLY_TIME_DEC ;C函数线程等待时间处理函数
.extern OS_RELOAD_TICK ;重新初始化系统时钟
;保存寄存器宏
.macro PUSHRS
PUSH R0
PUSH R1
PUSH R2
PUSH R3
PUSH R4
PUSH R5
PUSH R6
PUSH R7
PUSH R8
PUSH R9
PUSH R10
PUSH R11
PUSH R12
PUSH R13
PUSH R14
PUSH R15
PUSH R16
PUSH R17
PUSH R18
PUSH R19
PUSH R20
PUSH R21
PUSH R22
PUSH R23
PUSH R24
PUSH R25
PUSH R26
PUSH R27
PUSH R28
PUSH R29
PUSH R30
PUSH R31
IN R16,0X3F ;保存SREG寄存器
PUSH R16
.endm
;恢复寄存器宏
.macro POPRS
POP R16 ;恢复SREG寄存器
OUT 0X3F,R16
POP R31
POP R30
POP R29
POP R28
POP R27
POP R26
POP R25
POP R24
POP R23
POP R22
POP R21
POP R20
POP R19
POP R18
POP R17
POP R16
POP R15
POP R14
POP R13
POP R12
POP R11
POP R10
POP R9
POP R8
POP R7
POP R6
POP R5
POP R4
POP R3
POP R2
POP R1
POP R0
.endm
;汇编函数跳入下一条线程
OS_GET_TO_TASK_INT:
POPRS
OS_SET_I ;开中断
RETI
;汇编函数跳入下一条线程
OS_GET_TO_TASK_DISP:
POPRS
OS_SET_I ;开中断
RET
;汇编线程等待处理过程
OS_DISP_TIME_P: ;线程延时处理
OS_CLEAR_I ;关中断
PUSHRS ;保存寄存器
IN R25,0X3E ;传递SPH
IN R24,0X3D ;传递SPL
RCALL OS_SAVE_TASK_SP ;调用C保存SP
RCALL OS_ATTEMPER ;进入C调度
RJMP OS_GETTO_NEXT_TASK_DISP ;进入C指向函数处理过程
;第一次启动入口点
START_TICK_POINT:
RCALL OS_ATTEMPER; ;进入C调度
RJMP OS_GETTO_NEXT_TASK_DISP ;进入C指向函数处理过程
;中断入口
.global SIG_OVERFLOW0 ;中断入口点 用户根据情况修改
SIG_OVERFLOW0: ;中断入口点 用户根据情况修改
;SEI
OS_CLEAR_I ;关中断
PUSHRS ;保存寄存器
IN R25,0X3E ;传递SPH
IN R24,0X3D ;传递SPL
RCALL OS_SAVE_TASK_SP ;调用C保存SP
RCALL OS_RELOAD_TICK ;C函数重新初始化系统时钟
RCALL OS_DLY_TIME_DEC ;时钟节拍处理
RCALL OS_ATTEMPER; ;进入C调度
RJMP OS_GETTO_NEXT_TASK_INT ;进入C指向函数处理过程
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -