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


曙海教育集團(tuán)論壇單片機(jī)專區(qū)單片機(jī)初中級 → 單片機(jī)代碼優(yōu)化深入討論


  共有10586人關(guān)注過本帖樹形打印

主題:單片機(jī)代碼優(yōu)化深入討論

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


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

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

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

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

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

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

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

由于本人水平有限,舉例采用的是8051(因為我的電腦是P3 800,運(yùn)行proteus正好)。希望對大家有參考作用

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

返回版面帖子列表

單片機(jī)代碼優(yōu)化深入討論








簽名
毛片网站在线看_天堂俺去俺来也www久久婷婷_日韩av免费网站_18性欧美xxxⅹ性满足_一区二区三区韩国免费中文网站 _性xx色xx综合久久久xx_999亚洲国产精
欧美不卡在线视频| 国产精品的网站| 欧美日韩一区中文字幕| 久久综合中文字幕| 久久超碰97中文字幕| 欧美日韩电影在线播放| 亚洲一卡二卡三卡四卡无卡久久| 免费一级欧美片在线观看| 欧美日韩不卡一区| 成人免费高清在线观看| 久久久精品国产99久久精品芒果| 青青草国产精品亚洲专区无| 亚洲欧美一区二区三区国产精品| 成人国产精品视频| 中文字幕不卡在线播放| 国产成人精品亚洲午夜麻豆| 欧美精品一区二区在线播放| 成人一区二区视频| 毛片一区二区三区| 国产精品久久久久aaaa樱花| 欧美精品一区二区三区久久久 | 亚洲图片欧美综合| 欧美一区二区三区的| 蜜臀精品一区二区三区在线观看| 亚洲一区二区三区在线| 一区二区三区在线视频免费| 欧美一区二区三区四区五区 | 久久国产三级精品| 日本不卡视频一二三区| 手机精品视频在线观看| 3atv在线一区二区三区| 国产麻豆欧美日韩一区| 欧美激情一区三区| 亚洲国产高清aⅴ视频| 国产精品色婷婷久久58| 欧美一区二区三区视频免费播放| 欧美日本国产视频| 欧美精品久久久久久久久老牛影院| 老司机精品视频一区二区三区| 日本午夜精品视频在线观看| 欧美国产丝袜视频| 国产精品久久一级| 亚洲欧美在线视频观看| 欧美一区二区在线免费播放| 欧美一区二区三区在线观看| 久久久精品国产免费观看同学| 国产精品电影院| 亚洲国产欧美在线人成| 秋霞国产午夜精品免费视频| 国产一区二区三区四区五区美女 | 成人网页在线观看| 一本大道久久精品懂色aⅴ| 无码av中文一区二区三区桃花岛| 久久嫩草精品久久久久| 日本一区二区三区高清不卡| 欧美一区二区精品在线| 久久综合久久鬼色| 自拍偷拍欧美精品| 中文字幕制服丝袜一区二区三区 | 成人综合婷婷国产精品久久 | 国产欧美日韩另类视频免费观看 | 亚洲男人电影天堂| 蜜臀av国产精品久久久久| 国产91精品一区二区麻豆网站| 青青草成人在线观看| 国产成人在线视频网站| 欧美年轻男男videosbes| 国产亚洲精品bt天堂精选| 日韩精品一区二区三区在线播放| 欧美精品久久一区| 中文字幕亚洲视频| 蜜臀av亚洲一区中文字幕| 在线看国产日韩| 日本乱人伦aⅴ精品| 99国产一区二区三精品乱码| 成人免费视频caoporn| 欧美一区二区三区性视频| 国产精品久久久久永久免费观看 | 国产精品一区二区无线| 激情综合网最新| 极品瑜伽女神91| 欧美日韩国产在线观看| 中文字幕一区二区三区av| 激情综合网最新| 日韩欧美电影一区| 亚洲一级二级在线| 色网站国产精品| 17c精品麻豆一区二区免费| 国产成人一区二区精品非洲| 日韩免费视频一区二区| 午夜精品久久久久久| 欧美性猛片xxxx免费看久爱| 欧美少妇bbb| 中文字幕一区在线观看视频| 国产一区二区三区免费看| 日韩欧美一区二区在线视频| 久久久久97国产精华液好用吗| 五月天久久比比资源色| 91国产福利在线| 亚洲女人****多毛耸耸8| 成人av网站在线观看| 中文字幕电影一区| av亚洲精华国产精华| 欧洲色大大久久| 亚洲视频小说图片| 色先锋资源久久综合| 一区二区三区在线观看视频| 色婷婷久久99综合精品jk白丝| 国产精品久久久久久久久免费丝袜 | 一区二区三区中文字幕精品精品| 成人av在线一区二区三区| 国产精品情趣视频| caoporn国产一区二区| 日韩毛片视频在线看| 色婷婷av一区二区三区大白胸| 亚洲另类春色国产| 国产曰批免费观看久久久| 精品久久久久av影院| 国产一区二区在线观看视频| 欧美激情综合五月色丁香小说| 成人免费高清视频| 一区二区三区中文字幕| 日韩一区二区三区电影在线观看| 奇米影视一区二区三区| 久久亚洲私人国产精品va媚药| 成人黄色小视频| 一区二区三区四区在线免费观看| 欧美日韩一区二区在线观看| 麻豆一区二区99久久久久| www久久久久| 色狠狠一区二区| 天涯成人国产亚洲精品一区av| 精品国产乱码久久久久久图片| 成人app在线观看| 天堂蜜桃91精品| 国产日韩三级在线| 欧美色网一区二区| 国产成人av一区二区三区在线| 一区二区三区中文字幕电影| 精品久久一二三区| 99精品一区二区三区| 日韩中文字幕不卡| 国产精品初高中害羞小美女文| 欧美日本国产一区| aaa国产一区| 日本sm残虐另类| 中文字幕视频一区| 精品电影一区二区| 欧美性一级生活| 国产99一区视频免费| 午夜一区二区三区在线观看| 色婷婷国产精品| 国产精品一区在线| 蜜臀av亚洲一区中文字幕| 一区二区三区四区激情| 国产亚洲精品资源在线26u| 91精品国产一区二区人妖| 91在线精品一区二区| 久久99精品国产.久久久久| 亚洲欧美日韩在线| 国产三级三级三级精品8ⅰ区| 欧美高清激情brazzers| 色狠狠桃花综合| 成人av电影在线| 国产精品亚洲一区二区三区在线| 免费成人深夜小野草| 亚洲一区二区在线观看视频| 国产人久久人人人人爽| 日韩欧美国产成人一区二区| 欧美精品一级二级| 欧美私人免费视频| 一本大道久久a久久精品综合| 不卡的av中国片| 成人av在线播放网站| 风间由美性色一区二区三区| 精品一区二区久久| 青草国产精品久久久久久| 天天影视色香欲综合网老头| 亚洲午夜精品在线| 亚洲高清免费观看高清完整版在线观看| 专区另类欧美日韩| 亚洲蜜臀av乱码久久精品蜜桃| 成人欧美一区二区三区| 综合av第一页| 亚洲精品乱码久久久久久久久| 国产精品久久久久久亚洲伦| 国产欧美久久久精品影院| 国产欧美精品区一区二区三区| 久久精品亚洲乱码伦伦中文| 久久精品男人天堂av| 欧美国产综合色视频| 欧美国产欧美综合| 亚洲欧美偷拍卡通变态| 亚洲韩国一区二区三区| 日韩在线一区二区| 麻豆成人综合网| 国产精品一区专区| 91欧美一区二区| 国产伦理精品不卡| 国产麻豆精品一区二区|