我使用的是 STM32F411RE。因为我的 RAM 中没有更多的内存。我决定在我的闪存中存储大变量。为此,我在section.ld
.
.large_buffer: ALIGN(4)
{
. = ALIGN(4) ;
*(.large_buffer.large_buffer.*)
. = ALIGN(4) ;
} >FLASH
在main.c
文件中,我将变量声明如下:
uint8_t buffer[60 * 200] __attribute__ ((section(".large_buffer"), used));
此时一切正常,缓冲区没有存储在 RAM (bss) 中,我可以访问它并重写它。
buffer[25] = 42;
printf("%d\n", buffer[25]); // 42
当我想从其他文件编辑变量时,问题就来了。
main.c
uint8_t buffer[60 * 200] __attribute__ ((section(".large_buffer"), used));
int main()
{
myFunc(buffer);
}
other.c
myFunc(uint8_t* buffer)
{
buffer[25] = 42;
printf("%d\n", buffer[25]); // 0
}
buffer
永远不要在另一个文件中更改(作为参数传递)。
我错过了什么 ?