久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5293|回復: 5
收起左側

IAR 8051 太聰明了

[復制鏈接]
ID:91350 發表于 2015-10-29 00:36 | 顯示全部樓層 |閱讀模式
    今晚真是個不眠之夜啊,很久沒用C++對單片機編程了,而且以前一直在用IAR For AVR編程,現在用IAR 8051來寫STC的程序,一直都是開最高優化級別,沒發現問題過.今天發現了一個苦B的問題.我在全局定義了一個bool變量,在定時器中斷函數里改變它的值,然后主程序判斷這個值來確定是否進入空閑模式.可是一開優化,馬上變味了.打開反編譯軟件查看生成的代碼,一個while()的循環竟然變成了死循環,無論怎么改變C語法都無法改變生成的結果.想到以前在寫Microsoft C++程序的時候用到過一個關鍵字:volatile , 意思是容易被意想不到改變的變量.添加在變量的聲明以后,while循環回來了.IAR編譯器我真是越來越喜歡了.雖然有時程序會莫名其妙的走樣,可是它的代碼優化方面還是無可比擬的.
C++原程序:volatile bool bStart;
      while(bStart == 0)
         PCON_bit.IDL = 1;//                進入空閑模式
意思是如果沒有程序改變bStart這個變量的話,CPU就繼續休息.如果有程序改變的話就退出循環執行一次主函數.
在沒加volatile時生成的匯編代碼:

Q022C:             ORL   PCON,#01H
                         SJMP  Q022C
壞了,while 循環影子都沒了

聲明volatile后的代碼:

Q0225:      MOV   R0,#56H
                   MOV   A,@R0
                   JZ    Q022D
                   LJMP  Q0196
;===========================================
Q022D:       ORL   PCON,#01H
                   SJMP  Q0225

這回它判斷@R0里的變量值了,56H里的值就是bStart,可愛的sjmp指令也回來了.

好在以前還學習過Microsoft的編程,IAR編譯器才是真正的標準C編譯器,比那些KEIL,ICC好多了,只要我們寫程序的時候嚴謹些,知道CPU這個時候會干什么, 就可以寫出漂亮的程序.
回復

使用道具 舉報

ID:791413 發表于 2021-7-27 16:22 | 顯示全部樓層
21年學keil的路過,c的編譯器應該是早就能volatile了
回復

使用道具 舉報

ID:883242 發表于 2021-7-27 21:15 | 顯示全部樓層
IAR測試過,吊打一切編譯器,包括在ARM平臺上面吊打ARM親兒子RealView編譯器。

但是在8051這個平臺上,IAR效率是不如Keil C51的。

Keil C51認為它的用戶都是不懂volatile這個關鍵字的傻子,所以寫不寫volatile都可以得到想要的結果。
回復

使用道具 舉報

ID:192294 發表于 2022-4-21 14:32 | 顯示全部樓層
用過Keil C51的用戶應該都知道volatile。這個與優化級別有關。優化高而不加volatile一樣會優化忽略掉。


(2830)
回復

使用道具 舉報

ID:1101997 發表于 2023-12-2 08:49 | 顯示全部樓層
這是嵌入式和正常C的區別,KEIL默認變量你會在其他地方去改變它,所以一般并不需要使用volatile。
回復

使用道具 舉報

ID:195496 發表于 2023-12-2 17:45 | 顯示全部樓層
樓上說的有道理
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲美女一区 | 亚洲一区二区在线 | 国语对白永久免费 | 国产一级视频在线观看 | 国产成人毛片 | 国产成人毛片 | 国产福利一区二区三区 | 九九热视频在线 | 亚洲一区二区 | 欧美黄色免费网站 | 日本香蕉视频 | 欧美日韩国产二区 | 欧美区在线 | 免费色视频 | 清清草视频 | 色涩av | 欧美少妇视频 | 日韩av中文字幕在线播放 | 国产欧美激情 | 国产精品乱码一区二区三区 | 国产伦精品一区二区三区视频网站 | 免费91网站 | 黄色网在线 | 免费三片在线观看网站v888 | 中文字幕在线观看第一页 | 免费激情网站 | 日韩少妇视频 | 亚洲精品乱码久久久久 | 日韩网站免费观看 | 羞羞的网站| 国产免费一区二区三区最新不卡 | 久久黄视频 | 欧美日韩性 | 91午夜精品亚洲一区二区三区 | 午夜天堂在线 | 国产精品毛片va一区二区三区 | av黄色在线观看 | 蜜桃色一区二区三区 | 一本久| 亚洲一区二区三区免费视频 | 日韩精品综合 |