www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 技術(shù)學(xué)院 > 技術(shù)前線
[導(dǎo)讀]RAM和ROM等存儲(chǔ)單元的物理地址映射是由做硬件的數(shù)字工程師確定,他們?cè)趧澐謺r(shí)主要會(huì)考慮電路的延遲,將這些儲(chǔ)存單元按照一定的方式掛在同一條AHB總線上。而嵌入式平臺(tái)軟件工程師可以通過(guò)修改鏈接腳本來(lái)設(shè)置哪些數(shù)據(jù)、代碼在程序運(yùn)行時(shí)放在ROM里,哪些放在RAM里。

ROMRAM是人盡皆知的概念。即:

RAM(random access memory)隨機(jī)存儲(chǔ)內(nèi)存 ,這種bai存儲(chǔ)器在斷電時(shí)du將丟失其存儲(chǔ)內(nèi)容,故主要用于存儲(chǔ)短時(shí)間使用的程序。

ROM(Read-Only Memory)只讀內(nèi)存 ,是一種只能讀出事先所存數(shù)據(jù)的固態(tài)半導(dǎo)體存儲(chǔ)器。

而當(dāng)一個(gè)嵌入式項(xiàng)目在立項(xiàng)時(shí),其中有個(gè)重要的環(huán)節(jié)就是對(duì)系統(tǒng)所需的RAM和ROM用量進(jìn)行評(píng)估。

在滿足系統(tǒng)需求的前提下,盡量降低硬件成本,據(jù)說(shuō)同等大小的RAM價(jià)格大概是ROM的6倍。

大部分的資料都宣稱程序分為RO、DATA、BSS等段,RO段應(yīng)該放在ROM里,DATA段放在RAM里云云。對(duì)于DATA、BSS,這些段因?yàn)橛蓄l繁的寫(xiě)操作,所肯定要放到RAM里,但是只讀數(shù)據(jù)(包括代碼段)必須放在ROM里嗎?答案是不一定。

RAM和ROM等存儲(chǔ)單元的物理地址映射是由做硬件的數(shù)字工程師確定,他們?cè)趧澐謺r(shí)主要會(huì)考慮電路的延遲,將這些儲(chǔ)存單元按照一定的方式掛在同一條AHB總線上。而嵌入式平臺(tái)軟件工程師可以通過(guò)修改鏈接腳本來(lái)設(shè)置哪些數(shù)據(jù)、代碼在程序運(yùn)行時(shí)放在ROM里,哪些放在RAM里.

這里多說(shuō)一句,RAM在系統(tǒng)剛上電的時(shí)候,其內(nèi)容是隨機(jī)的。所謂的數(shù)據(jù)、代碼放在RAM里,是指在初始化時(shí),CPU從flash里讀下載的bin文件,也有的平臺(tái)下載的是hex文件,找出其中的ram段,以類似于memcpy的方式將數(shù)據(jù)從bin文件里的對(duì)應(yīng)位置拷貝到RAM映射到的物理地址里,這才是所謂的放在RAM里.

RAM分為很多種,關(guān)于SRAM、DDR、SDRAM、PSRAM等等的概念請(qǐng)自行百度,從軟件的角度籠統(tǒng)一點(diǎn),分為片內(nèi)和片外ram。對(duì)于軟件工程師的來(lái)說(shuō),它們的區(qū)別就是訪問(wèn)速度,片內(nèi)ram一般用TCM(Tightly Coupled Memory)的方式集成在CPU芯片內(nèi)部,有單獨(dú)的數(shù)據(jù)通道,它的訪問(wèn)速度可以和cache相媲美,而片外ram的訪問(wèn)要麻煩一些,CPU發(fā)出想訪問(wèn)的地址給AHB總線控制器,它會(huì)知道對(duì)應(yīng)的地址是在片外RAM里,將訪問(wèn)請(qǐng)求遞給RAM控制器,再由RAM控制器訪問(wèn)RAM后將數(shù)據(jù)返回。

大體上片內(nèi)的訪問(wèn)速度是片外RAM的1.5~2倍。片內(nèi)ram集成在CPU芯片內(nèi)部,它是在CPU設(shè)計(jì)時(shí)就加上的,它使用和CPU幾乎一樣的制作工藝和材料,而且增加了芯片的大小,所以成本比較高,一般也就只有幾十K字節(jié),好鋼當(dāng)然要用在刀刃上,片內(nèi)ram用來(lái)存放中斷處理handler、RTOS調(diào)度器、任務(wù)上下文切換、內(nèi)存分配釋放等使用頻率最高的代碼和中斷堆棧這種讀寫(xiě)頻率極高的內(nèi)存區(qū),如果有多余的部分也可以放一些經(jīng)常被引用到的全局變量。

片外RAM一般就是采購(gòu)的市面上的成品,如Samsung,Hynix,Apmemory等,價(jià)格相對(duì)便宜,其容量的可選范圍也較為寬松,從幾M到幾G的都有,它可以用來(lái)存儲(chǔ)全局變量,bss,以及我們常用到的malloc所分配的堆空間等。 還有一點(diǎn)不同的是:片內(nèi)Ram上電就可以直接使用,而片外的RAM都需要一個(gè)硬件控制器完成對(duì)其時(shí)序的控制,軟件人員則需要對(duì)該控制器編寫(xiě)專用的控制驅(qū)動(dòng)

ROM一般是有兩種,一種是指集成在CPU芯片內(nèi)部的一塊只讀存儲(chǔ)區(qū)域,一般是幾K到幾十K字節(jié)大小,用來(lái)存儲(chǔ)系統(tǒng)剛上電時(shí)對(duì)cpu和一些核心外設(shè)(如時(shí)鐘,串口,MMU、DRAM、Flash等)進(jìn)行初始化的代碼,它在程序運(yùn)行中也是不可寫(xiě)的,要對(duì)它執(zhí)行寫(xiě)操作只能使用硬件燒寫(xiě)器進(jìn)行,也就是一般所說(shuō)的下載程序,這部分的代碼在芯片測(cè)試階段可以進(jìn)行編程器下載更新,量產(chǎn)后一般就會(huì)固化,不能做任何修改的。

另一種指的就是flash。首先需要說(shuō)明的是,很多做嵌入式應(yīng)用開(kāi)發(fā)的同學(xué)一直把flash比作PC上的硬盤(pán),其實(shí)它們指的是Nand flash,而對(duì)于很多小型的嵌入式系統(tǒng),就只有一個(gè)2M或者4M的Nor Flash,它和硬盤(pán)有一個(gè)顯著的區(qū)別:flash里存放的代碼是可以由CPU直接取指并執(zhí)行的,而PC上硬盤(pán)里的程序都需要加載到內(nèi)存里才能運(yùn)行。

flash并不是絕對(duì)的運(yùn)行時(shí)不可寫(xiě),有時(shí)候應(yīng)用程序需要保存一些配置信息到flash里,類似于PC程序的配置文件,以保證掉電了之后它的內(nèi)容不會(huì)丟失,下次開(kāi)機(jī)時(shí)可以直接從flash讀取到。

不過(guò),flash的寫(xiě)操作要比RAM麻煩的多了,flash在寫(xiě)之前需要發(fā)送多個(gè)命令字來(lái)握手,還要先對(duì)即將要寫(xiě)的地址所在的扇區(qū)進(jìn)行整體擦除,就是把該扇區(qū)里的內(nèi)容全設(shè)為1,所謂寫(xiě)flash就是把其中的一些bit設(shè)為0;更要命的是,flash的每個(gè)獨(dú)立bit位的寫(xiě)次數(shù)是有上限的,市面上大部分的產(chǎn)品都只能寫(xiě)10~100萬(wàn)次。多說(shuō)一句,每個(gè)bit位的壽命是獨(dú)立的,如果一個(gè)bit位在擦除和寫(xiě)的動(dòng)作中,它的值始終為1,則不會(huì)有影響;例如反復(fù)對(duì)一個(gè)地址寫(xiě)0xF0,則不會(huì)影響高4bit的壽命,而低4bit每次都要先擦成1,再寫(xiě)入0,這樣就會(huì)降低其壽命。

現(xiàn)在我們討論一下RO、DATA、BSS到底應(yīng)該放在RAM里還是ROM里。

