天天看點

關于keil軟體編譯後的data xdata 和code的說明

在對51單片機的程式進行編譯的時候,在編譯的最後會提示Program Size: data= xx  xdata=xx  code=xx那麼,這些存儲時根據什麼計算的呢?并且根據這個如何判斷單片機内部的存儲空間是否夠用呢?

那麼首先data  xdata  code分别代表什麼意思呢?

data表示使用的内部RAM,xdata表示使用的是外部RAM,code表示的是程式的大小。那麼這些大小和程式以及我們的單片機型号有設麼關系呢?

首先,我們建立一個簡單的工程,然後進行編譯,我們看結果如下。

關于keil軟體編譯後的data xdata 和code的說明
關于keil軟體編譯後的data xdata 和code的說明

這個占用的data為9.0。然後我們定義一個數組,之後再編譯。

關于keil軟體編譯後的data xdata 和code的說明
關于keil軟體編譯後的data xdata 和code的說明

可以看到,在定義了一個8位元組的數組後,data的值由9增加到17,是以可以得知data為我們定義的變量的空間大小。如果将這個數組定義在main函數裡呢?

關于keil軟體編譯後的data xdata 和code的說明
關于keil軟體編譯後的data xdata 和code的說明

可以看到,這個data的大小是不分局部變量和全局變量。

那麼,我們使用xdata來對數組進行定義。

關于keil軟體編譯後的data xdata 和code的說明
關于keil軟體編譯後的data xdata 和code的說明

從編譯結果來看,可以看到這個結果是在xdata中增加了8個位元組。那麼如果使用code來定義的話,應該code就會增加8個位元組。

關于keil軟體編譯後的data xdata 和code的說明
關于keil軟體編譯後的data xdata 和code的說明

可以看到,code由17增加到了25,增加了8個位元組。

根據以上的結論,我們可以得出,data占用ram空間,xdata占用ram空間,code占用flash空間。那麼對于data,xdata和code分别對應單片機的哪些空間呢?

從51單片機的手冊可以知道,以STC89C52RC為例,其中RAM資源的256位元組,其中内部128位元組,外部擴充128位元組。那麼這個内部128位元組,對應的就是data定義的變量,外部的128位元組對應的就是xdata定義的變量。我們來做這樣一個實驗,當我們沒有定義數組時,單純程式占用的是9位元組,那麼我們再定義一個128位元組的數組,我們看會發生什麼?

關于keil軟體編譯後的data xdata 和code的說明
關于keil軟體編譯後的data xdata 和code的說明

由圖可以看到,編譯會報錯,無法生成正确的hex檔案。

是以,綜上所述,data和xdata分别占用的是内部ram和外部擴充ram的空間,code占用的是程式的空間,如果我們的應用程式使用較多的數組占用較多的ram時,我們可以根據需要選擇定義的ram使用的哪個空間。

繼續閱讀