您好!
我正在尝试保留一块 RAM 用于从引导代码和主应用进行信息传输。 我现在正在编写引导代码、并尝试在0x20000000 (len=0x400)保留存储器。
以下是我的链接命令文件:
--retain=g_pfnVectors
--retain=PrebootVector
--retain=标题
--retain=ExHeader
内存
{
Flash (RX):origin = 0x00000000、length = 0x00008000 last (__IMG_SIZE)
SRAM (rwx):origin = 0x20000400、length = 0x00040000 - 1K
}
/*以下命令行选项作为 CCS 项目的一部分设置。 */
/*如果您正在使用命令行进行构建,或者出于某种原因想要 */
/*在此处定义它们,您可以根据需要取消注释和修改这些行。 */
/*如果您使用 CCS 进行构建、则最好制作任何此类项目*/
/*对 CCS 项目的修改,并保留该文件。 */
/* */
/*--heap_size=0 */
/*--stack_size=256 */
/*--library=rtsv7M4_T_le_eabi.lib */
/*内存中的段分配*/
部分
{
.pbootvec: >0x00000000
.header: > 0x00000120
.intvecs: > 0x00000200
.text : >闪存
.const : >闪存
cinit : >闪存
请输入您的密码 : > FLASH
init_array:> FLASH
.vtable: > 0x20000400
.data : > SRAM
bss : > SRAM
.sysmem: > SRAM
.stack : > SRAM
}
__STACK_TOP =_STACK + 512;
请注意、SRAM 范围从0x20000400开始。我希望不会触及此位置(0x20000000 -0x200003ff)。 为了验证这一点、我做了一个实验、为该位置分配一些值。 我启动一个调试会话、并确保已分配这些值、然后我停止调试会话、在电源复位电路板的情况下、我再次启动调试会话。 理论上、由于 MCU 尚未进行电源复位、分配的值应该仍然存在。 但事实并非如此。 即使该位置不在定义的 SRAM 范围内、它似乎始终被初始化为某个值。 由于项目中没有其他地方能做到这一点,我怀疑是_c_int00()中的代码造成了这一问题。
我还在不同的 IDE (Semens' CodeBench)上进行了类似的实验、结果是预期得到的。
有没有解决这个问题的办法?