在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設計應用 > IC卡電表C語言程序結(jié)構(gòu)性能分析

            IC卡電表C語言程序結(jié)構(gòu)性能分析

            作者: 時間:2012-05-30 來源:網(wǎng)絡 收藏

            1 系統(tǒng)的改進

            本文引用地址:http://www.biyoush.com/article/148963.htm

              大家知道,87LPC764有4KB的Flash ROM,而筆者的程序量只有2KB多點,因而第一個想法是改用C語言作為主要的開發(fā)語言,應該不至于導致代碼空間不夠用。其次,考慮到需要定時功能的模塊(或稱任務,以下統(tǒng)稱任務)較多,有必要對這些任務進行有序的管理。筆者考慮使用時間片輪詢方式,即給每個要求時間管理的任務以一個時間間隔,時間間隔一到,即運行其代碼,達到合理使用系統(tǒng)定時器資源的目的。就51系統(tǒng)而言,一般至少一個定時器可用來進行時間片的輪詢。基于以上的想法,構(gòu)造了下述數(shù)據(jù)類型。

              typedef unsigned char uInt8
              typedef struct {
              void (*proc)(void); //處理程序
              uInt8 ms_count; //時間片大小
              } _op_;

              數(shù)據(jù)定義好之后,接著就是實現(xiàn)代碼,包括三部分,即初始化數(shù)據(jù)、時間片的刷新與時間到執(zhí)行。

              初始化數(shù)據(jù)。

              #define proc_cnt 0x08 //定義過程或任務數(shù)量
              //任務棧初始化
              code _op_ Op[proc_cnt]={{ic_check,10},{disp_loop,100},{calc_power,150},{set_led,2},…};
              //設置時間片初始值
              data uInt8 time_val[proc_cnt]={10,100,150,2,…};時間片刷新。
              void time_int1(void) interrupt 3
              { uInt8 cnt;
                Time_Counter:=Time_Unit;
                for(cnt=0;cntproc_cnt;cnt++)
                { time_val[cnt]--;
                }
              }

              任務的執(zhí)行。

              void main(void){
                uInt8 cnt;
                init(); //程序初始化
                interrupt_on(); //打開中斷
                do{
                  for(cnt=0;cntproc_cnt;cnt++)
                    { if(!time_val[cnt])
                      { time_val[cnt]=Op[cnt].ms_count;
                        Op[cnt].proc();
                    }
                  }
                }while(1);
              }

              在上面的定義中,proc是不能帶參數(shù)的,各任務之間的通信可以定義一個參數(shù)內(nèi)存塊,通過一種機制進行數(shù)據(jù)信息交互,如定義一個全局變量。對于小容量單片機系統(tǒng)而言,需要這樣做的任務并不多,總?cè)蝿樟恳膊粫?,因而這種協(xié)調(diào)并不太難處理。

              也許大家都有這樣的認識,即一個實時系統(tǒng)中,差不多所有的具體任務都是有時間屬性的,即使是不需要定時的過程或任務,也不見得要時時進行查詢與刷新。如卡介質(zhì)檢測,保證每秒一次就足夠了。因而,這些任務也可以列入到這個中來。

              在以上的程序代碼中,考慮到單片機系統(tǒng)的RAM限制,不能像一些實時OS那樣將任務棧建立在RAM中。筆者將任務棧建立在代碼空間,因而不能在程序運行時動態(tài)地加入任務,因此要求在程序編譯時,任務棧已經(jīng)確定。同時,定義一組計數(shù)值旗標time_val,記錄程序運行時的時間量,并在一個定時器中斷中對其進行刷新。改變時間片刷新中斷過程語句Time_Counter:=Time_Unit;中的Time_Unit,可以改變系統(tǒng)時間片的刷新粒度,一般這個值由系統(tǒng)的最小時間度量值確定。

              同時,由任務的執(zhí)行流程可知,此種系統(tǒng)構(gòu)造并沒有改變其前/后臺系統(tǒng)的性質(zhì),只是對后臺邏輯操作序列進行了有效管理。同時,如果將任務執(zhí)行流程進行一些更改,并保證時間片小的任務前置,如下述程序。

              do{
                for(cnt=0;cntproc_cnt;cnt++){
                  if(!time_val[cnt]){
                    time_val[cnt]=Op[cnt].ms_count;
                    Op[cnt].proc();
                    break; //執(zhí)行完成后,重新進行優(yōu)先調(diào)度
                  }
                }
              }while(1);


            上一頁 1 2 下一頁

            評論


            相關(guān)推薦

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

            關(guān)閉