0
我使用STM32F411RE。 因爲我的RAM中沒有更多內存。我決定在我的閃存中存儲大量變量。爲此,我在section.ld
中創建了一個部分。STM32,存儲在閃存中的變量無法在其他文件中更新
.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));
此時一切都OK,緩衝未在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
在另一個文件(如參數傳遞)永遠不會改變。
我錯過了什麼嗎?
感謝您的回答。在閃存中存儲緩衝區(經常需要R/W)是一個很好的解決方案嗎? – Epitouille
我不會推薦這個作爲可行的解決方案,首先是您需要保存RAM才能夠先讀取然後寫入閃存。寫入/擦除比讀取慢得多,並且與RAM寫入/擦除閃存相比更長。另外,你可以做多少次擦除週期是有限制的,通常約爲100k週期。 – koper89
是的,我明白這個問題。在這一點上,我卡住了,因爲我無法保存ram。什麼可能是一個解決方案?什麼優化是相關的? – Epitouille