久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團論壇單片機專區單片機初中級 → 單片機代碼優化深入討論


  共有8068人關注過本帖樹形打印

主題:單片機代碼優化深入討論

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
單片機代碼優化深入討論  發帖心情 Post By:2010-12-7 13:56:33

本人在優化定時器和計數器的中斷處理函數中總結了一下經驗,才有自言自語格式:圖片點擊可在新窗口打開查看
1、優化代碼采用匯編就是啦,何必在用C語言呢?
答:代碼的優化是建立在于程序結構最優化之上的,好的程序結構,代碼優化才有價值,是優中優;反之糟糕的程序結構,代碼優化只能在最差的程序結構中得到最好代碼,是差中優。所以優中優>差中優。C語言是一種高級語言(有的叫中級語言)在描述程序結構的與匯編沒有區別,更直觀。
2、現在單片機速度很快,為什么要優化的程序結構呢?
答:比如我在編寫定時器和計數器的程序的時候,由于這個函數使用頻繁,這個中斷以后還要加入類似PLC的IO數據刷新程序(把PLC程序的結果送入單片機的IO端口,或從IO端口中讀入數據)和系統變量數據函數(如秒脈沖,100ms秒脈沖,等),所以這個中斷函數負擔很重。所以每個算法必須最優化,F在單片機速度很快,但是具體某一個固定功能的函數優化一下,可以把單片機資源更多的用于用戶程序。比如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正好)。希望對大家有參考作用

支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

