本人开发板所用的芯片型号是STM32F107VCT6,查手册知道内部flash是256k,而RAM是64k,在工程目录下有五个.icf文件(如第一张图所示)
,它们的区别也仅仅是内部ROM和RAM的起始地址和大小的不同。我们一般设置(如下面第二张图所示)的是project.icf或者stm32f10x_flash.icf或者stm32f10x_ram.icf,
而对于我的工程所需的flash比较大,如按照上面的设置就会出现下面错误:
Error[Lp011]: section placement failed: unable to allocate space for sections/blocks with a total estimated minimum size
of 0x40f48 bytes in <[0x20000000-0x20017fff]> (total uncommitted space 0x18000).
Needed:
[0x20000000-0x20017fff]: 0x40f48 minimum (size: 0x18000)
意思就是内存空间不足吧。我对其链接文件进行编辑,设置如下图:
这样make不会出现链接错误,所需的内存空间如下:
15 416 bytes of readonly code memory
4 095 bytes of readonly data memory
266 056 bytes of readwrite data memory
但下载到板子上的时候就会出现如下情况:
无法调试。这里原因可能是因为实际所需的内存空间大于片上实际的空间吧。但是我将链接文件设置为stm32f10x_flash_extsram.icf,也会出现上面一样的结果,而RAM和ROM的始末地址如下图:
该RAM地址段是属于片外的,而我的板子上也有512M的nand flash,请问这种情况是什么原因?难道是程序不能下载到nand flash里面么?还有就是这个icf文件的作用就是指定RAM和ROM的始末地址和大小的么?
注:该项目是用来解压JPEG图像的,算法是c写的,经过我优化之后还是需要差不多270k的空间,不知道各位有没有更经典的解压算法,跪求!拜谢!:D |