STM32L471有2块RAM , 一块大小为96K , 一块大小为32K 。 IDE默认生产的LD文件没有定义32K的RAM区域。
下面介绍,如何定义32K RAM 及变量如何定义使用在32K RAM中
一、如何定义32K RAM
看手册可知, 32K RAM的其实地址为0x10000000 , FLASH.ld 文件中,MEMORY修改如下:
/* Memories definition */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K
RAM2(xrw) : ORIGIN = 0x10000000, LENGTH = 32K
ROM (rx) : ORIGIN = 0x8000000, LENGTH = 512K
}
在 _user_heap_stack下面添加如下
._user_heap_stack :
{
. = ALIGN(8);
PROVIDE ( end = . );
PROVIDE ( _end = . );
. = . + _Min_Heap_Size;
. = . + _Min_Stack_Size;
. = ALIGN(8);
} >RAM2
//new add
._user_arry_stack :
{
. = ALIGN(8);
. = ALIGN(8);
} >RAM2
修改完LD文件之后, 编译工程, 右下角的memory regions显示如下
二、如何使用
__attribute__ (( section ("._user_arry_stack") )) char LTDC_FRAMEBUFFER[1024*5];
其中._user_arry_stack 为刚刚在SELECT中添加的区域块
完整事例代码如下
#include <stdio.h>
__attribute__ (( section ("._user_arry_stack") )) char LTDC_FRAMEBUFFER[1024*5];
char volatile arrVarA[10240];
int main(void)
{
int i = 0;
for(;;)
{
for( i = 0 ; i < sizeof(arrVarA) ; i++)
{
arrVarA[i] = i;
LTDC_FRAMEBUFFER[i] = i;
}
i = 0;
}
}
编译DEBUG后,变量内存地址显示如下;