在用 C 初始化数组时遇到以下问题。我使用的是 STM32 和 Keil uVision IDE。由于数组太大,因此在我们使用的外部 SDRAM 内存中声明(足够大)。这是代码:
分散文件:
SDRAM_ACQ_HARDCODED_AV 0xD0643000 0x141000{;N_DATA_ROWS_IN_N20_ALGORITHM_BUFFER
*(.sdram_acq_hardcoded_av)
}
C 文件:
#define SDRAM_ACQ_HARDCODED_AV __attribute__((section(".sdram_acq_hardcoded_av")))
SDRAM_ACQ_HARDCODED_AV const int16_t AcqRaw_StimArtifactRemoved_Buffer_By50nV_HC[14592] = {
-7154,
-7167,
-7158,
-7137,
-7122,
-7091,
.h 文件:
extern const int16_t AcqRaw_StimArtifactRemoved_Buffer_By50nV_HC[14592];
当我开始调试并检查该数组的值时,我看到数组内有完全随机的值。这里有什么问题吗?
我尝试查看分散文件或代码优化中的问题,但一切似乎都是正确的。
此初始化不执行任何操作。内存控制器初始化后,需要将数据复制到SDRAM中。
编译器不会帮助您,因为启动代码是在您的程序初始化内存控制器之前执行的。