0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MCU的存儲(chǔ)器組織知識(shí)

Q4MP_gh_c472c21 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-06-07 15:54 ? 次閱讀

首先說(shuō)一下 MCU 的存儲(chǔ)器組織。

蒙圈,MCU 中常使用的存儲(chǔ)器類(lèi)型有:FLASH、RAM、ROM(包括EEPROM)

在軟件角度來(lái)看,程序和數(shù)據(jù)的存儲(chǔ)分為以下幾個(gè)部分:

注:

1.代碼段和常量段都可以用于保存常量數(shù)據(jù),其主要區(qū)別是,如果常量可以作為匯編指令的一個(gè)操作數(shù),則該常量被編譯進(jìn)代碼段。如果不能用一個(gè)匯編操作數(shù)表示,則存于常量段。如 "uchar a=0x05;" 中的 "0x05" 將被編譯成代碼 "mov #0x05, a";如果是 "uchar a[]={0x05, 0x06}" 則 "0x05,0x06" 被放置于常量段, 在初始化 a[] 的時(shí)候會(huì)有一段匯編指令用于將常量段中的內(nèi)容拷貝到 a[] 中。

軟件存儲(chǔ)區(qū)與硬件存儲(chǔ)器類(lèi)型是怎么對(duì)應(yīng)的呢?

一般來(lái)講如下:

注:

1.MCU 中的 ROM 通常用于存儲(chǔ)制造商信息、控制器型號(hào)等信息;

2.對(duì)于 x86 體系結(jié)構(gòu)的系統(tǒng),因?yàn)闆](méi)有 Flash 類(lèi)型的存儲(chǔ)器,所以,所有的軟件存儲(chǔ)區(qū)最終都加載到內(nèi)存中,但是其內(nèi)存是分段的,用戶對(duì)不同內(nèi)存段的訪問(wèn)權(quán)限不同,其代碼段和常量段不可以被用戶修改,如果意外修改則拋出段錯(cuò)誤異常。

知道了存儲(chǔ)器類(lèi)型和各存儲(chǔ)區(qū)的劃分之后,讓我們來(lái)看以下三組程序:

1.

staticvoidProcStr(void)

{

ucharStr[]={"12345"};

}

這段程序中,Str[] 是一個(gè)局部數(shù)組,其大小為 6,占用的堆棧空間是 2 個(gè)字符;"12345" 是常量,被存儲(chǔ)在常量段;Str[] 的初始化過(guò)程,相當(dāng)于從常量區(qū)拷貝 6 個(gè)字符的數(shù)據(jù)到棧中,這 6 個(gè)字符是"12345\0"。

2.

staticvoidProcStr(void)

{

ucharStr[]="12345";

}

這段程序中,Str[] 是一個(gè)局部數(shù)組,其大小為 6,占用的堆??臻g是 2 個(gè)字符;"12345" 是常量,被存儲(chǔ)在常量段;Str[] 的初始化過(guò)程,相當(dāng)于從常量區(qū)拷貝 6 個(gè)字符的數(shù)據(jù)到棧中,這 6 個(gè)字符是 "12345\0"。

3.

staticvoidProcStr(void)

{

constuchar*Str="12345";

}

這段程序中沒(méi)有數(shù)組,唯一的Str 是一個(gè)局部指針,其大小為 4(在 32 位系統(tǒng)中),因此這段程序只占用 4(在 32 位系統(tǒng)中)個(gè)字符的堆棧空間;"12345"是常量,被存儲(chǔ)在常量段;Str 的初始化過(guò)程,是將指針Str 初始化為常量"12345"的地址,后續(xù)程序通過(guò)指針Str直接訪問(wèn)常量段,無(wú)需內(nèi)存拷貝過(guò)程。

