亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rtx430.c

?? 在msp430上面寫的一個(gè)小的rtos
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):

/*************************************************************************************/
/**                                                                                 **/
/** 千萬注意:                                                                      **/
/**              在中斷程序開始處一定要調(diào)用 " RTX_TS|=RTX_TS_DELAY; " 這一語句      **/
/**                                                                                 **/
/*************************************************************************************/

#include  <msp430x14x.h>

#define  TIMESHARING        5        /* 每個(gè)任務(wù)的最大運(yùn)行時(shí)間       */
#define  RTX_STACKFREE      40       /* 當(dāng)前任務(wù)的最小堆棧空間       */
#define  RTX_MAXTASKN       10       /* 最大任務(wù)數(shù)                   */
#define  INT_CLOCK          10000    /* 每個(gè)定時(shí)中斷的時(shí)鐘數(shù)         */
#define  RAMBOTTOM          0x300    /* 最大 RAM 數(shù)                  */
#define  RAMTOP             0x9FF    /* 最大 RAM 數(shù)                  */

#define  RTX_TIMESHARING    (0 - TIMESHARING)
#define  RTX_CLOCK          INT_CLOCK
#define  RTX_RAMBOTTOM      RAMBOTTOM/2*2               
#define  RTX_RAMTOP         RAMTOP/2*2              

#define  K_SIG              1
#define  K_TMO              2
#define  SIG_EVENT          4
#define  TMO_EVENT          8
#define  K_READY            16
#define  K_ACTIVE           32
#define  K_ROBIN            64
#define  K_IVL              128

#define  B_WAITSIG          0
#define  B_WAITTIM          1
#define  B_SIGNAL           2
#define  B_TIMEOUT          3
#define  B_READY            4
#define  B_ACTIVE           5
#define  B_ROBIN            6
#define  B_INTERVAL         7

#define  RTX_TS_REQ         1
#define  RTX_TS_DELAY       2         /* 進(jìn)入中斷處理程序后,要將 RTX_TS 中的該位置為 1 */

unsigned int    STKP[RTX_MAXTASKN];   /* 指向前一任務(wù)堆棧的尾地址 */
unsigned char   RTX_RobinTime;        /* 每個(gè)任務(wù)最長的運(yùn)行周期 */
unsigned char   TASK_Current;         /* 當(dāng)前運(yùn)行的任務(wù)號(hào) */
unsigned char   RTX_TS;
unsigned int    RTX_SP;

unsigned int    SAVE_SR;
unsigned int    SAVE_PC;

struct
{
   char  time;
   char  st;
}
STATE[RTX_MAXTASKN];

void timer0_comm(void);
void clear_watchdog(void);
void os_system_init(void);
unsigned char task_switch(void);
unsigned char os_system_start(void);
unsigned char os_delete_task(unsigned char task_no);
unsigned char os_send_signal(unsigned char task_no);
unsigned char isr_send_signal(unsigned char task_no);
unsigned char os_clear_signal(unsigned char task_no);
unsigned char os_wait(unsigned type, unsigned timeout);
unsigned char os_create_task(unsigned int proc_name, unsigned char task_no);

extern int  getsp(void);              // Get Stack Pointer
extern void putsp(int sp_value);      // Get Stack Pointer

extern void save_pop(void);
extern void save_push(void);
extern void restore_sr(void);

/*******************************************************************/

interrupt [TIMERA0_VECTOR] void WD( void )
{
    unsigned int *i,*j;
    
    clear_watchdog();
    
    i=(unsigned int *)getsp();
    j=i-1;
    putsp((unsigned int)j);
    
    *j=*i;
    j++;
    i++;
    
    *j=*i;
    j++;
    i++;
    
    *j=*i;
    j++;
    i++;
    
    *j=*i;
    j++;
    i++;

    *j=*i;
    j++;
    i++;
    
    *j=*i;
    j++;
    i++;
        
    SAVE_SR=*i;
    *j=*i;
    *i=(unsigned int)timer0_comm;
}