單片機代碼優化深入討論








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
欧美日韩免费高清| 欧美一区二区三区精品| 欧美中文字幕亚洲一区二区va在线| 久久综合五月天婷婷伊人| 亚洲午夜精品网| 91免费版黄色| 日韩丝袜情趣美女图片| 日本午夜精品视频在线观看| 精品午夜一区二区| 久久综合久久久久88| 久久精品国产亚洲aⅴ| 日本三级中国三级99人妇网站| 26uuu亚洲综合色欧美| 国内精品国产成人国产三级粉色| 天堂一区二区三区| 国产精品久久久久久久裸模| 成人app网站| 在线成人免费视频| 蜜臀a∨国产成人精品| 日本精品一区二区三区视频 | 自拍偷在线精品自拍偷无码专区| 不卡的av网站| 欧美一区二区三区在线| 久久91精品国产91久久小草| 伊人久久婷婷色综合98网| 国产精品高潮呻吟久久| 不卡日韩av| 久久久久久毛片| www.综合网.com| 欧美一个色资源| 国产99一区视频免费| 欧美人xxxx| 韩国av一区二区三区在线观看| 亚洲国产日韩美| 亚洲成av人**亚洲成av**| 欧洲国产精品| 亚洲午夜免费福利视频| 亚洲精品乱码视频| 天天亚洲美女在线视频| 曰韩不卡视频| 秋霞午夜av一区二区三区| 在线视频中文字幕一区二区| 另类人妖一区二区av| 精品视频免费在线| 国产一区二区三区久久久| 欧美色视频在线| 国产成人在线视频播放| 欧美www视频| 91蜜桃视频在线| 欧美国产日韩a欧美在线观看 | 777a∨成人精品桃花网| 国产99久久久国产精品| 日韩精品一区二区三区四区视频 | 色猫猫国产区一区二在线视频| 天堂va蜜桃一区二区三区| 色av成人天堂桃色av| 国内久久精品视频| 精品国产一区二区三区四区四 | 欧美欧美欧美欧美| 国产成人三级在线观看| 精品国产乱码久久久久久久| 国产精品久久波多野结衣| 1024精品合集| 亚洲人久久久| 国产一区二区三区黄视频 | 国产精品国产三级国产a| 欧美主播一区二区三区美女 久久精品人 | 亚洲日本韩国一区| 在线国产伦理一区| 国产精品亚洲午夜一区二区三区 | 久久嫩草精品久久久久| 成人羞羞视频免费| 亚洲欧美另类综合偷拍| 在线观看网站黄不卡| 成人白浆超碰人人人人| 中文字幕制服丝袜成人av| 亚洲精品成人自拍| 精久久久久久久久久久| 2024国产精品| 欧美午夜视频在线| 久久精品国产一区二区| 久久天天做天天爱综合色| 日韩中文一区二区三区| 国产乱色国产精品免费视频| 国产亚洲精品中文字幕| 亚洲精品自在在线观看| 国产成人自拍在线| 亚洲色欲色欲www在线观看| 欧美午夜精品一区二区三区| 91日韩精品一区| 三级影片在线观看欧美日韩一区二区| 欧美一区二区三区免费大片| 免费在线国产精品| 国产精品夜夜嗨| 亚洲毛片av在线| 91精品久久久久久蜜臀| 麻豆91av| 成人aaaa免费全部观看| 天天做天天摸天天爽国产一区| 欧美一区二区高清| 无遮挡亚洲一区| 91网站在线观看视频| 日本aⅴ精品一区二区三区| 国产亚洲精久久久久久| 在线一区二区三区| 国产综合欧美在线看| 国产最新精品精品你懂的| 亚洲精品日产精品乱码不卡| 欧美一区二区三区在线观看视频| 欧美伦理一区二区| 不卡视频免费播放| 日本不卡高清视频| 综合中文字幕亚洲| 精品嫩草影院久久| 色狠狠色狠狠综合| 久久久99爱| www.亚洲色图.com| 麻豆精品一区二区av白丝在线| 1024精品合集| 久久久久久久久久看片| 欧美日韩精品二区第二页| 日韩高清av| 国产精品视频入口| 成人黄色国产精品网站大全在线免费观看 | 日韩成人伦理电影在线观看| 国产精品丝袜91| 欧美一区二区三区在线| 在线观看福利一区| 欧美激情www| 99久久99久久精品国产片| 国产在线一区二区综合免费视频| 玉足女爽爽91| 国产精品久久久久久久久久免费看| 91精品欧美综合在线观看最新| 亚洲欧美影院| 久久久www免费人成黑人精品| jlzzjlzz亚洲日本少妇| 久久精品国产在热久久| 亚洲va欧美va人人爽| 日韩毛片一二三区| 国产婷婷色一区二区三区四区| 欧美一区二区视频网站| 欧美写真视频网站| 一本在线高清不卡dvd| 日韩伦理一区二区三区av在线| 精品国产日本| 国产丝袜不卡| 国产91精品入口17c| 99精品桃花视频在线观看| 国产河南妇女毛片精品久久久 | 欧洲亚洲一区| 精品久久久久久中文字幕动漫| 91丝袜呻吟高潮美腿白嫩在线观看| 国产夫妻精品视频| 国产高清精品久久久久| 国产麻豆成人传媒免费观看| 另类小说一区二区三区| 麻豆精品在线看| 美女性感视频久久| 久久精品国产亚洲5555| 免费在线成人网| 日韩—二三区免费观看av| 日韩精品欧美精品| 美女爽到高潮91| 国产在线视频精品一区| 国产一区 二区| 国产成人av网站| 成人性生交大片免费看视频在线 | 欧美一区二区在线视频观看| 欧美黄色直播| 婷婷五月色综合| 伊人久久99| 欧美日韩在线观看一区二区| 欧美三级电影在线观看| 欧美一区二区三区四区久久 | 99精品视频在线观看免费| www.日韩av| av资源一区二区| 美日韩免费视频| 亚洲图片都市激情| 欧美日免费三级在线| 日韩一区二区三区视频| 久久久综合网站| 亚洲日本电影在线| 亚洲成av人片在线观看无码| 理论电影国产精品| 粉嫩绯色av一区二区在线观看| 99精品久久免费看蜜臀剧情介绍| 超碰97在线资源| 日韩国产精品一区二区| 欧美午夜电影网| 日韩欧美一级二级三级| 国产日本欧美一区二区| 一级女性全黄久久生活片免费| 日韩中文字幕91| 成人午夜在线视频| 精品欧美国产| 91极品视觉盛宴| 337p日本欧洲亚洲大胆精品| 亚洲天堂精品在线观看|