OpenEdv-开源电子网

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

STM32F103C8T6移植FATFS问题求解

[复制链接]

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2017-2-21
在线时间
17 小时
发表于 2017-3-6 11:54:10 | 显示全部楼层 |阅读模式
2金钱
大家好,我参考了Mini板的源码,用STM32F103C8T6+SD卡+FATFS时碰到问题,板子不带SPIFlash,看样子是内存的问题,报错如下:

compiling main.c...
compiling ff.c...
compiling cc936.c...
compiling exfuns.c...
..\FATFS\exfuns\exfuns.c(124): warning:  #223-D: function "delay_ms" declared implicitly
                delay_ms(1000);
..\FATFS\exfuns\exfuns.c: 1 warning, 0 errors
compiling fattester.c...
linking...
..\OBJ\RoadDetector.axf: Error: L6406E: No space in execution regions with .ANY selector matching cc936.o(.constdata).
。。。。。。
..\OBJ\RoadDetector.axf: Error: L6407E: Sections of aggregate size 0x322f8 bytes could not fit into .ANY selector(s).
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 0 warning and 358 error messages.
"..\OBJ\RoadDetector.axf" - 358 Error(s), 1 Warning(s).
Target not created.
Build Time Elapsed:  00:00:03


因为看了之前的贴子,说内存池改小试试,我修成了
#define MEM_MAX_SIZE                        15*1024                 

问题是:移植完了FATFS之后编译没有错误,但是当我做测试时,调用了下面的函数就出现上面的报错信息。
u8 w_buffer[]={"123456789"};
void ExFatfs_Test(void)
{
        u8 res;
        res = mf_open("0:/Data",FA_READ);
        if(res==FR_OK)
        {
        //        res = mf_write(w_buffer, 5);
        }
}

我在Mini板的源码上也同样添加了这个测试函数,编译是通过的。

比较了C8T6,芯片的FlashSize有64K,而Mini板RCT6 FlashSize是256K,原子哥,请问现在这种情况,怎么解呢?代码可以修改哪里呢?谢谢!

最佳答案

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

1,报错是因为你的内存或者flash容量不够,C8T6就那点资源了,不够你折腾。 2,你这个f_write以后,要f_close,才会保存成功。随后,重新OPEN,再读取。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165369
金钱
165369
注册时间
2010-12-1
在线时间
2110 小时
发表于 2017-3-6 11:54:11 | 显示全部楼层
1,报错是因为你的内存或者flash容量不够,C8T6就那点资源了,不够你折腾。
2,你这个f_write以后,要f_close,才会保存成功。随后,重新OPEN,再读取。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

13

主题

303

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2266
金钱
2266
注册时间
2015-2-3
在线时间
560 小时
发表于 2017-3-6 12:38:19 | 显示全部楼层
cc936.c里面使用的内存太大   你看下是不是 cc936.c里面有大数组
STM32/LPC1788/51
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3765
金钱
3765
注册时间
2015-4-26
在线时间
762 小时
发表于 2017-3-6 14:25:20 | 显示全部楼层
就是内存不足,没用那个函数不出错是因为keil优化了
我有故事,你有酒吗
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2017-2-21
在线时间
17 小时
 楼主| 发表于 2017-3-6 15:22:13 | 显示全部楼层
嗯,把936里面的数组注释掉,就好了.谢谢!
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2017-2-21
在线时间
17 小时
 楼主| 发表于 2017-3-6 15:27:40 | 显示全部楼层
另外,我测试读写操作,写操作一直不成功,是我哪里有问题呢,请教各位,谢谢!

u8 w_buffer[]={0x11,0x22,0x33,0x44,0x55,0x66};
void ExFatfs_Test(void)
{
        u8 res;
        res = mf_open("0:/Data/123.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
        if(res==FR_OK)
        {
                usb_printf("openfile ok!\r\n");
                res = mf_write(w_buffer, sizeof(w_buffer));
                if(res==FR_OK) usb_printf("writefile ok!\r\n");
                res = mf_read(sizeof(w_buffer));
                if(res==FR_OK) usb_printf("readfile ok!\r\n");
        }
}

打印信息如下:
SD Card OK
SD Card Size:  15126528   MB
sd total=7555072,free=7554912
openfile ok!

Begin Write file...
Write data len:6
Writed data len:6
Write data over.
writefile ok!

Read file data is:
7890
Readed data len:4
Read data over
readfile ok!

我的SD卡里面建了Data的文件夹,里面有一个123.txt的文件,数据是:1234567890

现在读是可以的,写不成功,而且读是从写的长度后开始的。用mf_lseek()怎么来让读操作从开始读起呢?

所以我的求解问题:
1. 写不成功;2.从开始读起。
谢谢各位。
回复

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-11-1
在线时间
18 小时
发表于 2017-3-6 15:35:44 | 显示全部楼层
可以将cc936放到sd卡上去,论坛里面有帖子http://www.openedv.com/forum.php?mod=viewthread&tid=21730
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2017-2-21
在线时间
17 小时
 楼主| 发表于 2017-3-6 17:00:35 | 显示全部楼层
嗯,这个字库的处理方式得学习一下。
我先把单纯的数据读写搞定,现在还是卡在写操作不知道怎么能成功。
帮我看看上面的问题是不是我的代码出错呢?
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2017-2-21
在线时间
17 小时
 楼主| 发表于 2017-3-6 17:28:47 | 显示全部楼层
u8 w_buffer[]={0x11,0x22,0x33,0x44,0x55,0x66};
void ExFatfs_Test(void)
{
        u8 res;
        res = mf_open("0:/Data/123.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
        if(res==FR_OK)
        {
                usb_printf("openfile ok!\r\n");
                res = mf_write(w_buffer, sizeof(w_buffer));//这个地方不是把w_buffer的内容写到SD卡123.txt中去了吗?怎么不成呢?不解。。。。
                if(res==FR_OK) usb_printf("writefile ok!\r\n");
                res = mf_read(sizeof(w_buffer));
                if(res==FR_OK) usb_printf("readfile ok!\r\n");
        }
}
回复

使用道具 举报

36

主题

99

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2022-4-8
在线时间
82 小时
发表于 2024-10-1 00:14:58 | 显示全部楼层
你好,问题解决了吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-1-19 02:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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