在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,是可以的,但是絕對不能初始化,否則會包錯
如果把它們分別放到不同的檔案中定義,並初始化是沒有問題的。
LPC匯流排介紹
在nb電路的架構框圖中,我們可以看到pch和ec之間通過lpc匯流排連線,在mb板上也會看到ec晶元旁邊有乙個jdebug的connector,其也與lpc匯流排相連,用於主機板診斷。下面將對lpc匯流排做一些簡單介紹,希望能夠幫助大家了解lpc的工作原理 1 lpc匯流排 lpc low pin ...
170 ActionBar主題配置
我們的androidmnifest.xml 清單檔案裡 theme 主題條目的 然後我們進這個style看看 這個主題 如果我們不想要actionbar,我們可以給他乙個 noactionbar 的主題 我們來個自定義actionbar 的主題,然後給乙個 parent,就是預設的 light主題 ...
XDOJ 170 複試篩選
考研初試成績公布後需要對m個學生的成績進行排序,篩選出可以進入複試的前n名學生。排序規則為首先按照總分排序,總分相同則按英語單科成績排序,總分和英語成績也相同時考號小者排在前面。現給出這m個學生的考研初試成績,請篩選出可以進入複試的n名學生並按照排名從高到低的順序依次輸出。輸入為m 1行,第一行為兩...