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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtx430.c

?? MSP430單片機的實時多任務操作系統c源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*************************************************************************************/
/** Author:linger                                                                   **/
/** Email:ling_re@sina.com                                                          **/
/** This file is part of the 'RTX-430' Real-Time Operating System Source Package    **/
/*************************************************************************************/
/**                                                                                 **/
/** 千萬注意:                                                                      **/
/**              在中斷程序開始處一定要調用 " RTX_TS|=RTX_TS_DELAY; " 這一語句      **/
/**                                                                                 **/
/*************************************************************************************/

#include  <msp430x14x.h>

#define  TIMESHARING        5        /* 每個任務的最大運行時間       */
#define  RTX_STACKFREE      40       /* 當前任務的最小堆棧空間       */
#define  RTX_MAXTASKN       10       /* 最大任務數                   */
#define  INT_CLOCK          10000    /* 每個定時中斷的時鐘數         */
#define  RAMBOTTOM          0x300    /* 最大 RAM 數                  */
#define  RAMTOP             0x9FF    /* 最大 RAM 數                  */

#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         /* 進入中斷處理程序后,要將 RTX_TS 中的該位置為 1 */

unsigned int    STKP[RTX_MAXTASKN];   /* 指向前一任務堆棧的尾地址 */
unsigned char   RTX_RobinTime;        /* 每個任務最長的運行周期 */
unsigned char   TASK_Current;         /* 當前運行的任務號 */
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 轉去錯誤處理程序 */

     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)     /* 沒有任務切換 */
        {
            restore_sr();
            return;
        }

      if(STATE[TASK_Current].time!=RTX_RobinTime) /* 沒有任務切換 */
        {
            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;           

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久aaaa樱花| 亚洲午夜一区二区三区| 亚洲欧美韩国综合色| 免费人成黄页网站在线一区二区| 成人一区二区在线观看| 日韩写真欧美这视频| 亚洲欧洲另类国产综合| 狠狠色综合播放一区二区| 欧美午夜精品久久久久久超碰| 国产欧美精品一区| 六月婷婷色综合| 欧美日韩国产色站一区二区三区| 国产拍揄自揄精品视频麻豆| 婷婷六月综合网| 欧洲av一区二区嗯嗯嗯啊| 国产精品久久久久精k8| 国产精品综合二区| 日韩欧美国产一区二区在线播放 | 韩国精品主播一区二区在线观看 | 亚洲一区二区在线免费观看视频| 国产精品99久久久久久有的能看| 欧美日韩一级大片网址| 亚洲日本va午夜在线电影| 丁香一区二区三区| 国产视频一区二区在线| 国产美女精品在线| 精品1区2区在线观看| 美女免费视频一区二区| 欧美一级二级三级乱码| 日韩成人一区二区三区在线观看| 欧美三级午夜理伦三级中视频| 亚洲精选免费视频| 色欧美片视频在线观看在线视频| 亚洲欧美色综合| 色婷婷久久一区二区三区麻豆| 亚洲色图欧洲色图| 在线免费不卡视频| 亚洲一线二线三线久久久| 欧美性videosxxxxx| 午夜亚洲国产au精品一区二区 | 国产精品1024| 欧美高清在线一区| www.性欧美| 一区二区三区在线视频观看| 在线观看日韩一区| 天堂成人国产精品一区| 日韩一级完整毛片| 国产乱色国产精品免费视频| 国产精品免费免费| 91老师片黄在线观看| 亚洲成人777| 欧美变态tickling挠脚心| 国产一区 二区| 成人欧美一区二区三区视频网页| 在线日韩av片| 欧美aaaaa成人免费观看视频| 2020国产精品久久精品美国| 成年人午夜久久久| 午夜精品在线看| 亚洲成人免费av| 欧美妇女性影城| 国产麻豆欧美日韩一区| 亚洲日本电影在线| 日韩一二在线观看| av成人免费在线| 视频在线观看91| 中文在线一区二区| 欧美日韩成人综合在线一区二区| 韩国在线一区二区| 亚洲黄色av一区| 欧美r级在线观看| 色噜噜偷拍精品综合在线| 日本一不卡视频| 中文字幕日韩精品一区| 日韩欧美电影一二三| 99国产精品国产精品毛片| 日韩avvvv在线播放| 国产精品家庭影院| 精品电影一区二区三区| 在线免费av一区| 国产成人午夜99999| 五月天中文字幕一区二区| 中文字幕第一页久久| 欧美一区二区视频免费观看| 91免费版pro下载短视频| 国产在线精品免费| 日韩高清不卡在线| 亚洲精品视频自拍| 欧美国产日韩亚洲一区| 精品欧美一区二区三区精品久久| 色丁香久综合在线久综合在线观看| 黄色成人免费在线| 蜜臀av在线播放一区二区三区| 有码一区二区三区| 国产精品美女久久久久久久久| 欧美成人a在线| 69堂精品视频| 欧美日韩国产三级| 欧美在线一区二区三区| 99久久久久久99| 成人午夜在线播放| 国产不卡视频在线观看| 九九精品一区二区| 麻豆国产精品一区二区三区| 亚洲一级不卡视频| 亚洲综合一区二区精品导航| 国产精品每日更新| 国产精品每日更新| 中文字幕的久久| 中文字幕中文字幕一区二区| 国产喷白浆一区二区三区| 久久久亚洲精华液精华液精华液 | 国产大片一区二区| 免费成人av在线| 蜜桃视频第一区免费观看| 日韩1区2区日韩1区2区| 日韩精品视频网| 另类综合日韩欧美亚洲| 老司机精品视频一区二区三区| 日本成人在线电影网| 免费在线观看视频一区| 久久国产乱子精品免费女| 久久91精品国产91久久小草| 国产综合色在线| 国产风韵犹存在线视精品| 成人午夜av在线| av成人老司机| 欧美午夜免费电影| 6080午夜不卡| 久久久久久久久久久久久久久99| 久久影院视频免费| 中文字幕制服丝袜成人av | 久久综合久久综合九色| 国产无遮挡一区二区三区毛片日本| 欧美极品少妇xxxxⅹ高跟鞋| 综合色中文字幕| 午夜一区二区三区在线观看| 蜜桃在线一区二区三区| 国产精品18久久久久久久网站| 成人涩涩免费视频| 欧美伊人久久久久久久久影院 | 日本中文一区二区三区| 国内外精品视频| 99精品国产热久久91蜜凸| 欧美日韩你懂的| 2023国产一二三区日本精品2022| 国产精品妹子av| 日本强好片久久久久久aaa| 国产精品一区二区三区99| 91美女视频网站| 日韩欧美激情四射| 亚洲视频一区二区在线| 琪琪一区二区三区| 成人一级片在线观看| 欧美日韩精品欧美日韩精品一综合| 欧美成人video| 一区二区三区久久| 国产一区二区导航在线播放| 欧洲一区在线观看| 久久久久久久久岛国免费| 亚洲免费观看视频| 国产剧情一区在线| 欧美性三三影院| 日韩黄色一级片| 91蜜桃免费观看视频| 久久综合精品国产一区二区三区 | 久久精品国产一区二区| 91免费版pro下载短视频| 久久综合五月天婷婷伊人| 亚洲一区二区三区在线播放| 国产成人日日夜夜| 日韩欧美卡一卡二| 亚洲va在线va天堂| av在线不卡网| 久久久久久毛片| 久久超碰97中文字幕| 欧美优质美女网站| 国产精品久久久久天堂| 国产在线视频不卡二| 91精品国产欧美一区二区18| 亚洲尤物在线视频观看| 99国内精品久久| 中文子幕无线码一区tr| 国产精品亚洲成人| 欧美电视剧免费观看| 日本在线观看不卡视频| 欧美老人xxxx18| 亚洲一区二区三区四区五区黄 | 欧美性受xxxx| 亚洲欧美怡红院| www.日韩精品| 欧美国产精品v| 国产mv日韩mv欧美| 久久久www免费人成精品| 老司机精品视频一区二区三区| 欧美一区二区福利在线| 日韩电影在线观看电影| 777a∨成人精品桃花网| 午夜精品久久久久久久99樱桃| 欧美系列日韩一区|