LPC1700系列芯片內存注意問題

原文鏈接:http://bbs.eeworld.com.cn/thread-313054-1-1.html


在AMR芯片中內存空間是越來越大了,而我們的使用需求也是水漲船高。而不同ARM芯片的內存分配也是截然不同。例如同樣是64K的STM32,只要你的數組定義在64K內就可以操作的,而64K的LPC芯片則不能定義64K的數組。這個問題恐怕困擾了不少網友。產生這一問題的主要原因是不同芯片內存架構是不一樣的。下面我們主要探討一下LPC1768的內存空間是使用情況。

 

下圖是LPC1768的內部結構框圖:

 

 

從上圖我們可以看出LPC1768的64K SRAM被分爲了3大塊:1塊是內部32K,另外兩塊16K是外掛在AHB總線上的。這樣分配的原因是一塊16K被分配給USB,一塊16K被分配給以太網。所以,真正給用戶的只要32K。然而,我們往往不使用USB或以太網,那麼這32K內存空間既不是浪費了。

 

下面我們在看看,MDK對內存空間的定義:

 

 

有圖我們可以看出,MDK中同樣把內存空間分成了兩大塊,一塊是默認的內部32K,一塊是AHB總線上的32K。而默認只夠選了前面的32K。使用如果我們沒有使用USB或以太網也只能使用這32K SRAM。如果要想使用其他32K就必須勾選這部分空間。

 

但是需要注意一下問題:

 

1.單個數組的定義不能大於任何一塊的最大空間,這是因爲數組的存放是需要連續空間的,而這裏的連續空間不會大於32K。

如:uint8 buf[30720];   // 32K,是可以定義的,但是絕對不能大於32K,否則報錯。

 

2.單個文件理的數組定義不能大於任何一塊的最大空間,這裏需要注意,如果只是在一個文件裏邊定義,而沒有初始化是可以的,如果在一個C文件的定義並初始化或使用了這些空間,那麼這些空間也不能大於任意一塊的最大空間,這應該編譯器在分配內存時也是按照連續存放來分配同一個文件裏的空間的。

 

如:uint8 buf[30720];   // 32K,是可以定義的,但是絕對不能大於32K,否則報錯。

       uint8 buf1[20000]; // 20K,是可以的,但是絕對不能初始化,否則會包錯

如果把它們分別放到不同的文件中定義,並初始化是沒有問題的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章