IAR中如何定向把數組和函數放在指定的地址單元 2

下圖是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燈仍然閃爍

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章