首先考慮一下,有沒(méi)有什么東西必須放在ROM里? 當(dāng)然有,引導(dǎo)程序(系統(tǒng)的初始化代碼)就必須放到ROM里。在CPU剛上電時(shí),只能去一個(gè)默認(rèn)的地址去取第一條指令,開(kāi)始干活,這個(gè)地址都是映射到片內(nèi)的ROM里,原因很簡(jiǎn)單,此時(shí),作為外設(shè)的flash和DDR等都還沒(méi)有初始化,CPU根本無(wú)法從它們那里讀寫(xiě)數(shù)據(jù),片內(nèi)ROM里的這些代碼就需要完成這些模塊的初始化。另外,一個(gè)項(xiàng)目的處理器和主要外設(shè)確定了以后,這部分初始化代碼在很長(zhǎng)的時(shí)間里,都不需要做任何修改的。

那有沒(méi)有什么東西必須放RAM里?當(dāng)然也有,應(yīng)用程序經(jīng)常讀寫(xiě)的全局變量,堆、棧等等,都需要放在RAM里,根據(jù)訪問(wèn)的頻率,將頻率最高的少量數(shù)據(jù)放到片內(nèi)ram。

只讀數(shù)據(jù)(代碼段、程序里的const、字符串等)應(yīng)該放在哪?一般來(lái)說(shuō),這些數(shù)據(jù)應(yīng)該放在Flash里,因?yàn)樗鼈儾恍枰恍薷?,而且前面提到過(guò),rom要比ram便宜的多。可能有人會(huì)有疑問(wèn),放在flash里,會(huì)不會(huì)讀取的速度很慢?讀ROM的速度是比讀RAM的數(shù)據(jù)要慢一點(diǎn),但是不要忘了,現(xiàn)代CPU都有強(qiáng)大的cache,而且數(shù)據(jù)Dcache和指令I(lǐng)cache都是分開(kāi)的,在系統(tǒng)運(yùn)行中,cache的命中率可以高達(dá)80~90%,所以大部分時(shí)候CPU都可以在第一時(shí)間就拿到想要的指令和數(shù)據(jù)。

最后分享兩個(gè)案例:

1 前面提到片內(nèi)Ram是一塊非常寶貴的空間,它的優(yōu)點(diǎn)就是CPU可以在第一時(shí)間取到里面的數(shù)據(jù)。但是處于成本考慮,它的空間往往都非常有限。如果用戶有兩種比較耗時(shí)的業(yè)務(wù),需要頻繁的大量取指,但重點(diǎn)是它們不會(huì)同時(shí)運(yùn)行。這種情況下,就可以在鏈接腳本里開(kāi)辟的片內(nèi)Ram空間,將該段的鏈接選項(xiàng)加上NOCROSSREFS,再將這片空間的大小定義為這兩個(gè)耗時(shí)業(yè)務(wù)代碼占空間較大的那個(gè)(例,業(yè)務(wù)一有1K代碼,業(yè)務(wù)二有2K代碼,這片空間就定義為2K),在業(yè)務(wù)一開(kāi)始時(shí),將其代碼拷貝到這塊片內(nèi)ram里(一般是用DMA的方式),運(yùn)行業(yè)務(wù)一的代碼;當(dāng)業(yè)務(wù)二開(kāi)始時(shí),也是拷貝其代碼到片內(nèi)ram里。這樣,兩種業(yè)務(wù)的耗時(shí)操作在運(yùn)行中都可以在第一時(shí)間里取到指令,對(duì)耗時(shí)業(yè)務(wù)做了很好的優(yōu)化。

2 曾經(jīng)遇到過(guò)這樣一個(gè)運(yùn)行時(shí)死機(jī),查看CPU寄存器可以看到是報(bào)一個(gè)取指了令異常,可是查看PC寄存器對(duì)應(yīng)的地址,發(fā)現(xiàn)CPU正在取的一條指令是正常的,起初十分費(fèi)解。后來(lái)通過(guò)仔細(xì)分析其死機(jī)前的運(yùn)行情況才定位出原因,死機(jī)前一個(gè)task正在寫(xiě)flash,這時(shí)候來(lái)了一個(gè)中斷,中斷里調(diào)用了一個(gè)函數(shù),其地址就在flash里,而此時(shí)flash處于一個(gè)不可讀的狀態(tài),CPU在執(zhí)行中斷里的函數(shù)就拿不到指令,只能死機(jī)。