從以上分析可以看出,前兩種方法是一樣的,都需要為局部數(shù)據(jù)分配存儲(chǔ)空間,并將靜態(tài)存儲(chǔ)區(qū)的數(shù)據(jù)拷貝過(guò)來(lái),而最后一種方法是通過(guò)指針直接訪問(wèn)靜態(tài)數(shù)據(jù)而無(wú)需拷貝。如果字符串長(zhǎng)度大于系統(tǒng)中指針的長(zhǎng)度,第三種方法將在時(shí)間和空間上大大優(yōu)于前兩種方法(第三種方法極大的節(jié)省了堆棧空間,并減少了拷貝數(shù)據(jù)所用的時(shí)間)。

但是,對(duì)于 MCU 來(lái)說(shuō),并不總是第三種方法好,原因在于第三種方法是直接訪問(wèn)常量段,由上面的表可知,對(duì)于將常量存儲(chǔ)于 Flash 的 MCU 來(lái)說(shuō),訪問(wèn)常量段要比訪問(wèn) RAM 慢得多。因此,如果接下來(lái)要頻繁訪問(wèn)這個(gè)字符串,那么,采用前兩種方法在速度上將會(huì)更優(yōu)一些,理由是前兩種方法只需要訪問(wèn)一次 Flash,而第三種方法則每次都需要訪問(wèn) Flash。

當(dāng)然,如果在接下來(lái)的程序中,需要修改字符串Str 中的內(nèi)容,那就只能采用前兩種方法,第三種方法將會(huì)提示錯(cuò)誤。

特殊說(shuō)明:今天講的一些內(nèi)容跟編譯器的特性相關(guān),不同編譯器,甚至相同編譯器的不同版本間存在一定差異。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17204

    瀏覽量

    351935
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7519

    瀏覽量

    164084
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1639

    瀏覽量

    49198

