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

📄 intsys.c

📁 最近在國外網站抓到的作業系統 以Arm為基礎去開發的
💻 C
字号:
//*************************************************************************
//
//  Copyright (C) SEIKO EPSON CORP. 1997
//  All Rights Reserved
//
//  Filename : intsys.c
//  Function : Interrupt Handler system call functions
//  Revision :
//          2001/03/08  Y.Taka      start
//
//*************************************************************************
#include "ros33.h"
#include "internal.h"

//****************************************************************************
//***    3.2 Task-Dependent Synchronization Functions                      ***
//****************************************************************************

//********************************************************************
//  Wakeup Other Task from interrupt handler
//  [Parameters]
//      ID  tskid   TaskID
//  [Return Parameters]
//      ER  ercd    ErrorCode
//  [implementation dependent]
//      Allowable number for the wakeup request queuing 
//      count (wupcnt) is 1.
//********************************************************************
ER iwup_tsk
    (
    ID  tskid
    )
{
#if 0 //gfdmodified
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("xcall wup_tsk");

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
    #endif
}


//****************************************************************************
//***    3.3 Synchronization and Communication Functions                   ***
//****************************************************************************


//********************************************************************
//  Set Eventflag from interrupt handler
//  [Parameters]
//      ID      flgid   EventFlagID
//      UINT    setptn  SetBitPattern
//  [Return Parameters]
//      ER      ercd    ErrorCode
//********************************************************************
ER iset_flg
    (
    ID      flgid,
    UINT    setptn
    )
{
#if 0
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("xcall set_flg");

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
#endif
}


//********************************************************************
//  Send Message to Mailbox from interrupt handler
//  [Parameters]
//      ID      mbxid   MailboxID
//      T_MSG   *pk_msg Start Address of Message Packet
//  [Return Parameters]
//      ER      ercd    ErrorCode
//********************************************************************
ER isnd_msg
    (
    ID      mbxid,
    T_MSG*  pk_msg
    )
{
#if 0//gfdmodified
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("xcall snd_msg");

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
#endif
}

//********************************************************************
//  Signal Semaphore from interrupt handler
//  [Parameters]
//      ID  semid   SemaphoreID
//  [Return Parameters]
//      ER  ercd    ErrorCode
//********************************************************************
ER isig_sem
    (
    ID  semid
    )
{
#if 0//gfdmodified
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("xcall sig_sem");

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
#endif
}


//********************************************************************
//  Send Message to MessageBuffer from interrupt handler
//  [Parameters]
//      ID      mbfid   MessageBufferID
//      INT     msgsz   SendMessageSize (in bytes)
//      VP      msg     Start Address of Send Message Packet
//      TMO     tmout   Timeout
//  [Return Parameters]
//      ER      ercd    ErrorCode
//********************************************************************
ER ipsnd_mbf
    (
    ID      mbfid,
    VP      msg,
    INT     msgsz
    )
{
#if 0 //gfdmodified
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("ld.w %r15, 0");  // tsnd_mbf(mbfid, msg, msgsz, TMO_POL)
    asm("xcall tsnd_mbf");

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
#endif
}

//********************************************************************
//  Get Variable-size Memory Block from interrupt handler
//  [Parameters]
//      VP     *p_blk   Start Address of Memory Block
//      ID      mplid   Variable-size MemoryPoolID
//      INT     blksz   Get Block Size(in bytes)
//  [Return Parameters]
//      ER      ercd    ErrorCode
//********************************************************************
ER ipget_blk
    (
    VP     *p_blk,
    ID      mplid,
    INT     blksz
    )
{
#if 0//gfdmodified    
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("ld.w %r15, 0");  // tget_blk(p_blk,mplid, blksz, TMO_POL)
    asm("xcall tget_blk");

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
#endif
}

//********************************************************************
//  Release Variable-size Memory Block from interrupt handler
//  [Parameters]
//      ID      mplid   Variable-size MemorypoolID
//      VP      blk     Start Address of Memory Block
//  [Return Parameters]
//      ER      ercd    ErrorCode
//********************************************************************
ER irel_blk
    (
    ID      mplid, 
    VP      blk
    )
{
#if 0 //gfdmodified
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("xcall rel_blk");   // rel_blk(mplid, blk)

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
    #endif
}

//********************************************************************
//  Get Fixed-size Memory Block from interrupt handler
//  [Parameters]
//      VP     *p_blf   Start Address of Memory Block
//      ID      mpfid   Fixed-sizs MemoryPoolID
//  [Return Parameters]
//      ER      ercd    ErrorCode
//********************************************************************
ER ipget_blf
    (
    VP     *p_blf,
    ID      mpfid
    )
{
#if 0 //gfdmodified
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("ld.w %r14, 0");  // tget_blf(p_blf,mpfid, TMO_POL)
    asm("xcall tget_blf");

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
#endif
}


//********************************************************************
//  Release Fixed-size Memory Block from interrupt handler
//  [Parameters]
//      ID      mpfid   Fixed-size MemorypoolID
//      VP      blf     Start Address of Memory Block
//  [Return Parameters]
//      ER      ercd    ErrorCode
//********************************************************************
ER irel_blf
    (
    ID      mpfid, 
    VP      blf
    )
{
#if 0 //gfdmodified
    asm("pushn %r15");
    asm("ld.w %r0,%alr");
    asm("ld.w %r1,%ahr");
    asm("pushn %r1");

    asm("xcall rel_blf");     // rel_blf(mpfid, blf)

    asm("popn %r1");
    asm("ld.w %ahr, %r1");
    asm("ld.w %alr, %r0");
    asm("ld.w [%sp+10], %r10");
    asm("popn %r15");
#endif
}


⌨️ 快捷键说明

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