新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > IC卡電表C語言程序結構性能分析

        IC卡電表C語言程序結構性能分析

        作者: 時間:2012-05-30 來源:網絡 收藏

         則系統變為一個以執行頻率為優先級的任務調度系統。當然,設置此種方式得非常小心,并要注意時間片的分配,如果時間片過小,則可能導致執行頻率較低的任務難以被執行;而如果存在兩個同樣的時間片,則更加危險,可能導致第二個具有相同時間片的任務不被執行,因而,時間片的分配要合理,并保證其唯一性。

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

        2 與任務拆分

          以上兩種任務管理方式,前一種按任務棧的順序與時間片的大小依次進行調度,暫且稱其為流水作業調度;而后一種,且稱其為頻率優先調度。兩種方式各有優缺點。流水作業調度的各任務具有等同優先級,時間片一到即會被按序調用,時間片大小的次序與唯一性不作要求;缺點是可能導致時間片小的,即要求執行得較快的任務等待過長的時間。頻率優先調度的各任務按其時間片的大小,即執行頻率劃分優先級,時間片小的任務,其執行頻率高,總是具有較高的優先權,但時間片的分配得協調,否則可能會導致執行頻率低的任務長時間等待。

          要特別注意的是,兩種方式都有可能導致一些任務長時間等待,時間片所設定的時間也因此不能作為精確時間的依據,根據系統的要求或需要,甚至要在任務執行過程中進行某些保護工作,如中斷屏蔽等,因而在進行任務規劃時要注意。如果一個任務較繁瑣或可能要等待很長時間,則應當考慮任務的拆分,把一個較大的任務細化為較小的任務,把一個費時長的任務劃分為多個費時小的任務,協同完成其功能。如在等待時間長的情況下,可附加一個定時任務,定時任務到則發送一個消息旗標,主過程沒有檢測到消息旗標就馬上返回,否則繼續執行。下面是示例代碼,假定該任務將等待很長時間,現將其拆分為兩個任務proc1與proc2協同完成原來的工作,proc1每100個時間單位執行一次,而proc2每200個時間單位執行一次。

          //定義兩個任務,并將其加入到任務棧中。
          code _op_ Op[proc_cnt]={…,{proc1,100},{proc2,200}};
          data int time1_Seg; //定義一個全局旗標
          //任務實現
          void proc1(void){
            if (time1_Seg)
              exit;
            else
              time1_Seg=const_Time1; //如果時間到了,則恢復初值并
                          //接著執行下列代碼。
            …             //任務實際執行代碼
          }

          void proc2(void){
            if(time1_Seg)
            time1_Seg--;
          }

          由上例可以看出,任務拆分后,幾乎不占過多的CPU時間,使得任務的等待時間大減,讓CPU有足夠的時間進行任務管理與調度。同時也讓程序的性與可讀性大為加強。

        結語

          基于上述思路與工作程序進行全部改寫后,系統的得到了很大改善。全部編寫完成后,程序代碼量約為3KB多一點,可見此種結構的程序構造并不會造成很大的系統開銷(大部分開銷是由于使用C的結果),卻使開發得到了簡化。這只要將系統細分為一系列任務,然后加入到任務棧進行編譯即可,很適合小容量單片機系統的開發,而筆者也在多個系統中成功地應用了此種結構。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 金寨县| 海晏县| 阳山县| 南部县| 阿坝县| 阜南县| 墨竹工卡县| 阜城县| 榕江县| 容城县| 上蔡县| 灵川县| 来凤县| 宁明县| 高要市| 左贡县| 叙永县| 光山县| 新泰市| 湘乡市| 东乌珠穆沁旗| 忻城县| 莲花县| 静乐县| 徐闻县| 沛县| 开阳县| 尚志市| 越西县| 顺义区| 崇阳县| 印江| 鸡西市| 施甸县| 裕民县| 沾化县| 洪湖市| 大足县| 商洛市| 特克斯县| 屯留县|