?? 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 + -