📄 os_cpu.h
字号:
#ifndef __OS_CPU_H__
#define __OS_CPU_H__
#define EN_SP2 0 /* 禁止(0)或允许(1)软非屏蔽中断 */
#define EN_OSStkChk 1
#define Sp2Space 32
#define OS_STACK_SIZE 600
#define OS_CONTEXT_SWITCH_METHOD 1
/*
0:任务切换保护全部32个寄存器
1:任务切换保护其中20个寄存器
*/
#if OS_CONTEXT_SWITCH_METHOD==0
#define OS_TASK_STACK_INIT_SIZE 36
#endif
#if OS_CONTEXT_SWITCH_METHOD==1
#define OS_TASK_STACK_INIT_SIZE 24
#endif
//#ifdef __c
#ifndef OS_CPU_A //只在C中有效
#define HIGH_BYTE 1 /* uint16的高位字节 */
#define LOW_BYTE 0 /* uint16的低位字节 */
typedef unsigned char uint8; /* 定义可移植的无符号8位整数关键字 */
typedef signed char int8; /* 定义可移植的有符号8位整数关键字 */
typedef unsigned int uint16; /* 定义可移植的无符号16位整数关键字 */
typedef signed int int16; /* 定义可移植的有符号16位整数关键字 */
typedef unsigned long uint32; /* 定义可移植的无符号32位整数关键字 */
typedef signed long int32;
#ifndef NULL
#define NULL 0
#endif
#if EN_OS_INT_ENTER >0
#define OS_INT_ENTER() {OSIntNesting++;sei();}
#endif
#define OS_ENTER_CRITICAL() {cli();Os_Enter_Sum++;} /* 禁止中断 */
//#define OS_ENTER_CRITICAL() {cli();TIMSK&=~_BV(TOIE0);Os_Enter_Sum++;sei();}
#define OS_EXIT_CRITICAL() {if (--Os_Enter_Sum==0) {sei();}} /* 允许中断 */
//#define OS_EXIT_CRITICAL() {if (--Os_Enter_Sum==0) {TIMSK|=_BV(TOIE0);sei();}}
#define ret() __asm__ __volatile__ ("ret")
#define nop() __asm__ __volatile__ ("nop")
#define outp(A,B) B = (A)
#define inp(A) A
//#define outp(A,B) A=B
#define cbi(P, B) P &= ~BV(B)
#define sbi(P, B) P |= BV(B)
#define HIGH_BYTE 1 /* uint16的高位字节 */
#define LOW_BYTE 0 /* uint16的低位字节 */
#define OS_TASK_SW() OSCtxSw() /* 任务切换函数 */
extern void OSCtxSw(void);
//extern void OSIntCtxSw(void);
#define OSIntCtxSw() OSCtxSw()
#ifndef IN_OS_CPU_C
extern void OSStart(void);
extern void OSTickISR (void);
#endif
#if EN_OSStkChk>0
extern uint16 OS_Stk_Null;
extern uint16 OS_Stk_Min_Null;
#endif
#if EN_SP2 >0
extern uint8 SP2[];
#endif
#endif //以上只在C中有效
//#ifndef __c
#ifdef OS_CPU_A //汇编OS_CPU_A.s中有效
SREG=0x3f
SPH=0x3e
SPL=0x3d
TIMSK=0X39
.global OSCtxSw
.extern OSTaskID
.extern OSNextTaskID
.extern Os_Enter_Sum
.extern OSTaskStackBottom
.macro OS_SET_INT
; in r24,TIMSK
; ori r24,0x01
; out TIMSK,r24
mov r24,r0
ori r24,0x80
mov r0,r24
.endm
#if OS_CONTEXT_SWITCH_METHOD==0
.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
.endm
.macro POPRS
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
#endif
#if OS_CONTEXT_SWITCH_METHOD==1
.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 r28
push r29
.endm
.macro POPRS
pop r29
pop r28
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
#endif
#endif
//#endif //__c
#endif //__OS_CPU_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -