STM32F103C8T6移植FATFS问题求解

2019-10-14 21:05发布

大家好,我参考了Mini板的源码,用STM32F103C8T6+SD卡+FATFS时碰到问题,板子不带SPIFlash,看样子是内存的问题,报错如下:

compiling main.c...
compiling ff.c...
compiling cc936.c...
compiling exfuns.c...
..FATFSexfunsexfuns.c(124): warning:  #223-D: function "delay_ms" declared implicitly
                delay_ms(1000);
..FATFSexfunsexfuns.c: 1 warning, 0 errors
compiling fattester.c...
linking...
..OBJRoadDetector.axf: Error: L6406E: No space in execution regions with .ANY selector matching cc936.o(.constdata).
。。。。。。
..OBJRoadDetector.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.
"..OBJRoadDetector.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,原子哥,请问现在这种情况,怎么解呢?代码可以修改哪里呢?谢谢!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-10-14 22:17
1,报错是因为你的内存或者flash容量不够,C8T6就那点资源了,不够你折腾。
2,你这个f_write以后,要f_close,才会保存成功。随后,重新OPEN,再读取。
北极圈的黄昏
2楼-- · 2019-10-15 02:55
 精彩回答 2  元偷偷看……
来俩不甜的
3楼-- · 2019-10-15 05:01
就是内存不足,没用那个函数不出错是因为keil优化了
代码人生
4楼-- · 2019-10-15 07:25
嗯,把936里面的数组注释掉,就好了.谢谢!
代码人生
5楼-- · 2019-10-15 10:23
另外,我测试读写操作,写操作一直不成功,是我哪里有问题呢,请教各位,谢谢!

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! ");
                res = mf_write(w_buffer, sizeof(w_buffer));
                if(res==FR_OK) usb_printf("writefile ok! ");
                res = mf_read(sizeof(w_buffer));
                if(res==FR_OK) usb_printf("readfile ok! ");
        }
}

打印信息如下:
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.从开始读起。
谢谢各位。
xmmazhao
6楼-- · 2019-10-15 15:25
可以将cc936放到sd卡上去,论坛里面有帖子http://www.openedv.com/forum.php?mod=viewthread&tid=21730

一周热门 更多>