最新免费av在线观看,亚洲综合一区成人在线,中文字幕精品无码一区二区三区,中文人妻av高清一区二区,中文字幕乱偷无码av先锋

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

大家來發(fā)表一下WINAVR(GCC)的使用經(jīng)驗(yàn)

作者:xzliu 欄目:單片機(jī)
大家來發(fā)表一下WINAVR(GCC)的使用經(jīng)驗(yàn)
一直感覺ICC比較好用,最近好多人都在鼓動(dòng)用GCC,說它多好多好,似乎用GCC的人都理直氣壯的,禁不住誘惑試著用了一星期,可是我還沒有覺的好用,好好的程序優(yōu)化后就沒顯示了,甚至鍵盤也亂套了。
在ICC6.31A中,不優(yōu)化:51%;  優(yōu)化:47%
WINAVR        不優(yōu)化:70%;  s優(yōu)化:41%,但是不能用!
以上僅對FLASH,所以個(gè)人認(rèn)為GCC不優(yōu)化時(shí)的編譯效率并不高 ? 相信與我一樣遭遇的肯定不少,但是有關(guān)解決優(yōu)化問題的資料非常少,所以請大家發(fā)表一些使用經(jīng)驗(yàn),也包括其他方面。斑竹最好能開個(gè)專題。還有那個(gè)到處傳播的hotpower也來發(fā)表一下。

以下是我搜集的一些優(yōu)化注意事項(xiàng):
1。全局變量如果在中斷或子程序調(diào)用,定義時(shí)加 volatile限定;
2。中斷中用if else,不要用SWITCH? 找不到原貼了,沒法驗(yàn)證。

。。。

2樓: >>參與討論
zsmbj
注意第一點(diǎn)即可!否則將被優(yōu)化掉。
 
3樓: >>參與討論
hotpower
暈到~~~我倒成了罪人了...
說實(shí)話我實(shí)戰(zhàn)沒一個(gè)是用C寫的,全是用C++寫的.包括小容量的AVR.

由于數(shù)據(jù)和代碼都封裝在類中,一般很難遇到需要加volatile限定的時(shí)候.

最容易暈的變量一般發(fā)生在函數(shù)和中斷共用的時(shí)候.

例:
  此變量在主函數(shù)中+-等運(yùn)算,即寫操作.在中斷處理時(shí)測試變量,即讀操作.
這時(shí)優(yōu)化最容易搞暈,即認(rèn)為單寫或單讀都無意義.

這種變量最好加volatile限定為妙.

加volatile限定"原則":
   只要某變量你認(rèn)為可能發(fā)生單寫或單讀,最好加volatile限定.

反正C++很少發(fā)生這種暈事,我只好在這里先賠罪好了.

都是"大人"了,應(yīng)該有主見了,好壞自己體會就是了...

4樓: >>參與討論
javie
好東西啊
 
5樓: >>參與討論
hudaidai
優(yōu)化是不會影響程序正確性的
出問題只能說明程序本來就有問題。

關(guān)于volatile的用法請搜索下本版的精華貼。

6樓: >>參與討論
xiaoIIhei
好象浮點(diǎn)數(shù)轉(zhuǎn)ASCII碼不行
sprintf函數(shù),不能轉(zhuǎn)float到ASCII碼,我最后只好自己寫這部分轉(zhuǎn)換程序,比較郁悶,其它還不錯(cuò)

7樓: >>參與討論
lvgaopan
優(yōu)化后程序不能用,肯定是你的程序結(jié)構(gòu)不合理
優(yōu)化后程序不能用,肯定是你的程序結(jié)構(gòu)不合理

8樓: >>參與討論
testcode
dtostrf
#include <stdlib.h>
CHAR* dtostrf (double __val, CHAR __width, CHAR __prec, CHAR * __s)

9樓: >>參與討論
fujianhui
優(yōu)化真的煩的。

AVR-GCC的優(yōu)化好象很有問題。我的程序用什么優(yōu)化都不行的.01優(yōu)化后也不行呢!這是沒有優(yōu)化過的語句:           
                         DDRA=0Xfe;
+00000086:   EF8E        LDI     R24,0xFE         Load immediate
+00000087:   9380003A    STS     0x003A,R24       Store direct to data space
37:           sbi(PORTA,1);
+00000089:   9180003B    LDS     R24,0x003B       Load direct from data space
+0000008B:   6082        ORI     R24,0x02         Logical OR with immediate
+0000008C:   9380003B    STS     0x003B,R24       Store direct to data space
38:           while(bit_is_set(PINA,0))
+0000008E:   91800039    LDS     R24,0x0039       Load direct from data space
+00000090:   2799        CLR     R25              Clear Register
+00000091:   7081        ANDI    R24,0x01         Logical AND with immediate
+00000092:   7090        ANDI    R25,0x00         Logical AND with immediate
+00000093:   9700        SBIW    R24,0x00         Subtract immediate from word
+00000094:   F061        BREQ    PC+0x0D          Branch if equal
40:           DDRC=0x3D;                //PC口設(shè)為輸出高電平,燈滅
+00000095:   E38D        LDI     R24,0x3D         Load immediate
+00000096:   93800034    STS     0x0034,R24       Store direct to data space
41:            DDRD=0X80;
+00000098:   E880        LDI     R24,0x80         Load immediate
+00000099:   93800031    STS     0x0031,R24       Store direct to data space
42:            PORTD=0XFF;
+0000009B:   EF8F        SER     R24              Set Register
+0000009C:   93800032    STS     0x0032,R24       Store direct to data space
44:           PORTA=0X00;}

