解决方案:
1. Keil下,在Options for Target ... -> Target对话框中选择IRAM2,指定其起始地址,以及分配合适的size,并勾选NoInit。这里的size需要根据EventRecorder.c中的全局静态变量来进行计算。
2. 在Project对话框中,右键点击Compiler -> EventRecorder.c 然后选择Options for Component Class 'Compiler',在弹出的对话框中选择Memory->Zero Initialized,把该项的值修改为IRAM2,点击OK保存。
3. 重新编译下载生效。
-----------------------------------------------------------------------------------------------------------------------------
如果编译过程出现:warning: L6314W: No section matches pattern EventRecorder.o(ZI).
可以修改sct文件,将下面这行添加到RW_IRAM2的段中:
*.o(.bss.noinit)
或者使用下面这种修改方式:
LR_IROM1 0x1A000000 0x00080000 { ; load region size_region
ER_IROM1 0x1A000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x0000F000 { ; RW data
.ANY (+RW +ZI)
}
RW_IRAM2 0x2000F000 UNINIT 0x00001000 {
EventRecorder.o (+ZI)
}
}