This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Memory map问题

Hello TI,

我有两个问题,

1. Memory Map所定义的地址用意为何?   因为实际上每个用户都可以修改.cmd档 去更改存储位置, 例如Flash定义在0x00000000-0x0013FFFF之间,用户是否可以修改在此区间之外?

2. Memory Map里有个Flash (mirrored image) 它指得是什麽意思,为何会有这个区块?

如下图

  • Hi Shunfan,

    memory map主要是告诉客户,芯片里面可以使用的FLASH,RAM等存储区域的的具体地址。

    确实通过cmd文件可以修改程序存放的位置,或是变量放在RAM的哪个区域,但是这个区域的选择是必须在memory map定义的FLASH或是RAM的空间内的。不能定义到其他地方。

    另外关于flash mirrored image是一个方便可以在调试的时候,将程序烧写到这个区域,减少默认的flash区域的擦写次数,从而延长它的使用寿命。不过这个特性用的不多。

    谢谢

  • Hello Ken,
    谢谢你的回覆,那请问一下,下方是预设的cmd.file。
    那VECTORS和STACKS各是存放何种物理空间呢?(既不是FLASH, 也不是RAM)
    /*----------------------------------------------------------------------------*/
    /* Memory Map                                                                 */
    
    MEMORY
    {
        VECTORS (X)  : origin=0x00000000 length=0x00000020
        FLASH0  (RX) : origin=0x00000020 length=0x0013FFE0
        STACKS  (RW) : origin=0x08000000 length=0x00001500
        RAM     (RW) : origin=0x08001500 length=0x0002EB00
    
    /* USER CODE BEGIN (2) */
    /* USER CODE END */
    }
    
    /* USER CODE BEGIN (3) */
    /* USER CODE END */
    
    
    /*----------------------------------------------------------------------------*/
    /* Section Configuration                                                      */
    
    SECTIONS
    {
        .intvecs : {} > VECTORS
        .text    : {} > FLASH0
        .const   : {} > FLASH0
        .cinit   : {} > FLASH0
        .pinit   : {} > RAM
        .bss     : {} > RAM
        .data    : {} > RAM
        .sysmem  : {} > RAM
        
    
    /* USER CODE BEGIN (4) */
    /* USER CODE END */
    }
  • Hi Shunfan,

      Vector是中断矢量,这个是放在Flash的区域的,你看一看它的起始位置地址

    Stack堆栈是放在RAM的区域的。你可以参考memory map来看。

    系统的Flash是从0x00开始的,RAm是从0x08000000开始的。

    谢谢