OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 16112|回复: 25

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

[复制链接]

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
发表于 2018-8-19 00:52:48 | 显示全部楼层 |阅读模式
1金钱
在用stm32F103C8T6移植Fatfs文件系统时编译报错:..\OBJ\FATFS.axf: Error: L6406E: No space in execution regions with .ANY selector matching cc936.o(.constdata).
与它类似的错误共有78个
最后还有个  ..\OBJ\FATFS.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

最佳答案

查看完整内容[请看2#楼]

你这是flash空间不够用了。cc936很大的。。。170多KB。必死无疑,用在C8T67上面
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165312
金钱
165312
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-8-19 00:52:49 | 显示全部楼层
你这是flash空间不够用了。cc936很大的。。。170多KB。必死无疑,用在C8T67上面
回复

使用道具 举报

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
 楼主| 发表于 2018-8-19 01:00:18 | 显示全部楼层
另外算了下0x3edc8大概是251k,感觉程序没这么大(加了oled和字库但是删除了LCD)?附上没改过的RCT6例程编译结果。
VYK6H5{HKUZZX%5NPTIXL_1.png
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-8-19 09:42:00 | 显示全部楼层
redgragon 发表于 2018-8-19 01:00
另外算了下0x3edc8大概是251k,感觉程序没这么大(加了oled和字库但是删除了LCD)?附上没改过的RCT6例程编 ...

20k的内存超了,malloc设置小一点
回复

使用道具 举报

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
 楼主| 发表于 2018-8-19 15:14:47 | 显示全部楼层
275891381 发表于 2018-8-19 09:42
20k的内存超了,malloc设置小一点

能具体说下怎么操作吗?20k是在哪里设置的?
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-8-19 16:16:17 | 显示全部楼层
redgragon 发表于 2018-8-19 15:14
能具体说下怎么操作吗?20k是在哪里设置的?

mallco头文件有个MEM_MAX_SIZE的宏定义,改小点,最大是编译结果后面俩的和小于20k
回复

使用道具 举报

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
 楼主| 发表于 2018-8-19 20:51:49 | 显示全部楼层
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个内存不足的错误,并且报错
..\OBJ\FATFS.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,否则会报错
..\MALLOC\malloc.c(18): error:  #94-D: the size of an array must be greater than zero
如图
5}~B}3(AT`_4JPE5_T24HWY.png
求告知应该如何改动?
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-8-19 21:00:47 | 显示全部楼层
redgragon 发表于 2018-8-19 20:51
改这个地方发现还是有问题。
原程序中是这样定义的
[mw_shl_code=c,true]//内存参数设定.

all=20kb  x*1024+x*1024/32*2=20kb*1024 x=19.69  理论最大管理19.69  
但是别的地方还有占用,改个15试试编译,让RW+ZI<20k 就可以
还有#define MEM_MAX_SIZE                          15 *1024
你少乘了个1024
回复

使用道具 举报

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
 楼主| 发表于 2018-8-19 23:43:59 | 显示全部楼层
275891381 发表于 2018-8-19 21:00
all=20kb  x*1024+x*1024/32*2=20kb*1024 x=19.69  理论最大管理19.69  
但是别的地方还有占用,改个15 ...

没有少乘的,设置32的意思就是32字节并不是写错了,尝试过1*1024都报了内存不足,所以干脆直接减到32字节。。。
回复

使用道具 举报

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
 楼主| 发表于 2018-8-20 03:54:24 | 显示全部楼层
275891381 发表于 2018-8-19 21:00
all=20kb  x*1024+x*1024/32*2=20kb*1024 x=19.69  理论最大管理19.69  
但是别的地方还有占用,改个15 ...

15*1024也试过了,还是内存不足
回复

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1665
金钱
1665
注册时间
2018-1-29
在线时间
159 小时
发表于 2018-8-20 07:42:07 | 显示全部楼层
不用中文文件名编码即可! codepage改为 1 或者437
回复

使用道具 举报

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
 楼主| 发表于 2018-8-21 17:11:09 | 显示全部楼层
正点原子 发表于 2018-8-19 00:52
你这是flash空间不够用了。cc936很大的。。。170多KB。必死无疑,用在C8T67上面

那应该用什么呢?
还有cc936是什么啊,我直接删掉可以吗?
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-8-21 17:37:51 | 显示全部楼层
redgragon 发表于 2018-8-21 17:11
那应该用什么呢?
还有cc936是什么啊,我直接删掉可以吗?

不用汉语路径文件名,删了那俩大数组就可以了
回复

使用道具 举报

5

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2016-7-14
在线时间
30 小时
发表于 2018-11-1 16:26:27 | 显示全部楼层
compiling main.c...
main.c(117): error:  #167: argument of type "char *" is incompatible with parameter of type "const TCHAR *"
    f_mount(fs[0],"0:",1);                                      //挂载SD卡
main.c(118): error:  #167: argument of type "char *" is incompatible with parameter of type "const TCHAR *"
        f_mount(fs[1],"1:",1);                                  //挂载FLASH.      
main.c(120): error:  #167: argument of type "char *" is incompatible with parameter of type "const TCHAR *"
                        f_open(&file ,"0:/mytesttxt.txt" ,FA_OPEN_ALWAYS | FA_WRITE  );
main.c(124): error:  #167: argument of type "char *" is incompatible with parameter of type "const TCHAR *"
                        f_open(&file ,"0:/mytesttxt.txt" ,FA_READ  );



最近也是在移植FATFS文件系统到c8t6单片机上,首先遇到的问题就是rom控件被塞爆了,接着注释掉cc936里面的大容量代码,发现又出现如上的问题,努力解决中
回复

使用道具 举报

5

主题

47

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2016-7-14
在线时间
30 小时
发表于 2018-11-1 17:03:04 | 显示全部楼层
追破风的小石头 发表于 2018-11-1 16:26
compiling main.c...
main.c(117): error:  #167: argument of type "char *" is incompatible with param ...

已解决,修改ffconfig.h中

#define        _LFN_UNICODE        0        /* 0:ANSI/OEM or 1:Unicode */
/* To switch the character encoding on the FatFs API (TCHAR) to Unicode, enable LFN
/  feature and set _LFN_UNICODE to 1. This option affects behavior of string I/O
/  functions. */

将_LFN_UNICODE修改为0即可,
回复

使用道具 举报

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
 楼主| 发表于 2018-12-12 00:04:26 | 显示全部楼层
总结了一下,
①从工程中删除cc936.c等文件,c8t6装不下
②mallco.h中#define MEM_MAX_SIZE 42*1024改小,测试10*1024可用,需保证编译结果后面两个size的和小于20k
③#define _CODE_PAGE        936 改为 #define _CODE_PAGE        1 使用ascii码减少存储开销
④相应#define        _LFN_UNICODE        0 和 #define _STRF_ENCODE        0 ,使用ascii
回复

使用道具 举报

16

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
金钱
374
注册时间
2016-4-4
在线时间
54 小时
发表于 2018-12-20 20:56:18 | 显示全部楼层
MARK~~~~~~
回复

使用道具 举报

22

主题

103

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2017-2-23
在线时间
205 小时
发表于 2019-4-15 14:53:14 | 显示全部楼层
redgragon 发表于 2018-12-12 00:04
总结了一下,
①从工程中删除cc936.c等文件,c8t6装不下
②mallco.h中#define MEM_MAX_SIZE 42*1024改小 ...

请问问题解决了吗,可以分享下代码吗
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2019-7-9
在线时间
7 小时
发表于 2019-7-21 09:31:31 | 显示全部楼层
redgragon 发表于 2018-12-12 00:04
总结了一下,
①从工程中删除cc936.c等文件,c8t6装不下
②mallco.h中#define MEM_MAX_SIZE 42*1024改小 ...

我找了整个工程没找到malloc.h这个头文件,请问是在哪里的
回复

使用道具 举报

6

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2018-4-4
在线时间
40 小时
发表于 2019-7-24 08:24:05 | 显示全部楼层
malloc.h应该是属于SRAM里面的吧
回复

使用道具 举报

6

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2018-4-4
在线时间
40 小时
发表于 2019-7-24 08:27:39 | 显示全部楼层
正点原子 发表于 2018-8-19 00:52
你这是flash空间不够用了。cc936很大的。。。170多KB。必死无疑,用在C8T67上面

这样,下载程序很费内部Flash啊
回复

使用道具 举报

8

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2019-5-2
在线时间
43 小时
发表于 2020-3-17 17:03:55 | 显示全部楼层
遇到了同样的问题,收藏!
回复

使用道具 举报

13

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
175
金钱
175
注册时间
2018-6-18
在线时间
27 小时
 楼主| 发表于 2020-3-18 14:23:38 | 显示全部楼层
很早的帖子了,现在居然还有人回复,我把之前改好的工程发出来吧。程序很早之前写的,细节已经记不清了,要是有啥错希望指出来学习一下。

C8T6_Fatfs.zip

1.13 MB, 下载次数: 379

回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2019-8-1
在线时间
11 小时
发表于 2020-3-30 14:37:07 | 显示全部楼层
redgragon 发表于 2020-3-18 14:23
很早的帖子了,现在居然还有人回复,我把之前改好的工程发出来吧。程序很早之前写的,细节已经记不清了,要 ...

感谢楼主
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2020-11-22
在线时间
1 小时
发表于 2023-2-8 10:27:57 | 显示全部楼层
做小项目基本都是用c8t6的,楼主的问题很有价值,感谢
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2023-9-20
在线时间
1 小时
发表于 2023-9-20 17:09:31 | 显示全部楼层
为什么f_mount的返回值是0x01,半天一直找不出毛病
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 22:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表