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));
모든 것이, 버퍼가 RAM (BSS)에서 확인을 구비하고 있지이다, 나는 그것을 액세스 할 수 있으며 그것을 다시 써라.
buffer[25] = 42;
printf("%d\n", buffer[25]); // 42
다른 파일에서 변수를 편집하려고 할 때 문제가 발생합니다.
myFunc(uint8_t* buffer)
{
buffer[25] = 42;
printf("%d\n", buffer[25]); // 0
}
buffer
(매개 변수로 전달) 다른 파일에 변경하지 않을
other.c
uint8_t buffer[60 * 200] __attribute__ ((section(".large_buffer"), used));
int main()
{
myFunc(buffer);
}
main.c
내가 뭔가를 놓쳤습니까?
감사합니다. 플래시에 저장 버퍼 (R/W가 필요함)를 저장하는 것이 좋은 해결책입니까? – Epitouille
실용적인 해결책으로 이것을 권하고 싶지 않다. 우선 플래시를 먼저 읽을 수 있도록 RAM을 절약해야한다. 쓰기/지우기는 읽기보다 훨씬 느리고 RAM 쓰기/지우기 플래시와 비교하면 더 길다. 또한 얼마나 많은 지우기 사이클을 수행 할 수 있는지에 대한 제한이 있습니다. 일반적으로 약 100k 사이클입니다. – koper89
예이 문제를 이해합니다. 이 시점에서 나는 숫양을 구할 수 없어 막혔습니다. 무엇이 해결책 일 수 있습니까? 어떤 최적화가 관련이 있습니까? – Epitouille