前些时间在移植正点原子的rgblcd驱动使,发现了cubeide的一点小问题
按照keil中将变量定义到指定数组,结果产生如下报错
这里话不多说,直接放上找到的解决方案
关于此类问题的文章找到的比较少,请教后有人提出使用cubemx在cubeide中生成keil工程的想法,博主没有尝试。由于放上的文章已经很详细,这里只再做一点简单说明,方便和博主一样的小白理解
我们打开工程目录最下面FLASH文件,在MEMORY中添加自己定义的数组,注意长度要足够,名称要和main中一致
并在section中添加代码
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 2048K
DTCMRAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
RAM_D1 (xrw) : ORIGIN = 0x24000000, LENGTH = 512K
RAM_D2 (xrw) : ORIGIN = 0x30000000, LENGTH = 288K
RAM_D3 (xrw) : ORIGIN = 0x38000000, LENGTH = 64K
ITCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 64K
LCD_FRAME_BUF_Addr (xrw) : ORIGIN = 0xC0000000, LENGTH = 2048K
}
/* Define output sections */
/* Define output sections */
SECTIONS
{
/* The startup code goes first into FLASH */
...
...
.LCD_FRAME_BUF (NOLOAD):
{
. = ALIGN(4);
*(.LCD_FRAME_BUF)
. = ALIGN(4);
} >LCD_FRAME_BUF_Addr
/* used by the startup to initialize data */
...
//在sections中定义自己的数组,注意添加noload属性,就是告诉说,我受不了这么大的东西,干脆不用给我放进去
}
这时我们再编译,报错“xxx.elf section '.bss' will not fit in region就消失了
感兴趣的读者可以学习gcc编译器的.ld文件,会对这方面有更好的理解