毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精

以文本方式查看主題

-  曙海教育集團論壇  (http://www.scb-ycwb.com/bbs/index.asp)
--  單片機初中級  (http://www.scb-ycwb.com/bbs/list.asp?boardid=55)
----  單片機代碼優化深入討論  (http://www.scb-ycwb.com/bbs/dispbbs.asp?boardid=55&id=2204)

--  作者:wangxinxin
--  發布時間:2010-12-7 13:56:33
--  單片機代碼優化深入討論
本人在優化定時器和計數器的中斷處理函數中總結了一下經驗,才有自言自語格式:圖片點擊可在新窗口打開查看
1、優化代碼采用匯編就是啦,何必在用C語言呢?
答:代碼的優化是建立在于程序結構最優化之上的,好的程序結構,代碼優化才有價值,是優中優;反之糟糕的程序結構,代碼優化只能在最差的程序結構中得到最好代碼,是差中優。所以優中優>差中優。C語言是一種高級語言(有的叫中級語言)在描述程序結構的與匯編沒有區別,更直觀。
2、現在單片機速度很快,為什么要優化的程序結構呢?
答:比如我在編寫定時器和計數器的程序的時候,由于這個函數使用頻繁,這個中斷以后還要加入類似PLC的IO數據刷新程序(把PLC程序的結果送入單片機的IO端口,或從IO端口中讀入數據)和系統變量數據函數(如秒脈沖,100ms秒脈沖,等),所以這個中斷函數負擔很重。所以每個算法必須最優化。現在單片機速度很快,但是具體某一個固定功能的函數優化一下,可以把單片機資源更多的用于用戶程序。比如PLC的單片機必須解釋用戶程序。必須在定期完成。比如PLC周期是100ms,比如12M的8051,1/10的振蕩周期內完成。1.2M/12=100kHZ,平均下來,10萬指令條不到,還是比較緊張的。稍微好一點的PLC,周期數可以達到10ms。即使采用AVR這種RISC的,在10ms完成一個PLC掃描周期,也是很吃緊的。
3、怎么才能得到最優的程序結構?
答:這個問題很廣,算法=程序+數據結構。數據結構優化,可以學習數據結構的書籍,里面全是最優的結構,依賴于計算機。程序的優化,一般獨立于計算機,要自己有一個好的思路。
比如我在處理定時器和計數器函數是,畫了狀態圖,根據狀態圖,編程序一目了然,基本是最優結構了。除非開發專用硬件或查表法。請參看我的另一個帖子:http://www.stmfans.com/bbs/viewt ... &extra=page%3D1
4、你的那個帖子,首先發的效率不是還可以嗎?
C語言精簡不等于編譯出來的東西會精簡。
5、為什么呀?
我首先貼出來的的C程序,沒有跟我畫出來的狀態圖一一對應。沒有充分利用各bit量的信息。
比如,定時器從S1轉到S2,只需判斷T_EN=1;維持狀態:T_EN=0
S2轉到S1,只需判斷T_EN=0。S2維持,須判斷T_ACC<T_SET=1。S2轉到S3,須判斷T_ACC<T_SET=0;
S3轉到S1,T_EN=0;S3維持,T_EN=1;這個時候T_ACC<T_SET是個無關量,不需要重復運算了。

我還設置tmp中間量,其實T_OUT的狀態已經表明T_ACC<T_SET=0,tmp是畫蛇添足的,浪費空間。
6、條件表達式不是比if else要好嗎?
在大多情況下,進行簡單的運算,要好一點(微弱),語句復雜的話,編譯出來的東西不一定高效。況且條件表達式中,
無法加入break等語句。
7、我看了關于編程優化的書籍,要減少跳轉的,你后面的程序跳轉很多呀?尤其是那個計數器,嵌套了好幾層呀?
由于很多編程優化的書籍是針對PC機的:減少跳轉,可以提高CPU緩存的命中率。由于緩存速度很快,與CPU同步的。如intel的扣肉
分一級緩存,二級緩存。當跳轉的時候如果跳出了二級緩存的范圍,會到內存中讀取數據,由于內存的速度比CPU慢一個數量級。
所以效率不高。

而我們的單片機編程的時候,flash與RAM都是與CPU同步的。單片機的RAM全部是SRAM(緩存也是SRAM),跳轉只能在單片機的資源以內,相當于PC的CPU中只能在緩存空間內跳。所以單片機的命中率是100%,除非出錯。圖片點擊可在新窗口打開查看OL所以跳轉語句只是單片機的一個普通指令,處理周期數不是最高的,比如51的跳轉都是2個機器周期。比如ADD,SUB,MOV等指令都要2個周期。
8、你后面發的程序,為什么是最優呢?
我把后面的程序由編譯器編譯出來的指令貼出來:
;        d:\\MYDOCU~1\\51_proj\\timer.c:28: if(T0_EN)
        jnb        _T0_EN,00105$   ;對應狀態圖S2   t2
;        d:\\MYDOCU~1\\51_proj\\timer.c:30: if(T0_OUT);
        jb        _T0_OUT,00106$        ;對應狀態圖S2   t2
;        d:\\MYDOCU~1\\51_proj\\timer.c:32: {T0_OUT=++T0_ACC>=T0_SET;}
        inc        _T0_ACC           ;對應狀態圖S2 t1
        clr        c                                t1
        mov        a,_T0_ACC                        t2
        subb        a,#0x14                                t2
        mov  b0,c                                t2
        cpl        c                                t1
        mov        _T0_OUT,c        ;對應狀態圖S3  t2
        sjmp        00106$                                t2
00105$:
;        d:\\MYDOCU~1\\51_proj\\timer.c:36: T0_OUT=0;T0_ACC=0;
        clr        _T0_OUT                ;對應狀態圖S1  t1
        mov        _T0_ACC,#0x00                   t2
00106$:

即使沒采用匯編語言,C編譯器已經為我們產生出來很精簡的語句,當然32至36之間的代碼還可以采用匯編優化。
所以首先程序優化,然后在進行匯編,難度降低了很多。因為程序優化后,C編譯出來的匯編,在進行優化工作量很小了。
其中計數器的代碼變化最大,優化了10行之多。給我可以自己用編譯器試驗一下。

9、這個是最快的嗎?
不是,最快的應該是查表法。對這個定時器來說:
方案一:
輸入:T_EN,T_ACC,T_SET
輸出:T_OUT,T_ACC
建立一個數據表格,然后在中斷函數中用查表法,大概兩條指令搞定。不過占用的空間也是嚇人。圖片點擊可在新窗口打開查看OL

10、在使用if else語句注意什么?
采用if else語句避免()中進行多目運算。也不要進行取反運算,因為這樣代碼會增加好幾行。
如果直接用bit量,這樣編譯器會用 jnb或jb,

由于本人水平有限,舉例采用的是8051(因為我的電腦是P3 800,運行proteus正好)。希望對大家有參考作用
毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精
日韩一级完整毛片| 亚洲精选免费视频| 国内精品国产成人国产三级粉色 | 欧美电影免费观看高清完整版在线 | 亚洲成人1区2区| 日本成人中文字幕在线视频| 日韩一区欧美一区| 亚洲成人先锋电影| 国产a视频精品免费观看| 欧美日韩一卡二卡| 国产喷白浆一区二区三区| 日本不卡一二三| caoporm超碰国产精品| 欧美一区二区三区性视频| 日韩视频免费直播| 一区二区三区在线观看欧美| 国产成人免费在线| 欧洲av在线精品| 国产精品丝袜久久久久久app| 1区2区3区国产精品| 日韩午夜在线播放| 亚洲欧洲成人精品av97| 捆绑变态av一区二区三区| 蜜臀久久99精品久久久画质超高清 | 亚洲综合成人在线视频| 精品综合久久久久久8888| 欧美日韩另类国产亚洲欧美一级| 亚洲欧洲日韩女同| 99国产麻豆精品| 久久久国产精华| 久久av资源网| 2023国产精品| 精品一区二区三区香蕉蜜桃 | 国产欧美日韩在线| 欧美成人一级视频| 亚洲综合成人在线| 另类小说色综合网站| 色婷婷国产精品综合在线观看| 91一区二区三区在线播放| 在线亚洲一区二区| 日韩欧美中文一区二区| 首页亚洲欧美制服丝腿| 成人高清在线视频| 中文字幕av一区二区三区免费看 | 男人操女人的视频在线观看欧美| 91黄色免费看| av网站一区二区三区| 亚洲香肠在线观看| 欧美韩国日本综合| 欧美一级理论片| 激情综合亚洲精品| 国产麻豆精品theporn| 中文字幕 久热精品 视频在线| 欧美日韩一区三区四区| 国产乱子伦视频一区二区三区| 一区二区免费在线| 国产精品―色哟哟| 久久久久国色av免费看影院| 精品视频123区在线观看| 成人激情视频网站| 国产乱人伦偷精品视频不卡| 亚洲成人精品影院| 亚洲最快最全在线视频| 亚洲欧美日韩一区二区| 国产精品私房写真福利视频| 国产欧美日韩一区二区三区在线观看| 精品国产免费人成电影在线观看四季 | 亚洲女与黑人做爰| 国产精品久久久久精k8| 国产欧美一二三区| 欧美国产精品一区二区| 久久综合国产精品| 国产喂奶挤奶一区二区三区| 精品久久久久久最新网址| 欧美制服丝袜第一页| 在线免费观看日本欧美| 在线免费视频一区二区| 在线观看精品一区| 成人久久18免费网站麻豆| 韩国毛片一区二区三区| 久久99精品久久久久久动态图| 久久国产精品色婷婷| 国产成人丝袜美腿| 91网站最新地址| 91传媒视频在线播放| 在线精品视频小说1| 在线一区二区三区做爰视频网站| 色综合久久中文综合久久97| 色综合一个色综合亚洲| 色婷婷av一区二区| 91精品国产一区二区三区| 欧美日韩一级视频| 精品少妇一区二区三区| 久久精品视频一区二区三区| 国产三级欧美三级| 亚洲色欲色欲www| 亚洲成人在线免费| 久久成人免费电影| 大白屁股一区二区视频| 91视视频在线观看入口直接观看www| 日本乱码高清不卡字幕| 日韩久久精品一区| 国产精品素人视频| 日韩精品视频网| 国产suv精品一区二区三区| 一本大道久久a久久综合| 91精品婷婷国产综合久久| 久久综合狠狠综合久久综合88 | 成人av电影观看| 色综合久久综合中文综合网| 日韩欧美成人一区| 国产色婷婷亚洲99精品小说| 亚洲综合在线五月| 久久不见久久见中文字幕免费| 国产麻豆成人传媒免费观看| 欧美午夜电影在线播放| 色婷婷综合久久久久中文 | 亚洲一区二区免费视频| 麻豆精品一区二区| 91一区二区在线| 欧美成人bangbros| 亚洲一区二区三区四区五区黄| 久久国产三级精品| 欧美在线不卡一区| 中文字幕二三区不卡| 麻豆久久久久久| 欧美精品一二三| 国产精品久久久久久亚洲伦| 久久爱www久久做| 欧美日韩精品一区二区在线播放| 国产精品欧美精品| 国模娜娜一区二区三区| 欧美精三区欧美精三区| 亚洲日本一区二区| 国产99久久久久| 精品第一国产综合精品aⅴ| 亚洲最大成人网4388xx| 色婷婷av久久久久久久| 亚洲女同一区二区| av网站免费线看精品| 国产精品国产三级国产aⅴ入口| 精品一区二区三区免费毛片爱| 欧美在线|欧美| 亚洲乱码国产乱码精品精的特点 | 国产精品一区在线观看你懂的| 欧美一区三区四区| 日韩有码一区二区三区| 色丁香久综合在线久综合在线观看| 精品少妇一区二区三区在线视频| 一区二区三区欧美激情| 91网页版在线| 亚洲成年人网站在线观看| 欧美三级电影一区| 肉色丝袜一区二区| 一本大道久久a久久综合| 一区二区三区在线观看欧美| 一本色道久久综合亚洲精品按摩| 国产精品福利一区| 91麻豆swag| 亚洲成人一二三| 日韩美女天天操| 国产98色在线|日韩| 欧美国产丝袜视频| 色婷婷亚洲精品| 亚洲成a人在线观看| 91精品国产高清一区二区三区蜜臀| 视频一区二区不卡| 久久久91精品国产一区二区三区| 国产很黄免费观看久久| 国产精品欧美一级免费| 欧美三级在线视频| 激情综合色播激情啊| 国产日韩精品一区二区三区 | 久久一区二区视频| 成人网在线免费视频| 亚洲一区欧美一区| 91精品国产全国免费观看| 国产一区91精品张津瑜| 国产精品国产自产拍在线| 欧洲中文字幕精品| 国产综合色产在线精品| 亚洲免费在线看| 精品国产1区二区| 在线观看视频一区二区| 寂寞少妇一区二区三区| 亚洲欧洲日产国产综合网| 欧美老女人在线| 成人一道本在线| 日产欧产美韩系列久久99| 中文字幕精品一区二区精品绿巨人| 欧美色倩网站大全免费| 高清在线成人网| 琪琪一区二区三区| 国产欧美一区二区在线| 日韩一区二区三| 91国产免费观看| 成人免费高清视频在线观看| 五月婷婷综合在线| 亚洲视频每日更新| 久久久久久久久久久99999|