두 개의 RAM 뱅크 à 64kB가있는 ARM Cortex-M 마이크로 컨트롤러에서 응용 프로그램을 개발 중입니다. 첫 번째 뱅크 바로 다음에 메모리 맵의 두 번째 뱅크가옵니다.섹션을 여러 메모리 영역으로 분할
메모리 뱅크는 현재 링커 스크립트에서 두 영역으로 나뉩니다. 첫 번째 영역에는 .bss
및 .data
섹션이 있습니다. 두 번째 뱅크는 .heap
과 .stack
으로 사용되며, 각 뱅크는 1kB 만 사용됩니다 (FreeRTOS에서 다른 스택을 사용하고 있으며 자체 힙도 관리합니다).
제 문제는, .bss
이 첫 번째 뱅크에 비해 너무 큽니다. 따라서 저는 그 중 일부를 두 번째 은행으로 옮기고 싶습니다.
이 작업을 수행하는 한 가지 방법은 두 번째 뱅크에 연결된 .secondbss
이라고하는 새 섹션을 만드는 것입니다. 그런 다음 __attribute__((section(".secondbss")))
을 사용하여 단일 변수를이 섹션에 추가 할 수 있습니다.
난 정말 내 소스 코드의 이식성을 유지하려는 나는이 솔루션을 사용하고 있지 않다 이유입니다
을
가이 속성을 필요로 변수의 전체를 많이 할 수 있으며 단일 변수마다 섹션을 선택하고 싶지 않습니다.
더 나은 해결책이 있습니까? 이미 두 메모리를 하나의 영역으로 생각했지만 링커가 두 은행 간의 경계를 가로 지르는 데이터의 정렬을 조정하는 방법을 알지 못합니다.
__attribute__
플래그를 사용하지 않고 어떻게 문제를 해결할 수 있습니까?
감사합니다.
좋습니다. 감사합니다. 이것은 이미 많은 도움이됩니다. 그러나 링커에게 같은 섹션에 대해 두 뱅크를 사용하도록 지시하는 방법이 없습니까? 이 방법으로 현재의 문제를 해결할 수 있지만 양쪽 은행간에 경계가없는 것처럼 두 은행을 사용하는 방법을 알고 싶습니다. 내 눈에는 이것이 정렬 문제 일뿐입니다. – eeucalyptus
[There] (https://answers.launchpad.net/gcc-arm-embedded/+question/223976)는 섹션과 비슷한 문제입니다. "따라서 특정 오브젝트 파일을 수동으로 배치 할 수 있습니다." –
'.bss2 (무부하) _foo.o_에서 ALIGN (4) {foo.o (. .bss라고 .bss라고 *)}> RAM2' 모두 '.bss' RAM2 데이터에 대한 것이다. 시작시이 메모리를 보통'.bss' 섹션으로 채우십시오. –