平台STM32F767正点原子,SD卡,SDIO接口;
移植好后可以cat文件,表面读驱动正常;
可以创建文件夹,写驱动应该也就正常了;
fd=open(file_name,O_RDWR|O_CREAT,0);这句会在
int ff_req_grant(_SYNC_t m)
{
if (rt_mutex_take(m, _FS_TIMEOUT) == RT_EOK)
return RT_TRUE;
return RT_FALSE;
}
返回RT_FALSE;
全局搜索发现ffconf.h这里有点描述:
/* The _FS_REENTRANT option switches the reentrancy (thread safe) of the FatFs module.
/
/ 0: Disable reentrancy. _SYNC_t and _FS_TIMEOUT have no effect.
/ 1: Enable reentrancy. Also user provided synchronization handlers,
/ ff_req_grant, ff_rel_grant, ff_del_syncobj and ff_cre_syncobj
/ function must be added to the project. */
于是注释掉RT_DFS_ELM_REENTRANT,然后创建文件成功;
反推用了这个函数的程序,出现在这里;
static
FRESULT validate ( /* FR_OK(0): The object is valid, !=0: Invalid */
FATFS *fs, /* Pointer to the file system object */
WORD id /* Member id of the target object to be checked */
)
{
if (!fs || !fs->fs_type || fs->id != id)
return FR_INVALID_OBJECT;
ENTER_FF(fs); /* Lock file system */
if (disk_status(fs->drv) & STA_NOINIT)
return FR_NOT_READY;
return FR_OK;
}
然而很多open、read之类的函数都调用了,用IAR quick watch看了
出问题时rt_mutex_take(m, _FS_TIMEOUT)中的m是归finsh_thread的;
但是在finsh_thread没找到谁操作了啊,何处下手呢,请大侠们指点一下。
查看更多