2014-03-19 26 views
1

我有一個疑問,在所有的微控制器閃存更多的內存(例如:atmega16它是16k,但RAM只是1 Kb)。 。如何在更少的內存中執行大代碼?

那麼,這個代碼是如何執行的,CPU是否直接從Flash本身執行,如果是,那麼使用這個小內存給出了什麼。

+1

我不是專家,但我認爲,一個微控制器的存儲器僅用於存儲全局,你的棧和堆的。該程序本身直接從閃存運行。沒有消息來源,所以我沒有發佈這個答案 – Kippie

+0

不太確定,但是,1kb仍然是1.000.000位可用。你無法解析它上面的HQ圖片,也沒有真正的大操作系統。已編譯程序的字節碼有多少? – DanFromGermany

+0

感謝您的答案,因爲您的RAM用於堆棧和堆等(局部變量)。想想只有主函數的程序和在其中聲明的非常大的數組(10 kb)(因此它變成了應該存儲在堆棧i,e; RAM中的局部變量)。但是RAM只有1kb,那麼會發生什麼? #Kippie –

回答

4

閃存用於存儲您要執行的程序。他們很少改變,所以閃存是適當的。

RAM是用於在程序的執行期間所需存儲器:棧(局部變量),堆(malloc的)等使用Harvard體系結構即嚴格分離程序和數據存儲器

+0

感謝您的答案,因爲您的RAM用於堆棧和堆等(局部變量)。 想想程序裏面只有主函數和一個非常大的數組(10 kb)(因此它變成了一個局部變量,應該存儲在堆棧i,e; RAM中)。但是RAM只有1kb,那麼會發生什麼? –

+1

@VirendraKumar:你會用完內存。 :-)但是,如果數組是固定的,[你可以使它成爲程序的一部分](http://www.nongnu.org/avr-libc/user-manual/pgmspace.html),它將在閃存記憶。 – Heinzi

+2

你完全不能擁有10k數組,最好的情況下,你會覆蓋你的堆棧指針,程序會自己消失。編譯器會警告你你使用的RAM太多了。 1k對於Mega16類型的應用程序來說是完全足夠的。如果你真的需要更多的內存,使用類似ARM的東西。 – DiBosco

1

的AVR。 與PC不同的是,首先將程序從RAM中移到RAM中,代碼直接從程序存儲器執行,只有運行時數據存儲在RAM中。

相關問題