您現在的位置是:首頁 > 棋牌

ram與flash你知道多少?

  • 由 Hw微控制器程式設計 發表于 棋牌
  • 2022-09-05
簡介因此微控制器的程式執行過程是,根據flash中的程式碼為函式分配堆疊和靜態儲存區,然後CPU讀取flash中的指令,並讀寫記憶體中的資料進行運算

圖片放大縮小 flash;flash怎麼縮小圖片大小

ram與flash你知道多少?

一 電腦程式執行過程與微控制器的區別

我們平常使用的電腦的程式是儲存在磁碟中的,由於磁碟的讀取速度很慢,所以為了避免程式阻塞,電腦在程式執行之前,會把整個程式碼複製到記憶體中,CPU從記憶體中讀取指令,然後去執行。

為了合理利用和規劃記憶體資源,除了作業系統的記憶體管理外,最重要的是記憶體的分段。對每一個程序,作業系統都會為其分配一片記憶體,同時將其分段為程式碼段、資料段、堆疊段等等,不同的段具有不同的屬性。

電腦的執行模式不合適微控制器使用,因為微控制器沒有磁碟,而且記憶體小。微控制器的程式碼是儲存在flash中,類似電腦的固態硬碟,CPU讀取flash的速度慢於記憶體,但是這個速度已經很快了。

因此微控制器的程式執行過程是,根據flash中的程式碼為函式分配堆疊和靜態儲存區,然後CPU讀取flash中的指令,並讀寫記憶體中的資料進行運算。

ram與flash你知道多少?

二 微控制器記憶體分配與c語言變數的儲存位置

合理使用微控制器的記憶體對於一名工程師來說是至關重要的,因為關係到專案程式碼的穩定性,一款產品是否能在市場生存的第一步就是要穩定。記憶體使用不合理也會造成程式BUG的出現,而且產品表現出來的形式也是千奇百怪,一些工程師就因為這個問題飽受折磨。

如果在專案中遇到大陣列時,我們會遇到一個問題是該選擇全域性變數還是選擇區域性變數。區域性變數所佔用的記憶體在該函式執行完之後即會自動釋放,這樣只會在短時間內佔用cpu的ram;用全域性變數會佔用許多的RAM資源。區域性變數有一個潛在的不確定因素有可能會造成全域性變數區的記憶體被覆蓋。

這個時候我們寧可犧牲掉RAM的部分資源作為固定的記憶體,也不要埋下隱患(大陣列區域性變數),做產品要講究穩定,避免後面要花費大量的人力物力去處理。處理好了產品的前途也毀掉一半了。

初始化時RW-data從flash複製到RAM,當程式啟動完畢後Rw-data的儲存位置就到RAM裡了。

而棧區(stack)、堆區(heap)、全域性區(靜態區)(static)、文字常量區和程式程式碼區和RO-data等的關係。

1、棧區(stack):由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。 可讀寫的值(stack)包含在sram中。

2、堆區(heap):由程式設計師分配釋放,包含在微控制器的sram中的。

3、全域性區(靜態區)(static):全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域,程式結束後由系統釋放。包含在sram中。

4、文字常量區:常量字串儲存的地方。資料是作為只讀用的,分配在RO-data(只讀資料儲存區),包含在flash中。

5、程式程式碼區:存放函式體的二進位制程式碼,可以想象也是被包含在flash,因為對於MCU來說,當其重新上電,程式碼還會繼續執行,並不會消失,所以儲存在flash中。

三RAM、EEPROM和flash的區別

儲存器分為兩大類:ram和rom。

ram 即 random access memery,可以隨時存取資料的一塊儲存器,也就是可以讀(取)也可以寫(存)的儲存器。通常作為作業系統或其他正在執行中的程式的臨時資料儲存介質。現在的微控制器裡面使用的RAM屬於靜態RAM或SRAM,這個和電腦用的記憶體條有所不同,只要你把資料寫入SRAM後,只要不斷電,或者不清除掉,這個資料就一直儲存在那裡。電腦是用的動態RAM,要不斷給它加重新整理脈衝才能儲存資料。

ROM 即 Read Only Memory,只讀式儲存器,用作程式儲存器,除了指令外,還包括執行程式必須的某些固定資料。

ROM 最初是不能程式設計,後來出現了prom,只能寫一次,直到EPROM的出現改變了這一個現狀,只要把晶片放在紫外線下照一下就可以擦除掉,這個改動拯救了一大批程式設計師,程式設計師終於可以隨意的修改rom中的內容了,同時也提高了工作效率。

狹義的EEPROM:這種rom的特點是可以隨機訪問和修改任何一個位元組,可以往每個bit中寫入0或者1。這是最傳統的一種EEPROM,掉電後資料不丟失,可以儲存的時間非常的長,可以擦寫100w次。具有較高的可靠性。

flash屬於廣義的EEPROM,因為它也是電擦除的rom。但是為了區別於一般的按位元組為單位的擦寫的EEPROM,我們都叫它flash。flash做的改進就是擦除時不再以位元組為單位,而是以塊為單位,一次簡化了電路,資料密度更高,降低了成本。上M的rom一般都是flash。

這期我們的分享就到這裡,喜歡的點個贊關注一下謝謝大家!

ram與flash你知道多少?

想要學習微控制器程式設計的同學可以持續關注華維微控制器程式設計,回覆“我要入門”,與我們一起成長,喜歡的可以點個贊關注我們!

ram與flash你知道多少?

Top