在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于RTX51 TINY的分析與探討

            關(guān)于RTX51 TINY的分析與探討

            作者: 時(shí)間:2012-04-12 來(lái)源:網(wǎng)絡(luò) 收藏

            3 共享資源實(shí)現(xiàn)[1]

            由于是一個(gè)多任務(wù)的操作系統(tǒng),那么就不免會(huì)有幾個(gè)任務(wù)使用同一個(gè)資源,這些資源可能是一個(gè)變量,也可能是輸入/輸出設(shè)備。這就要求一個(gè)任務(wù)在使用共享資源時(shí)必須獨(dú)占該資源,否則可能會(huì)造成數(shù)據(jù)被破壞。

            中實(shí)現(xiàn)共享資源獨(dú)占的方法比較多。比如,可以通過(guò)TIMESHARING這個(gè)變量來(lái)禁止時(shí)間片輪轉(zhuǎn),使其值為0,就可以實(shí)現(xiàn)禁止任務(wù)切換,從而當(dāng)前任務(wù)就可以獨(dú)占共享資源。還可以關(guān)閉中斷來(lái)實(shí)現(xiàn),使EA=0,定時(shí)器T0的中斷被關(guān)閉,不能再為時(shí)間片輪轉(zhuǎn)提供基準(zhǔn),從而禁止了任務(wù)切換。但這兩種方法都帶有一定的局限性,前一種方法只能適用于實(shí)時(shí)性要求不高的場(chǎng)合,后一種方法由于T0中斷關(guān)閉時(shí)間不能太長(zhǎng),只能適用于一些簡(jiǎn)單變量操作的場(chǎng)合?;谝陨锨闆r,下面通過(guò)另一種方法來(lái)實(shí)現(xiàn)共享資源的使用。

            full中可以利用信號(hào)量很好地實(shí)現(xiàn)對(duì)共享資源的操作,也可以把這種思想應(yīng)用到RTX51 中;而在RTX51 TINY中不支持信號(hào)量,這就要求用戶自己定義信號(hào)量及其操作過(guò)程。以下是部分代碼:

            struct signal {//定義信號(hào)量結(jié)構(gòu)體
                uchar count;//該信號(hào)量的當(dāng)前計(jì)數(shù)值
                uint list_tasks;//等待該信號(hào)量任務(wù)表
              } signal_list[3];
              /*初始化信號(hào)量 */
              void init_signal(uchar task_id,uchar count) {
                signal_list[task_id].count=count;
                signal_list[task_id].list_tasks=0;
              }
              /*等待信號(hào)量 */
              char wait_signal(uchar task_id) {
                if(signal_list[task_id].count>0) {
                  signal_list[task_id].count;//獲取信號(hào)量
                  return(-1);
                }
                signal_list[task_id].list_tasks|=(1os_running_task_id());//標(biāo)記為等待狀態(tài)
                return(0);
              }
              void wait_sem(uchar task_id) {
                if(wait_signal(task_id==0)
                  while(os_wait(K_TMO,255,0)!=RDY_EVENT);//等待,直到該任務(wù)就緒
              }
              /*釋放信號(hào)量 */
              char release_signal(uchar task_id) {
                uchar i:
                uint temp=1;
                if((signal_list[task_id].count>0)||( signal_list[task_id].list_tasks==0)) {
                  signal_list[task_id].count++; //釋放信號(hào)量
                  return(-1);
                }
                for(i=0;i16;i++) {
                  if((signal_list[task_id].list_tasks(temp))!=0){//查找任務(wù)表
                    signal_list[task_id].list_tasks= ~(1i);return(i); //返回等待信號(hào)量的任務(wù)號(hào)
                  }
                  temp=1:
                }
              }
              void release_sem(uchar task_id) {
                char task_temp;
                task_temp=release_signal(task_id);
                if(task_temp!=-1) {
                  os_set_ready(task_temp); //任務(wù)task_id進(jìn)入就緒狀態(tài)
                  os_switch_task();
                }
              }



            關(guān)鍵詞: 探討 分析 TINY RTX51 關(guān)于

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