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

📄 os_cpu.h

📁 在M16上动行的Small RTOS
💻 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 + -