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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? rtx430.c

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

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

#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ù)最長(zhǎng)的運(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)     /* 沒(méi)有任務(wù)切換 */
        {
            restore_sr();
            return;
        }

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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产青草久久久久福利| 中文字幕一区二区三区在线不卡| 欧美少妇bbb| 一本色道久久综合亚洲aⅴ蜜桃| 国产电影一区二区三区| 久久99精品网久久| 久久福利视频一区二区| 久久99精品视频| 极品少妇一区二区三区精品视频 | 欧美一区二区三区不卡| 欧美日韩精品三区| 欧美人妇做爰xxxⅹ性高电影 | 久久先锋影音av鲁色资源网| 欧美白人最猛性xxxxx69交| 欧美一区二区高清| 亚洲精品一区二区三区香蕉| 久久久精品欧美丰满| 国产精品污网站| 中文字幕一区二区三区不卡 | 日韩av电影免费观看高清完整版 | 一区二区三区精品| 亚洲高清在线精品| 日本不卡一二三| 经典三级一区二区| www.欧美日韩国产在线| 91麻豆福利精品推荐| 欧美在线看片a免费观看| 欧美日韩激情在线| 精品久久久久香蕉网| 中文字幕第一区第二区| 亚洲精品第1页| 日韩专区中文字幕一区二区| 国内精品伊人久久久久av影院| 国产福利精品一区| 欧洲av一区二区嗯嗯嗯啊| 欧美一区二区在线观看| 久久精品亚洲乱码伦伦中文| 最新国产の精品合集bt伙计| 亚洲成av人片www| 国产一区视频在线看| 91热门视频在线观看| 91精品国产丝袜白色高跟鞋| 久久亚洲综合av| 亚洲美女偷拍久久| 男女男精品视频网| 成人高清视频在线观看| 欧美日韩国产123区| 久久久不卡网国产精品二区| 亚洲免费在线电影| 精品一区二区av| 日本精品一区二区三区高清| 日韩免费性生活视频播放| 国产精品久久久久影院| 男人的天堂久久精品| www.久久精品| 欧美成人精精品一区二区频| 亚洲丝袜美腿综合| 麻豆专区一区二区三区四区五区| fc2成人免费人成在线观看播放| 欧美一三区三区四区免费在线看| 中文av一区二区| 美女看a上一区| 91免费看片在线观看| 亚洲精品在线一区二区| 亚洲电影一区二区| jizz一区二区| 久久影视一区二区| 亚洲mv在线观看| av一区二区久久| 精品av久久707| 天堂午夜影视日韩欧美一区二区| av男人天堂一区| 精品电影一区二区| 奇米在线7777在线精品| 一本色道久久综合精品竹菊| 国产日韩欧美综合在线| 日本欧美一区二区| 欧美主播一区二区三区美女| 中文文精品字幕一区二区| 男男成人高潮片免费网站| 欧美丝袜丝交足nylons图片| 国产精品欧美一区二区三区| 国内精品伊人久久久久影院对白| 在线播放91灌醉迷j高跟美女| 亚洲精品国产一区二区精华液| 国产成人自拍网| 精品成人一区二区三区| 免费人成在线不卡| 欧美日韩一区国产| 一区二区在线免费观看| gogogo免费视频观看亚洲一| 国产女人aaa级久久久级| 狠狠色丁香九九婷婷综合五月| 在线播放欧美女士性生活| 性欧美大战久久久久久久久| 一道本成人在线| 亚洲精品免费视频| 91美女精品福利| 亚洲视频一二三区| 9i在线看片成人免费| 中文在线一区二区| 成人白浆超碰人人人人| 国产精品久久久久影视| 北条麻妃国产九九精品视频| 国产精品视频第一区| 成人黄色在线网站| 欧美激情一区二区三区四区| 国产成人av一区| 国产精品久久久久久久裸模| 成人夜色视频网站在线观看| 国产精品免费av| 99热在这里有精品免费| 亚洲人成精品久久久久久| 色香蕉成人二区免费| 亚洲一二三级电影| 91精品欧美综合在线观看最新| 美女一区二区三区在线观看| 91精品国产综合久久久久久| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩精品影音先锋| 国产精品系列在线观看| 国产精品美女久久福利网站| 91碰在线视频| 午夜精品123| 欧美va亚洲va在线观看蝴蝶网| 国产一区二区三区久久久| 亚洲国产精品99久久久久久久久| 成人av电影在线| 一区二区三区av电影| 在线不卡免费av| 国产在线一区观看| 中文字幕视频一区二区三区久| 在线欧美一区二区| 免费在线成人网| 国产精品美女久久久久久久久| 欧美综合色免费| 韩国av一区二区三区四区| 国产精品毛片久久久久久久| 91久久香蕉国产日韩欧美9色| 日韩国产欧美在线观看| 久久久久国产精品麻豆ai换脸 | 成人性生交大合| 亚洲国产成人精品视频| 精品少妇一区二区三区在线视频 | 日韩三级在线观看| 成人自拍视频在线观看| 亚洲一区中文在线| 日韩精品专区在线影院重磅| aaa欧美大片| 麻豆国产欧美一区二区三区| 国产精品国产三级国产aⅴ原创| 欧美色偷偷大香| 国产精品一二二区| 亚洲国产一区二区视频| 久久精品亚洲精品国产欧美kt∨ | 欧美日韩一区视频| 成人在线综合网站| 日韩影院在线观看| 国产精品另类一区| 欧美一卡在线观看| 91丝袜国产在线播放| 美腿丝袜一区二区三区| 亚洲天天做日日做天天谢日日欢| 欧美电影在线免费观看| 99精品欧美一区二区三区综合在线| 青青青伊人色综合久久| 亚洲人成7777| 国产清纯美女被跳蛋高潮一区二区久久w | 久久精品亚洲国产奇米99| 欧美亚洲日本国产| 国产成人av电影在线| 五月天亚洲婷婷| 亚洲欧美另类小说| 久久只精品国产| 91精品国产91综合久久蜜臀| 色综合视频在线观看| 国产一区二区不卡| 日韩av午夜在线观看| 一区二区在线观看免费视频播放 | 丝袜美腿亚洲综合| 亚洲人妖av一区二区| 久久久久久久久久久99999| 欧美日韩在线免费视频| a4yy欧美一区二区三区| 国产精品一区三区| 久久疯狂做爰流白浆xx| 亚洲国产综合91精品麻豆| 久久精品视频免费| 欧美变态口味重另类| 在线播放中文字幕一区| 欧美丝袜自拍制服另类| 一本一本久久a久久精品综合麻豆| 风间由美性色一区二区三区| 麻豆成人在线观看| 日av在线不卡| 日本美女视频一区二区| 日韩综合在线视频| 日韩激情一区二区| 亚洲成人第一页| 亚洲成人动漫在线观看|