IARforARM7.3内存分配问题

2019-03-23 18:32发布

在指定内存地址定义了一个常量以后,编译查看map文件,发现如果程序小于常量的地址,内存分配的时候就可以从0开始,如果程序长度大于常量的地址,但内存分配的时候却是从常量之后的地址开始的。

icf文件:
/*================================*/
define symbol __ICFEDIT_intvec_start__ = 0x0;
define symbol __ICFEDIT_password_start__ = 0x00000FC0;
......
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place at address mem:__ICFEDIT_password_start__ { readonly section .password };
/*================================*/

startup.s文件:
/*================================*/
        SECTION .password:CODE
        DCD     0xFFFFFF12
/*================================*/

编译后生成的map文件:
/*================================*/
"A1":  place at 0x00000000 { ro section .intvec };
"A2":  place at 0x00000fc0 { ro section .password };
"P1":  place in [from 0x00000000 to 0x0001ffff] { ro };
"P2":  place in [from 0x20000000 to 0x20001fff] { rw, block CSTACK, block HEAP };
/*================================*/

map文件中实际函数P1的内存分配情况:
/*================================*/
"P1":                             0x4b44
  .text      ro code  0x00000fc4  0x4a58  test.o [1]
  .text      ro code  0x00005a1c    0x1c  reset.o [1]
  .text      ro code  0x00005a38    0x32  main.o [1]
......
/*================================*/

入门菜鸟,鞠躬~ 此帖出自小平头技术问答
0条回答

一周热门 更多>