中级会员
 
- 积分
- 389
- 金钱
- 389
- 注册时间
- 2017-5-21
- 在线时间
- 211 小时
|
10金钱
大家好。这两天我自己试验原子哥的FATFS实验,用原子哥的方式做了一遍,没有问题。然后自己在STM32 CubeMX里开启FreeRTOS和FATFS做了一遍,发现一个错误,搞不明白问题在哪,希望有知道的前辈指点一下。
问题1:f_mount 和 f_open 两个函数均能返回正常,但是之后的f_lseek 和 f_write却一直返回9,即“ FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */”。
还有任务的堆栈也是够的。
搞了两天也没有搞明白哪错了,求指点。(任务的具体代码放在文章最后。)
问题2:STM32起始文件里的堆栈是做什么用的?两个值的大小依据什么确定?(如下图红框内的内容)
因为我汇编学得不好,看不懂。希望有明白的前辈也指点一下。
-------------
代码如下:
[mw_shl_code=c,true]void TFCard_Task(void const * argument)
{
static uint8_t res = 55;
uint8_t t = 0;
char buf[1] = {0};
/*申请内存*/
fs = (FATFS*)pvPortMalloc(sizeof(FATFS));//磁盘工作区
if(fs != NULL)
printf("内存1申请成功!\r\n");
else
printf("内存1申请失败!\r\n");
file = (FIL*)pvPortMalloc(sizeof(FIL));//文件内存
if(file != NULL)
printf("内存2申请成功!\r\n");
else
printf("内存2申请失败!\r\n");
res = f_mount(fs,"0:",1); //挂载SD卡
printf("函数f_mount返回的值是:%d.\r\n",res);
while(1)
{
res = f_open (file,"0:/tan.txt", FA_OPEN_ALWAYS|FA_WRITE);
printf("f_open函数的返回值为:%d.\r\n",res);
res = f_lseek(file, f_size(file));
printf("f_lseek函数的返回值为:%d.\r\n",res);
for (; t<20;t++)
{
sprintf(buf,"%d",t);
res = f_write (file, buf, 2, &bww);
res = f_write (file, "\r\n", 3, &bww);
printf("f_write函数的返回值为:%d.\r\n",res);
f_sync(file);
delay_ms(1000);
}
f_sync(file);
res = f_close(file);
printf("f_close函数的返回值为:%d.\r\n",res);
t = 0;
delay_ms(1000);
}
}[/mw_shl_code]
|
|