這是優(yōu)化過的語句:
36:           DDRA=0Xfe;
+0000007C:   EF8E        LDI     R24,0xFE         Load immediate
+0000007D:   BB8A        OUT     0x1A,R24         Out to I/O location
37:           sbi(PORTA,1);
+0000007E:   9AD9        SBI     0x1B,1           Set bit in I/O register
44:           PORTA=0X00;}
+0000007F:   9BC8        SBIS    0x19,0           Skip if bit in I/O register set
+00000080:   C009        RJMP    PC+0x000A        Relative jump
+00000081:   E38D        LDI     R24,0x3D         Load immediate
+00000082:   E890        LDI     R25,0x80         Load immediate
+00000083:   EF2F        SER     R18              Set Register
40:           DDRC=0x3D;                //PC口設(shè)為輸出高電平,燈滅
+00000084:   BB84        OUT     0x14,R24         Out to I/O location
41:            DDRD=0X80;
+00000085:   BB91        OUT     0x11,R25         Out to I/O location
42:            PORTD=0XFF;
+00000086:   BB22        OUT     0x12,R18         Out to I/O location
+00000087:   BA1B        OUT     0x1B,R1          Out to I/O location
+00000088:   99C8        SBIC    0x19,0           Skip if bit in I/O register cleared
+00000089:   CFFA        RJMP    PC-0x0005        Relative jump


全亂了 :while語句也沒了。
我才有1級優(yōu)化呢。
用2以上的話。什么delay()都沒了。
AVR-GCC的優(yōu)化真是怪呀。


10樓: >>參與討論
xzliu
俺以后暫時(shí)用ICC了
俺現(xiàn)在感覺ICC還比較好用,優(yōu)化也沒問題?墒怯肎CC優(yōu)化就不行了,也是01優(yōu)化也不行,有時(shí)多個(gè)調(diào)用就什么也顯示不出來了,鍵盤也亂套了,有時(shí)間再研究研究

11樓: >>參與討論
hudaidai
To fujianhui:
你的程序avr-gcc優(yōu)化沒有問題,甚至可以說相當(dāng)精妙,就說這個(gè)while循環(huán):

while(bit_is_set(PINA,0))
{
    DDRC=0x3D;                //PC口設(shè)為輸出高電平,燈滅
    DDRD=0X80;
    PORTD=0XFF;
    PORTA=0X00;
}

+0000007F:   9BC8        SBIS    0x19,0           Skip if bit in I/O register set
            /* 如果循環(huán)條件開始就不滿足,就不必做準(zhǔn)備工作的無用功了 */
+00000080:   C009        RJMP    PC+0x000A        Relative jump

            /* 準(zhǔn)備工作:為了不在循環(huán)中反復(fù)地裝立即數(shù) */
+00000081:   E38D        LDI     R24,0x3D         Load immediate
+00000082:   E890        LDI     R25,0x80         Load immediate
+00000083:   EF2F        SER     R18              Set Register
            /* 循環(huán)體內(nèi)容從這地方開始 */
40:           DDRC=0x3D;                //PC口設(shè)為輸出高電平,燈滅
+00000084:   BB84        OUT     0x14,R24         Out to I/O location
41:            DDRD=0X80;
+00000085:   BB91        OUT     0x11,R25         Out to I/O location
42:            PORTD=0XFF;
+00000086:   BB22        OUT     0x12,R18         Out to I/O location
            /* R1是avr-gcc的常0寄存器:PORTA=0X00 */
+00000087:   BA1B        OUT     0x1B,R1          Out to I/O location
            /* 判斷跳出循環(huán)的條件 */
+00000088:   99C8        SBIC    0x19,0           Skip if bit in I/O register cleared
            /* 繼續(xù)循環(huán) */
+00000089:   CFFA        RJMP    PC-0x0005        Relative jump

請注意:循環(huán)一次只需要執(zhí)行6條指令,7個(gè)機(jī)器周期,這難道不正說明avr-gcc的優(yōu)化效率驚人嗎?


12樓: >>參與討論
qjy_dali
術(shù)業(yè)有專攻
需要時(shí)間哪

13樓: >>參與討論
lvgaopan
偶的程序全用-os優(yōu)化
從來沒出過什么問題

14樓: >>參與討論
zhiwei
gcc的工程管理
我在gcc下新建一個(gè)工程后,添加了多個(gè)文件,進(jìn)行調(diào)用的時(shí)候都說找不到函數(shù),我都包含了*.h了啊,是不是對多文件管理不好啊?

15樓: >>參與討論
mxh0506
用的什么版本的GCC呀?
我覺得還不錯(cuò),除了生成代碼大一些,某些頭文件有錯(cuò)等一些小問題之外,沒發(fā)現(xiàn)什么影響使用的大錯(cuò)誤

16樓: >>參與討論
Anitya
WinAVR 挺好的.我們一直用它
avr-libc Manual 需要經(jīng)?.看了N+N遍都還能學(xué)到東西

17樓: >>參與討論
AIRWILL
本人上次做了個(gè)對比
是 KEIL 移植過來的程序, gcc 效率要高些

18樓: >>參與討論
hotpower
哈哈...有點(diǎn)暈了---祝賀自己從今起徹底拋棄PN
昨看抽簽現(xiàn)在暈到了,...

祝賀自己從今起徹底拋棄PN

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
一個(gè)初學(xué)AVR的煩惱
簡單的熔絲設(shè)置
AVR IO操作
在ICC中如何訪問FLASH內(nèi)的特定地址?
請問CodeVisionAVR 中的delay_ms函數(shù)有關(guān)中斷嗎?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 www.udpf.com.cn 浙ICP證030469號