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

📄 os_cpu_c.c

📁 MC68HC908GR32的uCOS-II移值接口,codewarrior环境
💻 C
字号:
/*
*********************************************************************************************************
*                                               uC/OS-II
*                                         The Real-Time Kernel
*
*                                         6808 Specific code
*
* File : OS_CPU_C.C
* By   : Kerby Suhre
*********************************************************************************************************
*/
#define  OS_CPU_GLOBALS
#include "includes.h"


unsigned int *OSTaskStkInit (void (*task)(void *pd), void *pdata, unsigned int *ptos, INT16U opt)
{
    INT16U 	 *stk;
    opt    = opt;
    pdata  = pdata;							
    stk    = (INT16U *)ptos;               	
    *--stk = (INT16U)(task);				
    *--stk = (INT16U)(0x00);		   		
    *--stk = (INT16U)(0x00);		   		
    return ((void *)stk);
}

#if OS_CPU_HOOKS_EN

#if OS_VERSION > 203
void OSInitHookBegin (void)
{
}
#endif

#if OS_VERSION > 203
void OSInitHookEnd (void)
{
}
#endif

void OSTaskCreateHook (OS_TCB *ptcb)
{
	ptcb = ptcb;
}

void OSTaskDelHook (OS_TCB *ptcb)
{
	
		ptcb = ptcb;

}

void OSTaskSwHook (void)
{
}

void OSTaskStatHook (void)
{
}

#if OS_VERSION > 203
void OSTCBInitHook (OS_TCB *ptcb)
{
	ptcb = ptcb;
}
#endif

void OSTimeTickHook (void)
{
}

#if OS_VERSION >= 205
void OSTaskIdleHook (void)
{
}

#endif
#endif

/****************************************************选择已经就绪的最高优先级任务运行******************************************
*******************************************************************************************************************************/
void OSStartHighRdy(void)
{
      #if OS_CPU_HOOKS_EN > 0
      OSTaskSwHook();//调用HOOK函数
      #endif
      asm
      {
            lda OSRunning //设置OSRunning变量,标志进入多任务模式
            inca
            sta OSRunning
            ldx OSTCBHighRdy //取得最高优先级就绪任务TCB地址
            stx OSTCBCur //保存到OSTCBCur中
            pshx
            ldx OSTCBHighRdy:1//保存地址的第二个字节
            stx OSTCBCur:1
            pulh
            lda 0,X //载放就绪任务堆栈指针
            psha
            ldx 1,X //载入就绪任务堆栈指针第二个字节
            pulh
            txs
            pulh //恢复索引寄存器内容
            rti //中断返回,运行新任务
      }
}
/******************************************中断级任务调度函数**********************************************************************
该函数为一个中断服务函数,由SWI中断产生
***********************************************************************************************************************************/
interrupt void OSCtxSw(void)
{
      asm
      {
      	tsx
      	pshx
      	pshh
            ldx    OSTCBCur                   
      	pshx
            ldx    OSTCBCur:1                
      	pulh
      	pula
            sta    0,x                         
      	pula
      	sta	   1,x
      };
      #if OS_CPU_HOOKS_EN > 0
            OSTaskSwHook(); //调用HOOK
      #endif
      asm
      {
            lda    OSPrioHighRdy              
            sta    OSPrioCur                                                
            ldx    OSTCBHighRdy               
            stx    OSTCBCur
      	pshx
            ldx    OSTCBHighRdy:1
            stx    OSTCBCur:1
      	pulh
            lda    0,x                         
      	psha
      	ldx	   1,x
      	pulh
      	txs
      } 
}
/*****************************************************时钟节拍中断服务程序*********************************************************
*********************************************************************************************************************************/
interrupt void OSTickISR(void)
{ 
      TBCR_TACK=1;//清适时中断标志
      OSIntEnter(); /*标志进入中断*/
      if(OSIntNesting==1) //保存堆栈指针
      {
            asm
            {
            	tsx
            	pshx
            	pshh
                  ldx    OSTCBCur                   
            	pshx
                  ldx    OSTCBCur:1                
            	pulh
            	pula
                  sta    0,x                         
            	pula
            	sta	   1,x
            }; 
      };
      OSTimeTick(); /*调用时钟节拍函数*/
      OSIntExit();/*标志退出中断*/
}
/************************************************************中断级任务切换函数*******************************************************
*************************************************************************************************************************************/
void OSIntCtxSw(void)
{
      #if OS_CPU_HOOKS_EN > 0
            OSTaskSwHook();  
      #endif
      asm
      {
            lda    OSPrioHighRdy              
            sta    OSPrioCur                                                
            ldx    OSTCBHighRdy               
            stx    OSTCBCur
      	pshx
            ldx    OSTCBHighRdy:1
            stx    OSTCBCur:1
      	pulh
            lda    0,x                         
      	psha
      	ldx	   1,x
      	pulh
      	txs
      	pulh							   
            rti 
      }
}
/*********************************************************************************************************************************
用户自定义的中断服务程序的结构形式如下,在其中插入用户自定义的代码后,将函数添入中断向量表的相应位置即可
**********************************************************************************************************************************/
interrupt void USER_ISR(void)
{ 
      OSIntEnter(); /*标志进入中断*/
      if(OSIntNesting==1) //保存堆栈指针
        {
            asm
            {
            	tsx
            	pshx
            	pshh
                  ldx    OSTCBCur                   
            	pshx
                  ldx    OSTCBCur:1                
            	pulh
            	pula
                  sta    0,x                         
            	pula
            	sta	   1,x
            };
        };
      //=====================插入用户自定义代码===================================
      
      //===========================================================================
      OSIntExit();/*标志退出中断*/
}

⌨️ 快捷键说明

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