新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > keilc51中如何看堆棧的分配情況

        keilc51中如何看堆棧的分配情況

        作者: 時間:2016-11-29 來源:網絡 收藏
        Keil C是非常優秀的C51編譯器,可能是最好的C51編譯器,提供各種優化模式,對變量的優化和地址安排做得非常好。這是用C語言寫代碼的好處之一,如果用匯編寫,得費一大番功夫給各個變量安排內存物理地址,還得時刻記住哪些地址的內存單元是已經分配了,新增加的變量就不能占用那些已經分配了的單元,以免產生內存交疊沖突和溢出。我一直非常信賴Keil C51的編譯結果,在我的印象里,它對內存的分配是完美的,只要代碼用它編譯時沒有報告任何warning和error,代碼運行時不可能內存沖突或溢出的現象。

        但,今天發生的事情證明我錯了。

        本文引用地址:http://www.104case.com/article/201611/323457.htm

        手頭上有個產品的代碼,代碼量很大。程序跑起來的效果不大好,因此打算把代碼優化一下。代碼量越大,通常可優化的地方也越多。對8051來說,訪問芯片內部的data區(0~7FH)內存速度是最快的,直接訪問,一條指令就能讀寫,而idata區(80H~FFH)雖然還是內存區,但由于地址分配上跟特殊寄存器SFR重合,只能間接地址訪問,兩條指令才能讀寫,速度稍慢點,而外存xdata區(0~7FFFH)必須使用DPTR指針才能訪問,速度是最慢的。很明顯,優化的原則就是盡量把頻繁讀寫的變量優先安排在data區,然后是idata區,最后才是xdata區。




        8051在物理上有4個存儲器空間

        片內ROM和片外ROM。片內RAM和片外RAM。

        片外程序存儲器ROM地址空間為64kB,片外數據存儲器RAM也有64kB的尋址區,在地址上是與ROM重迭的。

        8051單片機通過不同信號來選通ROM或RAM。當從外部ROM中取指令時,采用選通信號PSEN,而從外部RAM中讀寫數據時

        則采用讀RD和寫WR信號或來選通,因此不會因地址重迭而發生混亂。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 仙游县| 鄂尔多斯市| 赤水市| 武邑县| 吉林市| 克拉玛依市| 松桃| 白山市| 靖远县| 栖霞市| 雷州市| 博客| 静海县| 屏南县| 黔西| 临夏县| 雅安市| 年辖:市辖区| 凤庆县| 虞城县| 兖州市| 临沂市| 昌黎县| 昭觉县| 昆山市| 陕西省| 北碚区| 太仆寺旗| 卢龙县| 临沭县| 贵德县| 桦川县| 芒康县| 金坛市| 璧山县| 改则县| 唐海县| 梨树县| 镇赉县| 承德县| 镶黄旗|