解決問(wèn)題的辦法有2種:一是在寫(xiě)flash的過(guò)程中屏蔽所有中斷,這是一種很裸的方法,對(duì)于響應(yīng)時(shí)間很敏感的嵌入式系統(tǒng),一般都不允許隨便關(guān)中斷。二是將這個(gè)在flash里存儲(chǔ)的函數(shù)放到RAM里,避免訪問(wèn)flash的沖突。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

有關(guān)開(kāi)發(fā)人員如何通過(guò)在RAM中執(zhí)行時(shí)間敏感功能而不是從Flash中執(zhí)行時(shí)間敏感功能來(lái)加快其應(yīng)用程序代碼的文章。您可能想知道是否要進(jìn)行這樣的調(diào)整,表現(xiàn)會(huì)發(fā)生什么變化?答案會(huì)根據(jù)微控制器的制造技術(shù)而有所不同,但是開(kāi)發(fā)人員可以...

關(guān)鍵字: RAM 績(jī)效改進(jìn)

現(xiàn)在的FPGA不僅包含以前的LE,RAM也更大更快更靈活,管教IOB也更加的復(fù)雜,支持的IO類型也更多,而且內(nèi)部還集成了一些特殊功能單元。

關(guān)鍵字: FPGA RAM

在現(xiàn)代嵌入式系統(tǒng)開(kāi)發(fā)中,STM32系列微控制器因其高性能、低功耗和豐富的外設(shè)資源而廣受歡迎。然而,隨著應(yīng)用需求的不斷增長(zhǎng),內(nèi)部RAM的容量往往成為限制系統(tǒng)性能的一個(gè)瓶頸。為了解決這個(gè)問(wèn)題,開(kāi)發(fā)者通常會(huì)將堆(Heap)配置...

關(guān)鍵字: STM32 RAM

在嵌入式系統(tǒng)領(lǐng)域,程序代碼的運(yùn)行位置是一個(gè)至關(guān)重要的問(wèn)題。傳統(tǒng)的觀念認(rèn)為,程序代碼必須從FLASH存儲(chǔ)器搬到RAM中運(yùn)行,以提高執(zhí)行速度和效率。然而,隨著技術(shù)的不斷發(fā)展,這一觀念正在受到挑戰(zhàn)。本文將深入探討嵌入式系統(tǒng)中程...

關(guān)鍵字: 嵌入式系統(tǒng) Flash RAM

新的人工智能驅(qū)動(dòng)的自動(dòng)評(píng)分解決方案提高了評(píng)分效率和一致性,準(zhǔn)確率超過(guò)95%,大大減少了所有測(cè)試格式的時(shí)間和成本。 曼谷2024年11月20日 /美通社/ -- 全球領(lǐng)先的考...

關(guān)鍵字: ROM 人工智能 IC NET

ROM和RAM是人盡皆知的概念。即:RAM(random access memory)隨機(jī)存儲(chǔ)內(nèi)存 ,這種bai存儲(chǔ)器在斷電時(shí)du將丟失其存儲(chǔ)內(nèi)容,故主要用于存儲(chǔ)短時(shí)間使用的程序。ROM(Read-Only Memory...

關(guān)鍵字: RAM ROM 嵌入式

在C51編程環(huán)境中,變量的存儲(chǔ)是理解程序運(yùn)行機(jī)制和優(yōu)化性能的關(guān)鍵。C51是專為8051系列單片機(jī)設(shè)計(jì)的一種C語(yǔ)言擴(kuò)展,它不僅繼承了標(biāo)準(zhǔn)C語(yǔ)言的強(qiáng)大功能,還針對(duì)單片機(jī)的硬件特性進(jìn)行了優(yōu)化。本文將深入探討C51語(yǔ)言中變量的存...

關(guān)鍵字: C51語(yǔ)言 單片機(jī) RAM

沙特阿拉伯利雅得2024年9月12日 /美通社/ -- 沙特?cái)?shù)據(jù)與人工智能管理局(SDAIA)今日發(fā)起了一項(xiàng)開(kāi)創(chuàng)性倡議,旨在推動(dòng)符合倫理的人工智能研究與應(yīng)用。 這一重大聲明是在第三屆全球人工智能峰會(huì)期間發(fā)布的,峰會(huì)目前正...

關(guān)鍵字: 人工智能 SD AI RAM
關(guān)閉