void timer0_comm(void)
{  
     unsigned char i;
     unsigned char stack_free;

//Clear_watchdog:     
     clear_watchdog();
     
//Update_Timer0:
     CCR0+=RTX_CLOCK;

//Chcec_Stack:   /* 堆棧檢查,如果剩余堆棧 <  RTX_STACKFREE 轉(zhuǎn)去錯(cuò)誤處理程序 */

     stack_free=TASK_Current==RTX_MAXTASKN ? RTX_RAMBOTTOM : STKP[TASK_Current+1];

     stack_free=getsp()-stack_free;

     if(stack_free<RTX_STACKFREE)
       {
           _DINT();
           while(1)
           {
              /* ************此處加入堆棧溢出處理程序*************** */
           };
       }


//Update_Check_Task_Timers:

      for(i=0;i<RTX_MAXTASKN;i++)
         {
             STATE[i].time--;
             _DINT();
             if((STATE[i].st&K_TMO)&&(STATE[i].time==0))STATE[i].st|=K_READY+TMO_EVENT;
             _EINT();
         }

//Check_Round_Robin_TimeOut:

      if(RTX_TIMESHARING==0)     /* 沒有任務(wù)切換 */
        {
            restore_sr();
            return;
        }

      if(STATE[TASK_Current].time!=RTX_RobinTime) /* 沒有任務(wù)切換 */
        {
            restore_sr();
            return;
        }

      if(RTX_TS&RTX_TS_DELAY)
        {
           RTX_TS|=RTX_TS_REQ;
           restore_sr();
           return;
        }

     save_push();
     
     _DINT();
     STATE[TASK_Current].st|=K_ROBIN;
     _EINT();

     task_switch();
}



unsigned char task_switch(void)
{
     unsigned char i;
     unsigned int *j,*p1,*p2;

     clear_watchdog();
     
     RTX_SP=getsp();
     p1=(unsigned int *)(RTX_SP+8);
     p2=p1-1;
       
     for(i=0;i<4;i++)
        {      
           *p1=*p2;
           p1--;
           p2--;
        }
   
     RTX_SP+=2;
     putsp(RTX_SP);
     j=(unsigned int *)RTX_SP;
       
     RTX_TS|=RTX_TS_DELAY;

     i=TASK_Current;


     while(1)
     {
        if ((++i)==(RTX_MAXTASKN))i=0;
        if (STATE[i].st&K_READY)break;
     }
     
     while(TASK_Current<i)
     {
        TASK_Current++;
        
        p1=(unsigned int *)STKP[TASK_Current];
        p2=(unsigned int *)(TASK_Current==RTX_MAXTASKN ? RTX_RAMBOTTOM : STKP[TASK_Current+1]);

        STKP[TASK_Current]=RTX_SP;
        
        while(p1!=p2)
        {
           RTX_SP-=2;
           putsp(RTX_SP);
           j--;
           p1--;
           *j=*p1;
        }
     }

     while(TASK_Current>i)
     {
        p1=(unsigned int *)(TASK_Current==RTX_MAXTASKN ? RTX_SP : STKP[TASK_Current+1]);
        p2=(unsigned int *)STKP[TASK_Current];
        
        while(j!=p2)
        {
           *p1=*j;
           p1++;
           j++;
           RTX_SP+=2;
           putsp(RTX_SP);
        }
        STKP[TASK_Current] = (unsigned int)p1;

        TASK_Current--;
     }

     RTX_RobinTime = STATE[TASK_Current].time + RTX_TIMESHARING;
     
     _DINT();
     
     if(STATE[TASK_Current].st & K_ROBIN)
       {
          _EINT();
          RTX_TS&=~RTX_TS_DELAY;
          RTX_TS&=~RTX_TS_REQ;
          
          save_pop();
          
          return(0x00);
       }

     if((STATE[TASK_Current].st & K_SIG) && (STATE[TASK_Current].st & SIG_EVENT))
       {
          STATE[TASK_Current].st&=0xf0;
          _EINT();
          RTX_TS&=~RTX_TS_DELAY;
          RTX_TS&=~RTX_TS_REQ;
          return(SIG_EVENT);
       }

     if((STATE[TASK_Current].st & K_TMO) && (STATE[TASK_Current].st & TMO_EVENT))
       {
          STATE[TASK_Current].st&=0xf4;
          _EINT();
          RTX_TS&=~RTX_TS_DELAY;
          RTX_TS&=~RTX_TS_REQ;
          return(TMO_EVENT);
       }

     _EINT();
     RTX_TS&=~RTX_TS_DELAY;
     RTX_TS&=~RTX_TS_REQ;
     return(0x00);
}

