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

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

?? rtx430.c

?? MSP430單片機(jī)實(shí)時(shí)多任務(wù)操作系統(tǒng)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    **/
/*************************************************************************************/
/**                                                                                 **/
/** 千萬注意:                                                                      **/
/**              在中斷程序開始處一定要調(diào)用 " RTX_TS|=RTX_TS_DELAY; " 這一語句      **/
/**                                                                                 **/
/*************************************************************************************/

#include  <msp430x14x.h>

#define  TIMESHARING        5        /* 每個任務(wù)的最大運(yùn)行時(shí)間       */
#define  RTX_STACKFREE      40       /* 當(dāng)前任務(wù)的最小堆棧空間       */
#define  RTX_MAXTASKN       10       /* 最大任務(wù)數(shù)                   */
#define  INT_CLOCK          10000    /* 每個定時(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;        /* 每個任務(wù)最長的運(yùn)行周期 */
unsigned char   TASK_Current;         /* 當(dāng)前運(yùn)行的任務(wù)號 */
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)去錯誤處理程序 */

     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;           

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品日产第一区二区三区高清版| 91福利精品第一导航| 欧美一级欧美一级在线播放| 一二三区精品视频| 欧洲亚洲国产日韩| 五月婷婷久久综合| 精品国产凹凸成av人导航| 国产一区不卡视频| 国产精品嫩草影院av蜜臀| 91丨porny丨户外露出| 一区二区三区四区不卡视频| 欧美精品九九99久久| 麻豆国产精品一区二区三区| 国产欧美精品日韩区二区麻豆天美| 波波电影院一区二区三区| 一区二区免费在线播放| 日韩一区二区在线播放| 国产91丝袜在线观看| 亚洲一区二区三区四区五区中文| 91精品国产欧美日韩| 国产成人aaa| 亚洲妇女屁股眼交7| 精品1区2区在线观看| 99久久免费精品高清特色大片| 午夜视频一区二区三区| 久久精品水蜜桃av综合天堂| 在线观看视频一区二区| 久久97超碰国产精品超碰| 亚洲欧洲日产国产综合网| 91精品国产91久久综合桃花| 国产91丝袜在线18| 水野朝阳av一区二区三区| 日本一区二区三区在线观看| 欧美在线一二三四区| 国产伦精品一区二区三区免费迷 | 欧美一区三区四区| 国产99久久久精品| 日韩综合小视频| 自拍偷拍国产精品| 亚洲精品一区二区三区精华液 | 久久天天做天天爱综合色| 91麻豆国产在线观看| 国产自产2019最新不卡| 亚洲国产中文字幕| 国产精品私人影院| www成人在线观看| 欧美顶级少妇做爰| 一道本成人在线| 国产一区二区调教| 日韩高清一区二区| 亚洲在线视频一区| 国产精品乱码一区二区三区软件 | 一区二区三区中文字幕电影 | 中文字幕制服丝袜一区二区三区 | 91亚洲国产成人精品一区二区三| 麻豆国产精品视频| 亚洲成人精品一区| 亚洲人成网站色在线观看| 国产拍欧美日韩视频二区| 日韩欧美国产午夜精品| 欧美日本韩国一区二区三区视频 | 久88久久88久久久| 婷婷国产在线综合| 亚洲国产一区视频| 亚洲猫色日本管| 国产精品久久久久aaaa| 国产欧美日韩亚州综合 | 青青草原综合久久大伊人精品 | 男女视频一区二区| 亚洲国产一区视频| 一区二区三区毛片| 亚洲最色的网站| 亚洲一区免费视频| 午夜婷婷国产麻豆精品| 亚洲成av人片一区二区| 亚洲国产综合色| 亚洲mv在线观看| 五月激情六月综合| 欧美a一区二区| 极品尤物av久久免费看| 国产一区二区三区四区五区入口| 精品写真视频在线观看| 国产精品自拍毛片| 大陆成人av片| 色婷婷激情久久| 欧美色综合网站| 欧美精品丝袜中出| 日韩你懂的电影在线观看| 26uuu久久天堂性欧美| 久久免费午夜影院| 国产精品久久免费看| 亚洲欧美色一区| 亚洲国产视频直播| 蜜桃传媒麻豆第一区在线观看| 精品一区二区国语对白| 国产91露脸合集magnet| 99天天综合性| 欧美久久久久中文字幕| 欧美r级在线观看| 欧美国产日本视频| 亚洲精品va在线观看| 日韩激情视频网站| 国产九色精品成人porny| 99在线热播精品免费| 欧美三级资源在线| 欧美精品一区二区三区在线播放| 欧美国产欧美综合| 亚洲综合自拍偷拍| 精品一区二区三区久久久| 成人听书哪个软件好| 欧美日韩一区久久| 久久精品这里都是精品| 亚洲精品一二三| 久久99精品久久久久久久久久久久| 国产成人精品综合在线观看| 在线免费观看日本一区| 日韩欧美一级二级三级久久久| 国产女主播视频一区二区| 亚洲国产成人91porn| 激情久久久久久久久久久久久久久久| www.日韩在线| 欧美电影免费观看高清完整版在线观看 | 国产亚洲精品7777| 亚洲第一精品在线| 成人美女在线视频| 日韩欧美中文字幕公布| 专区另类欧美日韩| 国内精品伊人久久久久影院对白| 日本道色综合久久| 国产亚洲1区2区3区| 日韩电影在线看| 色婷婷香蕉在线一区二区| 久久久精品tv| 日本aⅴ精品一区二区三区| 色综合久久综合网97色综合 | 欧美日韩在线观看一区二区| 国产午夜久久久久| 蜜臀av亚洲一区中文字幕| 色老汉av一区二区三区| 国产嫩草影院久久久久| 久久aⅴ国产欧美74aaa| 欧美日韩中文另类| 亚洲欧美在线另类| 国产剧情一区在线| 日韩视频免费观看高清在线视频| 一区二区三区在线免费播放| www.在线成人| 国产女人18水真多18精品一级做| 精品一区二区影视| 欧美剧情片在线观看| 一区二区三区精品在线观看| 99re8在线精品视频免费播放| 久久久久久亚洲综合| 国内精品久久久久影院一蜜桃| 欧美日韩1区2区| 亚洲午夜免费电影| 日本久久一区二区三区| 中文字幕在线一区| 成人午夜在线播放| 亚洲国产成人一区二区三区| 国产一区不卡视频| 久久久久久久久久久久电影| 经典一区二区三区| 精品精品国产高清a毛片牛牛| 男女激情视频一区| 欧美一区二区三区喷汁尤物| 日本免费新一区视频| 91精品啪在线观看国产60岁| 水蜜桃久久夜色精品一区的特点| 欧美色中文字幕| 一本在线高清不卡dvd| 中文字幕一区二区三区色视频| 99在线精品视频| 亚洲天堂精品视频| 在线一区二区视频| 香港成人在线视频| 日韩欧美一区电影| 国产一区二区女| 亚洲国产精品t66y| 色综合天天综合狠狠| 亚洲一区中文在线| 欧美日韩国产首页在线观看| 免费日本视频一区| 2020国产成人综合网| 成人精品视频网站| 亚洲柠檬福利资源导航| 欧美喷水一区二区| 精品一区二区综合| 国产精品久久毛片a| 色爱区综合激月婷婷| 午夜免费欧美电影| 精品国产乱子伦一区| 北条麻妃一区二区三区| 亚洲成人免费视频| 精品免费视频.| 不卡电影一区二区三区| 亚洲国产精品一区二区www在线| 欧美精品色综合| 国产黑丝在线一区二区三区| 亚洲精品视频观看|