原文標(biāo)題:嵌入式程序開(kāi)發(fā)需要知道的存儲(chǔ)器知識(shí)

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    #硬聲創(chuàng)作季 #嵌入式 #MCU存儲(chǔ)器設(shè)計(jì)片選譯碼技術(shù)

    mcu存儲(chǔ)器
    學(xué)習(xí)電子知識(shí)
    發(fā)布于 :2022年11月02日 21:12:32

    MCU存儲(chǔ)器組織

    首先說(shuō)一下 MCU存儲(chǔ)器組織。蒙圈,MCU 中常使用的存儲(chǔ)器類(lèi)型有:FLASH、RAM、ROM(包括EEPROM)在軟件角度來(lái)看,程序和
    發(fā)表于 08-08 17:10

    存儲(chǔ)器是如何組織的?是如何與處理總線連接的?

    第一套在8086的微計(jì)算機(jī)系統(tǒng)中,存儲(chǔ)器是如何組織的?是如何與處理總線連接的?#BHE信號(hào)起什么作用?答:8086 為 16 位處理,可訪問(wèn) 1M 字節(jié)的
    發(fā)表于 07-26 06:06

    STM32存儲(chǔ)器組織程序

    STM32 存儲(chǔ)器存儲(chǔ)器組織1. FLASH2. SRAM3. 啟動(dòng)一 存儲(chǔ)器組織程序存儲(chǔ)器
    發(fā)表于 08-02 06:06

    集成鐵電存儲(chǔ)器MCU有何作用

    集成鐵電存儲(chǔ)器MCU,由于在MCU上集成了鐵電存儲(chǔ)器,該產(chǎn)品數(shù)據(jù)寫(xiě)入速度比基于閃存和EEPROM的MCU快100倍,功耗降低250倍。它還
    發(fā)表于 11-10 08:28

    CPU結(jié)構(gòu)執(zhí)行單元BIU寄存存儲(chǔ)器組織結(jié)構(gòu)

    前言 ′???`微機(jī)系統(tǒng)的構(gòu)成外設(shè)CPU結(jié)構(gòu)執(zhí)行單元BIU寄存存儲(chǔ)器組織結(jié)構(gòu) 尋址方式總結(jié) ′?`
    發(fā)表于 12-10 07:56

    存儲(chǔ)器與通用寄存的相關(guān)資料下載

    基礎(chǔ)知識(shí)梳理一、 存儲(chǔ)器與通用寄存1. 存儲(chǔ)器每一天清晨,當(dāng)我們?cè)趬?mèng)中醒來(lái)的時(shí)候,記憶就會(huì)填充大腦的空白,我們會(huì)想起最近做過(guò)的一些重要的事情,當(dāng)然也有些小的事情無(wú)法準(zhǔn)確的記憶起,但這
    發(fā)表于 12-13 06:29

    聊聊存儲(chǔ)器的相關(guān)知識(shí)

    虛擬地址物理地址等眾多地址及MMU相關(guān)知識(shí)先聊聊存儲(chǔ)器STM32單片機(jī)存儲(chǔ)器關(guān)于編譯生成的文件數(shù)據(jù)在存儲(chǔ)器上的
    發(fā)表于 02-11 07:51

    相變存儲(chǔ)器(PCM)技術(shù)基礎(chǔ)知識(shí)

    相變存儲(chǔ)器(PCM)技術(shù)基礎(chǔ)知識(shí) 相變存儲(chǔ)器(PCM)是一種非易失存儲(chǔ)設(shè)備,它利用材料的可逆轉(zhuǎn)的相變來(lái)存儲(chǔ)信息。同一物質(zhì)可以在諸如固體、液
    發(fā)表于 11-23 09:19 ?3141次閱讀

    EE-17:ADSP-2187L存儲(chǔ)器組織

    EE-17:ADSP-2187L存儲(chǔ)器組織
    發(fā)表于 04-27 14:54 ?1次下載
    EE-17:ADSP-2187L<b class='flag-5'>存儲(chǔ)器</b><b class='flag-5'>組織</b>

    MCU存儲(chǔ)器介紹

    SRAM(StaticRandom-AccessMemory):靜態(tài)隨機(jī)存儲(chǔ)器,所謂的“靜態(tài)”,是指這種存儲(chǔ)器只要保持通電,里面儲(chǔ)存的數(shù)據(jù)就可以恒常保持。DRAM(Dynamic Random
    發(fā)表于 10-28 09:51 ?11次下載
    <b class='flag-5'>MCU</b>的<b class='flag-5'>存儲(chǔ)器</b>介紹

    MCU片內(nèi)非易失性存儲(chǔ)器操作應(yīng)用筆記

    電子發(fā)燒友網(wǎng)站提供《MCU片內(nèi)非易失性存儲(chǔ)器操作應(yīng)用筆記.zip》資料免費(fèi)下載
    發(fā)表于 09-22 10:00 ?0次下載
    <b class='flag-5'>MCU</b>片內(nèi)非易失性<b class='flag-5'>存儲(chǔ)器</b>操作應(yīng)用筆記

    存儲(chǔ)器工作原理及如何選擇存儲(chǔ)器品牌

    存儲(chǔ)器是用來(lái)存儲(chǔ)程序和各種數(shù)據(jù)信息的記憶部件,更通俗地說(shuō),存儲(chǔ)器就是用來(lái)存放數(shù)據(jù)的地方。存儲(chǔ)器可分為主存儲(chǔ)器(簡(jiǎn)稱(chēng)主存或內(nèi)存)和輔助
    的頭像 發(fā)表于 10-11 16:58 ?3938次閱讀

    淺談MCU中集成新型存儲(chǔ)器的選擇

    基于上述因素,越來(lái)越多的MCU大廠開(kāi)始選擇在MCU中集成新型存儲(chǔ)器,比如相變存儲(chǔ)器(PCM)、磁RAM(MRAM)和阻變存儲(chǔ)器(RRAM)等
    發(fā)表于 12-01 20:28 ?988次閱讀

    AT32 MCU如何設(shè)定啟動(dòng)存儲(chǔ)器為主存擴(kuò)展

    AT32 MCU如何設(shè)定啟動(dòng)存儲(chǔ)器為主存擴(kuò)展
    的頭像 發(fā)表于 10-18 17:50 ?708次閱讀
    AT32 <b class='flag-5'>MCU</b>如何設(shè)定啟動(dòng)<b class='flag-5'>存儲(chǔ)器</b>為主存擴(kuò)展