F103C8T6移植Fatfs文件系统时编译报错空间不够

2019-07-21 02:53发布

在用stm32F103C8T6移植Fatfs文件系统时编译报错:..OBJFATFS.axf: Error: L6406E: No space in execution regions with .ANY selector matching cc936.o(.constdata).
与它类似的错误共有78个
最后还有个  ..OBJFATFS.axf: Error: L6407E: Sections of aggregate size 0x3edc8 bytes could not fit into .ANY selector(s).
R5Z{@~15F5Y]F9)}SQ}J.png
程序是改mini板(RCT6)的例程 ALIENTEK MINISTM32 实验29 FATFS文件系统实验
已经改了device为stm32f103c8;也改了C/C++中的define为STM32F10X_MD,USE_STDPERIPH_DRIVER;还改了Debug里flash download为128k,仍出现问题。
同时也参考了MDK在链接时提示空间不够(No space in execution regions with .ANY selector... )的解决方案总结中的方法但是还是没有解决。
另外Target设置如下需不需要改动?
%ZZ`T`1]Q2$]1TW1PTC)Q47.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
正点原子
1楼-- · 2019-07-21 05:41
你这是flash空间不够用了。cc936很大的。。。170多KB。必死无疑,用在C8T67上面
redgragon
2楼-- · 2019-07-21 09:43
另外算了下0x3edc8大概是251k,感觉程序没这么大(加了oled和字库但是删除了LCD)?附上没改过的RCT6例程编译结果。
VYK6H5{HKUZZX%5NPTIXL_1.png
275891381
3楼-- · 2019-07-21 12:35
 精彩回答 2  元偷偷看……
redgragon
4楼-- · 2019-07-21 18:17
275891381 发表于 2018-8-19 09:42
20k的内存超了,malloc设置小一点

能具体说下怎么操作吗?20k是在哪里设置的?
275891381
5楼-- · 2019-07-22 00:02
redgragon 发表于 2018-8-19 15:14
能具体说下怎么操作吗?20k是在哪里设置的?

mallco头文件有个MEM_MAX_SIZE的宏定义,改小点,最大是编译结果后面俩的和小于20k
redgragon
6楼-- · 2019-07-22 02:07
275891381 发表于 2018-8-19 16:16
mallco头文件有个MEM_MAX_SIZE的宏定义,改小点,最大是编译结果后面俩的和小于20k

改这个地方发现还是有问题。
原程序中是这样定义的
[mw_shl_code=c,true]//内存参数设定.
#define MEM_BLOCK_SIZE                        32                                                            //内存块大小为32字节
#define MEM_MAX_SIZE                        35*1024                                                  //最大管理内存 35K
#define MEM_ALLOC_TABLE_SIZE        MEM_MAX_SIZE/MEM_BLOCK_SIZE         //内存表大小
[/mw_shl_code]在把MEM_MAX_SIZE改小至1*1024后仍有40个内存不足的错误,并且报错
..OBJFATFS.axf: Error: L6407E: Sections of aggregate size 0x33e84 bytes could not fit into .ANY selector(s).

在尝试继续减小时发现 MEM_MAX_SIZE 大于等于 MEM_BLOCK_SIZE 时就会报内存不足,如下图
CJURXU1{}2ADYRECD1CWZ08.png
而当MEM_MAX_SIZE 小于 MEM_BLOCK_SIZE 时,虽然不会报内存不足的错但显然不太合逻辑。而且MEM_ALLOC_TABLE_SIZE实际为0,在程序中定义了这样一个数组:
[mw_shl_code=c,true]u16 memmapbase[MEM_ALLOC_TABLE_SIZE];                        //SRAM内存池MAP[/mw_shl_code]
所以MEM_ALLOC_TABLE_SIZE不能为0,否则会报错
..MALLOCmalloc.c(18): error:  #94-D: the size of an array must be greater than zero
如图
5}~B}3(AT`_4JPE5_T24HWY.png
求告知应该如何改动?

一周热门 更多>