福州網(wǎng)站制作案例石家莊百度快照優(yōu)化排名
RAM不夠?使用CCMRAM
文章目錄
- RAM不夠?使用CCMRAM
- 打開連接LD文件:
- 添加代碼
- 添加標(biāo)識(shí)宏
- 使用
打開連接LD文件:
添加代碼
在SECTIONS段最后加上下面代碼:
_siccmram = LOADADDR(.ccmram); /* CCM-RAM section * * IMPORTANT NOTE! * If initialized variables will be placed in this section,* the startup code needs to be modified to copy the init-values. */.ccmram (NOLOAD) :{. = ALIGN(4);_sccmram = .; /* create a global symbol at ccmram start */*(.ccmram)*(.ccmram*). = ALIGN(4);_eccmram = .; /* create a global symbol at ccmram end */} >CCMRAM
代碼解釋:
這段代碼是針對(duì) ARM Cortex-M 系列處理器的鏈接腳本代碼,用于描述內(nèi)存布局中的 .ccmram(Core Coupled Memory RAM)段。這段代碼告訴鏈接器如何將程序的各個(gè)部分放置在 .ccmram 段中。下面我會(huì)對(duì)每個(gè)部分進(jìn)行詳細(xì)解釋:
_siccmram = LOADADDR(.ccmram);
這一行代碼將 .ccmram 段的加載地址(LOADADDR)賦值給 _siccmram 符號(hào)。_siccmram 是一個(gè)全局符號(hào),它將指向 .ccmram 段的起始地址。
.ccmram (NOLOAD) :
{. = ALIGN(4);_sccmram = .; /* create a global symbol at ccmram start */*(.ccmram)*(.ccmram*). = ALIGN(4);_eccmram = .; /* create a global symbol at ccmram end */
} >CCMRAM
這段代碼定義了 .ccmram 段的內(nèi)容。以下是對(duì)各個(gè)部分的解釋:
. = ALIGN(4);:這是一個(gè)地址對(duì)齊操作,確保接下來(lái)的數(shù)據(jù)在 4 字節(jié)邊界上對(duì)齊。ALIGN(4) 意味著數(shù)據(jù)將按照 4 字節(jié)對(duì)齊。
_sccmram = .;:這一行代碼創(chuàng)建一個(gè)全局符號(hào) _sccmram,它將指向此時(shí)的地址,即 .ccmram 段的起始地址。
*(.ccmram) 和 (.ccmram):這兩行代碼表示將所有放置在 .ccmram 段的標(biāo)準(zhǔn)和重定位代碼(包括初始化數(shù)據(jù)、代碼等)都添加到此處。
. = ALIGN(4);:再次執(zhí)行地址對(duì)齊操作,確保 .ccmram 段的大小是 4 的倍數(shù)。
_eccmram = .;:這一行代碼創(chuàng)建另一個(gè)全局符號(hào) _eccmram,它將指向此時(shí)的地址,即 .ccmram 段的結(jié)束地址。
最后,>CCMRAM 指示鏈接器將這些內(nèi)容放置在名為 CCMRAM 的特定內(nèi)存區(qū)域中。
綜合來(lái)看,這段代碼的作用是定義了一個(gè)名為 .ccmram 的段,該段將位于指定的 CCMRAM 內(nèi)存區(qū)域中。這段代碼也提供了起始地址 _sccmram 和結(jié)束地址 _eccmram 的全局符號(hào),以便在程序中可以引用這些地址。
添加標(biāo)識(shí)宏
然后在main.h中添加使用CCMRAM的宏標(biāo)識(shí):
#define CCMRAM __attribute__((section(".ccmram")))
使用
使用:在你想讓變量使用CCMRAM的變量的前面加上標(biāo)識(shí)CCMRAM
結(jié)果:成功使用CCMRAM