unsigned char os_wait(unsigned type, unsigned timeout)
{
   unsigned char st = 0;
   
   clear_watchdog();

   if(type==0)
     {
        _DINT();
        STATE[TASK_Current].st &= ~ (st | K_SIG | K_TMO);
        _EINT();
        return (st);
     }

   TACTL&=~MC1;           

   if(type&K_IVL)
     {
        STATE[TASK_Current].time+=timeout;
        if(!C)
          {
             st = TMO_EVENT;
             _DINT();
             STATE[TASK_Current].st &= ~ (st | K_SIG | K_TMO);
             _EINT();
             TACTL|=MC1;           
             return (st);
          }
        _DINT();
        STATE[TASK_Current].st |= K_TMO;
        _EINT();
      }

    if(type&K_TMO)
      {
         if(timeout==0)
           {
              st = TMO_EVENT;
              _DINT();
              STATE[TASK_Current].st &= ~ (st | K_SIG | K_TMO);
              _EINT();
              TACTL|=MC1;           
              return (st);
           }
         STATE[TASK_Current].time = timeout;

         _DINT();
         STATE[TASK_Current].st |= K_TMO;
         _EINT();
      }

    if(type&K_SIG)
      {
         if(STATE[TASK_Current].st&SIG_EVENT)
           {
              st=SIG_EVENT;
              _DINT();
              STATE[TASK_Current].st &= ~ (st | K_SIG | K_TMO);
              _EINT();
              TACTL|=MC1;           
              return (st);
           }
         _DINT();
         STATE[TASK_Current].st |= K_SIG;
         _EINT();
    }

    _DINT();
    STATE[TASK_Current].st &= ~K_READY;
    _EINT();
    
    TACTL|=MC1;           
    task_switch();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美老肥妇做.爰bbww| 精品少妇一区二区三区视频免付费| 亚洲超碰精品一区二区| 久久亚洲精品国产精品紫薇| 91碰在线视频| 国产经典欧美精品| 视频在线观看一区| 亚洲综合免费观看高清在线观看| 久久亚洲一区二区三区四区| 欧美丰满一区二区免费视频| 91美女在线看| 成人精品视频.| 91久久奴性调教| 成人在线视频首页| 精品无人区卡一卡二卡三乱码免费卡| 一区二区三区av电影| 国产精品拍天天在线| 欧美精品一区二区久久婷婷| 欧美视频在线一区| 91蜜桃免费观看视频| 成人精品一区二区三区四区| 国产精选一区二区三区| 奇米综合一区二区三区精品视频| 一区二区视频在线| 中文字幕视频一区二区三区久| 亚洲精品在线免费观看视频| 日韩一区二区影院| 欧美日本一区二区三区| 在线影视一区二区三区| 色综合久久中文综合久久97| 9i看片成人免费高清| 成人久久18免费网站麻豆 | 91免费看片在线观看| 国产精品私房写真福利视频| 欧美tickle裸体挠脚心vk| 欧美精品123区| 欧美日韩成人综合| 欧美日韩日本视频| 精品视频免费在线| 欧美美女bb生活片| 欧美美女bb生活片| 欧美高清视频在线高清观看mv色露露十八 | 精品国产免费视频| 日韩女优毛片在线| 欧美精品一区二区不卡| 亚洲大尺度视频在线观看| 午夜av电影一区| 婷婷开心激情综合| 奇米四色…亚洲| 久久精品国产第一区二区三区| 久久电影网站中文字幕| 国产九色sp调教91| av成人免费在线| 精品99一区二区三区| a级精品国产片在线观看| 久久国产精品99精品国产| 欧美国产精品一区二区三区| 久久影音资源网| 在线不卡a资源高清| 欧美吞精做爰啪啪高潮| av网站免费线看精品| 99这里只有精品| 91免费精品国自产拍在线不卡| 99精品一区二区| 99精品国产热久久91蜜凸| 成人一二三区视频| av资源网一区| 精品视频在线免费观看| 欧美一级免费大片| 国产片一区二区三区| 18欧美乱大交hd1984| 日韩中文字幕av电影| 国产精品一区二区免费不卡 | 亚洲国产aⅴ成人精品无吗| 日本欧美加勒比视频| 国产成人a级片| 91福利视频久久久久| 日韩一二三区视频| 国产精品三级久久久久三级| 五月开心婷婷久久| 岛国一区二区在线观看| 欧美三区在线观看| 国产亚洲一本大道中文在线| 亚洲美女在线一区| 黄一区二区三区| 一本一道久久a久久精品| 欧美电影精品一区二区| 亚洲特黄一级片| 国产在线视频精品一区| 91成人在线免费观看| 国产亚洲一区字幕| 午夜电影久久久| 99久久精品国产网站| 精品久久久久久久久久久久包黑料| 中文字幕综合网| 韩国精品主播一区二区在线观看| 在线一区二区视频| 国产精品精品国产色婷婷| 麻豆成人av在线| 欧美日韩一区二区三区四区| 国产女人18水真多18精品一级做| 日本欧美在线观看| 日本丰满少妇一区二区三区| 久久午夜电影网| 美日韩一区二区三区| 91美女蜜桃在线| 亚洲国产岛国毛片在线| 韩国理伦片一区二区三区在线播放| 亚洲美女淫视频| 色偷偷久久一区二区三区| 日韩电影在线免费| 日本伦理一区二区| 亚洲欧美电影院| 99久久国产综合色|国产精品| 欧美tickling网站挠脚心| 午夜成人免费视频| 在线综合亚洲欧美在线视频| 99热精品国产| 久久在线免费观看| 99久久99久久精品免费看蜜桃| 欧美一区二区在线免费播放| 亚洲综合丝袜美腿| 91伊人久久大香线蕉| 国产精品久久久99| 成人丝袜高跟foot| 日本一区二区三区视频视频| 国产精品亚洲综合一区在线观看| 欧美一区二区三区在线视频 | 视频一区国产视频| 欧美午夜精品久久久久久超碰 | 一区二区久久久久| 91日韩在线专区| 日韩理论片网站| 成人免费高清视频| 日本一二三不卡| aa级大片欧美| 亚洲欧美电影院| 欧美在线免费播放| 日日摸夜夜添夜夜添国产精品| 欧美午夜理伦三级在线观看| 亚洲午夜电影网| 欧美一区二区视频观看视频| 久久精品国产99国产| 日韩免费看的电影| 国产白丝网站精品污在线入口| 欧美经典一区二区| 99国产精品久久| 艳妇臀荡乳欲伦亚洲一区| 欧美猛男超大videosgay| 香蕉久久一区二区不卡无毒影院| 欧美精品久久天天躁| 另类专区欧美蜜桃臀第一页| 久久久久久电影| 91麻豆蜜桃一区二区三区| 亚洲午夜精品一区二区三区他趣| 欧美日本高清视频在线观看| 日本亚洲免费观看| 久久久久久9999| 色综合一区二区| 日本中文字幕一区| 天天综合天天综合色| 制服丝袜亚洲精品中文字幕| 国产一区二区调教| 国产精品五月天| 欧美猛男男办公室激情| 欧美日本乱大交xxxxx| 91麻豆福利精品推荐| 欧美视频在线一区二区三区 | 精品成人一区二区三区四区| 色噜噜狠狠成人网p站| 成人黄色片在线观看| 精品在线你懂的| 精彩视频一区二区三区| 日本女优在线视频一区二区| 亚洲激情男女视频| 香蕉av福利精品导航| 午夜精品久久久久久久久久久| 国产成人精品一区二区三区网站观看| 国产精品久久久久影院老司| 欧美精品vⅰdeose4hd| 国产成人精品免费在线| 亚洲一级不卡视频| 久久蜜臀精品av| 成人免费在线视频观看| 欧美日韩日本视频| 成人性视频免费网站| 日日骚欧美日韩| 中文字幕中文字幕中文字幕亚洲无线| 欧美日韩三级视频| www..com久久爱| 另类小说视频一区二区| 亚洲精品中文字幕乱码三区| 精品99999| 欧美日韩免费电影| 99re在线精品| 国产福利一区二区| 蜜桃av噜噜一区| 亚洲一区二区黄色| 欧美国产日韩在线观看| 日韩欧美一级二级三级|