新聞中心
隨著嵌入式系統(tǒng)和物聯(lián)網(wǎng)技術(shù)的發(fā)展,嵌入式系統(tǒng)對(duì)于內(nèi)存的要求越來越高,SRAM (Static Random Access Memory) 逐漸成為嵌入式系統(tǒng)不可或缺的組成部分。在Linux系統(tǒng)中,SRAM地址分配是一項(xiàng)十分重要的工作,本文將介紹。

建網(wǎng)站原本是網(wǎng)站策劃師、網(wǎng)絡(luò)程序員、網(wǎng)頁設(shè)計(jì)師等,應(yīng)用各種網(wǎng)絡(luò)程序開發(fā)技術(shù)和網(wǎng)頁設(shè)計(jì)技術(shù)配合操作的協(xié)同工作。創(chuàng)新互聯(lián)建站專業(yè)提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站制作(企業(yè)站、響應(yīng)式網(wǎng)站、電商門戶網(wǎng)站)等服務(wù),從網(wǎng)站深度策劃、搜索引擎友好度優(yōu)化到用戶體驗(yàn)的提升,我們力求做到極致!
一、SRAM地址分配原理
SRAM是一種相對(duì)于DRAM(Dynamic Random Access Memory)具有更高速讀寫能力的內(nèi)存,常常被用于需求近乎實(shí)時(shí)響應(yīng)的嵌入式系統(tǒng)中。Linux系統(tǒng)中,SRAM的地址分配原理是使用 kmalloc() 申請(qǐng)連續(xù)的物理地址范圍。除此之外,SRAM還有一些特殊的使用方法,我們將在后續(xù)篇章中詳細(xì)介紹。
二、如何申請(qǐng)SRAM地址
在Linux系統(tǒng)中,kmalloc()函數(shù)可以用來申請(qǐng)數(shù)量大小的連續(xù)內(nèi)存空間。如下所示:
“`
#include
void *kmalloc(size_t size, gfp_t flags);
“`
kmalloc() 按照 size 參數(shù)指定的大小,從內(nèi)核的內(nèi)存池中動(dòng)態(tài)地分配一段連續(xù)的虛擬地址空間。 flags 參數(shù)確定內(nèi)存分配的行為。flags參數(shù)由多個(gè) gfp_t 值之一或其組成的位掩碼組成。
KMALLOC_NORMAL:普通內(nèi)存,不具有保障可用的極短延遲等特殊屬性。
KMALLOC_ATOMIC:需要緊急而又較少的內(nèi)存。
KMALLOC_DMA:由DMA處理器使用的內(nèi)存。
KMALLOC_NORMAL 和 KMALLOC_ATOMIC 的區(qū)別在于,后者僅僅推薦用于非常特殊的情況下,其申請(qǐng)到的內(nèi)存如果對(duì)于任何要求都符合普通情況下KMALLOC_NORMAL的要求。這種情況下,kmalloc() 將分配無法被分段的更大連續(xù)內(nèi)存塊,而分配的內(nèi)存將基于對(duì)象池技術(shù)來提供,以便能夠有效地返回多次分配的內(nèi)存塊。
KMALLOC_DMA 被用來為連續(xù)的、硬件可見的內(nèi)存(通常是DMA緩存)分配地址。另一個(gè)比較重要的參數(shù)是 __GFP_NOWARN,該參數(shù)會(huì)禁止內(nèi)核報(bào)警告信息。
例子:
“`c
// 申請(qǐng)一塊內(nèi)存大小為100
char *buffer = (char *)kmalloc(100, GFP_KERNEL);
“`
三、SRAM使用指南
SRAM在嵌入式系統(tǒng)中常常被用來存儲(chǔ)和處理即時(shí)響應(yīng)的數(shù)據(jù),如時(shí)鐘計(jì)數(shù)器、溫度傳感器、數(shù)據(jù)緩存等。下面是幾個(gè)SRAM使用的指南:
1、緩存
SRAM可以幫助快速緩存數(shù)據(jù),當(dāng)嵌入式系統(tǒng)需要頻繁訪問某些數(shù)據(jù)時(shí),我們非常適合使用SRAM來緩存它。例如,如果我們需要實(shí)時(shí)傳輸傳感器數(shù)據(jù)到云端,我們需要一個(gè)緩存來存儲(chǔ)數(shù)據(jù),以備傳輸失敗時(shí)再次嘗試。
2、時(shí)鐘計(jì)數(shù)器
SRAM可以被用來存儲(chǔ)時(shí)鐘周期的計(jì)數(shù)器,以便在計(jì)算實(shí)時(shí)時(shí)間或?qū)崿F(xiàn)對(duì)于時(shí)間的操作時(shí)使用。如下所示:
“`c
//定義數(shù)據(jù)類型
typedef unsigned long sram_clock_t;
// 定義時(shí)鐘計(jì)數(shù)器
static sram_clock_t *sram_clock;
// 分配SRAM內(nèi)存,大小為一個(gè)數(shù)據(jù)類型
sram_clock = (sram_clock_t*)kmalloc(sizeof(sram_clock_t), GFP_KERNEL);
// 初始化計(jì)數(shù)器
*sram_clock = 0;
“`
3、存儲(chǔ)配置信息
SRAM還可以被用來存儲(chǔ)配置信息,例如網(wǎng)絡(luò)配置、啟動(dòng)選項(xiàng)等。在嵌入式開發(fā)中,我們可以將一些啟動(dòng)選項(xiàng)配置成SRAM中,以實(shí)現(xiàn)快速啟動(dòng)。
4、緩存中間結(jié)果
當(dāng)需要頻繁地處理一些計(jì)算密集型的任務(wù)時(shí),可以使用SRAM緩存中間結(jié)果以便下次調(diào)用時(shí)能夠快速地計(jì)算。例如,當(dāng)需要處理多次圖片識(shí)別時(shí),你可以再SRAM中緩存圖像處理的中間數(shù)據(jù)。
結(jié)論
本文介紹了Linux系統(tǒng)下的SRAM地址分配方法及應(yīng)用指南。我們了解了 SRAM 的地址分配原理,演示了SRAM地址分配的詳細(xì)過程,并探討了一些常見的SRAM實(shí)際應(yīng)用場(chǎng)景。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
arm中存儲(chǔ)器的實(shí)際地址是如何確定的?是CPU直接分配好的嗎?
去則嫌我孫罩手博客看吧悶數(shù)!在下載和閱讀學(xué)習(xí)資料里:
存儲(chǔ)器是可以映射成為不同的地址的。
一般來說,ARM處理器由于是32位的,所以可以訪問的地址空間為4G。在這些地址空間內(nèi),實(shí)際的每個(gè)物理存儲(chǔ)器,可以被映射在任意的地址上。你可以查看所使用的CPU手冊(cè)來確定,每個(gè)存儲(chǔ)器是怎么被映射的。下面舉個(gè)例子說明一下。
ATMEL公司的AT91SAM7S256,ARM7TDMI內(nèi)核,內(nèi)部集成256KB Flash和64K SRAM。其中Flash被默認(rèn)映射在0地址處,也就是說你訪問中顫0x0地址訪問的就是Flash。但是,F(xiàn)lash還有一個(gè)個(gè)地方。就好比是你家開了兩個(gè)門一樣,入口不同,但是進(jìn)的地方是一樣的。而SRAM則被映射在0x202300地址處。
系統(tǒng)啟動(dòng)后,在MCR寄存器內(nèi)寫入1,這時(shí)CPU會(huì)調(diào)整存儲(chǔ)器的映射關(guān)系,會(huì)把SRAM映射在0x0地址處,也就是說你現(xiàn)在訪問0x0實(shí)際問的是SRAM的0x202300地址。
其他的許多茄逗支持外部存儲(chǔ)器的(比如帶NAND Flash控制和SDRAM控制器的)CPU,都可以把外部存儲(chǔ)器映射到4G的地址空間內(nèi)。它們的說明書絕對(duì)會(huì)有相對(duì)的說明,有一個(gè)圖,叫地址空間映射表,你一看就明白了。
關(guān)于linuxsram地址的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問快、穩(wěn)定!
文章題目:Linux下的SRAM地址分配方法及應(yīng)用指南(linuxsram地址)
轉(zhuǎn)載來源:http://www.dlmjj.cn/article/dppcoic.html


咨詢
建站咨詢
