下圖是FRDM-KW36 的內存分配
Flash : 256KB 0x00000000 ~ 0x0003FFFF
SRAM : 64KB = 0x4000 + 0xC000 {0x1FFF_C000 – 0x1FFF_FFFF SRAM_L: Lower SRAM
0x2000_0000 – 0x2000_BFFF SRAM_U: Upper SRAM2}
DFLASH : 256KB 0x10000000 ~ 0x1003FFFF (DFLASH 無需分區)
FlexRAM : 8KB 0x1400_0000 – 0x1400_1FFF
DFLASH alise 暫且稱作Dlash 別名區 或者 Dflash 鏡像
DFLASH 擁有鏡像0x40000 ~ 0x7FFFF, 操作DFLASH鏡像 可以像RAM一樣讀寫擦不需要額外的命令,直接將數據寫到DFLASH鏡像區也就是將數據寫到DFLASH, 並且DFLASH和Flash有一樣的特性可以存儲代碼段,在這次實驗中將驗證Dflsh 別名特性;
1.設置鏈接文件
如下是鏈接文件額外添加的
/*
** ###################################################################
** Processors: MKW36Z512VFP4
** MKW36Z512VHT4
**
** Compiler: IAR ANSI C/C++ Compiler for ARM
** Reference manual: MKW36A512RM Rev. 7, 07/2019
** Version: rev. 1.1, 2017-06-06
** Build: b190224
**
** ###################################################################
*/
......
define symbol m_dflash_text_start = 0x00040000;
define symbol m_dflash_text_end = 0x0005FFFF;//拿出128KB存儲代碼
......
define region dflash_TEXT_region = mem:[from m_dflash_text_start to m_dflash_text_end];
......
place in dflash_TEXT_region { readonly section .funDflash };
......
2. LED 程序中重定位代碼
void delay(void)@".funDflash" //重定位delay 函數至 DFLASH
{
volatile uint32_t i = 0;
for (i = 0; i < 800000; ++i)
{
__asm("NOP"); /* delay */
}
}
3.下載驗證程序
如下圖delay 函數被定位到 DFLASH 中
4.重新上電LED燈仍然閃爍