在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 消費電子 > 設計應用 > 占用式和非占用式程序結(jié)構分析

            占用式和非占用式程序結(jié)構分析

            作者: 時間:2018-08-15 來源:網(wǎng)絡 收藏

            最近剛把 DYS388 項目了結(jié),期間寫了不少程序,寫著寫著想到了一下東西,于是總結(jié)了一下。

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

            一、什么是占用式程序

            一個進程在一個時刻只能處理一個任務。

            每個任務是為了完成一個功能,如果這個功能的實現(xiàn)過程是一直占用進程處理資源的話,就稱這個任務函數(shù)是占用式程序結(jié)構。

            最常見的占用式程序結(jié)構就是延時函數(shù)了,比如我最常用的5ms延時函數(shù)

            void delay5(unsigned char n)

            {

            unsigned int i;

            for(;n>0;n--)

            for(i=4700;i>0;i--); //12MHz,1T

            }

            在完成5ms功能過程中是一直占用調(diào)用它的進程處理資源的,在此期間不能進行其它任務。

            還有一個很常見的占用式程序——數(shù)碼管掃描,不過在這里我不舉數(shù)碼管掃描的例子,而舉這次在DYS388中使用的8*8彩色點陣屏的掃描程序:

            void refresh7()

            {

            unsigned char r;

            for(r=0;r8;r++) p=>

            {

            //掃描紅色

            DPw = ~(0x01

            DPr = ~vm7r[r];//送入R燈IO接口顯示

            DELAY7 (light7);//顯示時間長度

            DPw=0xff;

            DPr=0xff;

            DPg=0xff;

            DPb=0xff;

            DELAY7 (32-light7);//滅燈時間長度

            //為了簡潔,這里把綠色和藍色的掃描程序省略,它們的結(jié)構和紅色掃描是一樣的

            }

            }

            這個函數(shù)是7色模式下的屏幕掃描程序,調(diào)用一次此函數(shù)會把整個屏幕掃描一遍。

            r代表行數(shù),r循環(huán)8次代表屏幕的8個行;在每次循環(huán)里,先導通對應的行和需點亮的燈,然后延時light7個單位,再關閉所有顯示,再延時32-light7個單位。

            二、占用式程序的缺點

            占用式程序最大的缺點就是執(zhí)行時間太長,耽誤對其它任務的響應。另外就是資源浪費,很多時間浪費在執(zhí)行中的延時上。

            當然,可以在這些占用式程序中嵌入其它代碼以及時處理其它任務,但是這樣會造成程序結(jié)構混亂,嵌入的其它代碼還會影響本程序的執(zhí)行。如果嵌入的代碼功能簡單還好,如果功能復雜,尤其是當嵌入的代碼也是占用式的,就會嚴重影響程序執(zhí)行速度。

            三、對占用式程序的改造

            在此以DYS388的掃描程序為例,對其進行改造。

            首先,每次調(diào)用就掃描8行,耗時太長,現(xiàn)將其改成每次掃描一行:

            void refresh7()

            {

            static unsigned char r=0;

            //掃描紅色

            DPw = ~(0x01

            DPr = ~vm7r[r];//送入R燈IO接口顯示

            DELAY7 (light7);//顯示時間長度

            DPw=0xff;

            DPr=0xff;

            DPg=0xff;

            DPb=0xff;

            DELAY7 (32-light7);//滅燈時間長度

            //為了簡潔,這里把綠色和藍色的掃描程序省略,它們的結(jié)構和紅色掃描是一樣的

            r++;

            if(r==8)

            r=0;

            }

            用一個靜態(tài)變量r來記憶行數(shù),這樣每次調(diào)用此函數(shù)只需掃描一行,執(zhí)行速度是原來的8倍,可以比較快地響應其它任務了。

            但是這樣還不夠,每次掃描都會掃描三種顏色,時間還是有點長,下面再次改造,改為每次只掃描一種顏色:

            void refresh7()

            {

            static unsigned char r=0;

            static unsigned char flagrgb=0; //當前需要點亮的顏色,0-R,1-G,2-B

            flagrgb++;

            if(flagrgb==3) //說明三種顏色都掃描完了

            {

            flagrgb=0; //從紅色開始掃描

            r++; //開始掃描下一行

            if(r==8) //如果發(fā)現(xiàn)行都掃描結(jié)束則從第行開始掃描

            r=0;

            }

            switch(flagrgb)

            {

            case 0: //掃描紅色

            DPw = ~(0x01

            DPr = ~vm7r[r];//送入R燈IO接口顯示

            DELAY7 (light7);//顯示時間長度

            DPw=0xff;

            DPr=0xff;

            DPg=0xff;

            DPb=0xff;

            DELAY7 (32-light7);//滅燈時間長度

            break;

            case 1: //掃描綠色

            //省略代碼

            break;

            case 2: //掃描藍色

            //省略代碼

            break;

            }

            }

            改造完成之后,執(zhí)行時間再次縮短,變成了剛才的1/3。

            這下還沒完,我們發(fā)現(xiàn)每次掃描中都有延時,延時過程中什么也不做,這是極大的浪費,我們需要再此改造,把延時去掉:


            上一頁 1 2 下一頁

            關鍵詞:

            評論


            相關推薦

            技術專區(qū)

            關閉