关于cubemx生成fatfs+freertos工程默认两个错误的问题
使用环境,stm32f103rc芯片,模拟spi-SD卡。 fatfs用的User-defined,用了系统freertos版本 V2,代码都是cubemx生成。出现了下面问题。还没有开始写SD卡部分进入报错地方查看
后来更改freertos版本为v1,结果报错消失。
后来查看两次代码发现
cmsis_os2.c与cmsis_os.c区别,对信号量申请方式变了。本人水平也就只能分析道这里了。有人能帮助解决下吗?
V1和V2不应该兼容吗?
我不知道我的理解对不对。
附上cubemx生成的工程
V1和V2不兼容。
ST给FatFS仅做了V1封装层的接口函数 你这工程建立的有问题吧,如果选择CMSIS_V2,自然会调用cmsis_os2里面的文件,cmsis_os文件中有个条件判断:
#if (osCMSIS < 0x20000U),默认建立的工程应该是这样的:
int ff_cre_syncobj ( /* 1:Function succeeded, 0:Could not create the sync object */
BYTE vol, /* Corresponding volume (logical drive number) */
_SYNC_t *sobj /* Pointer to return the created sync object */
)
{
int ret;
#if _USE_MUTEX
#if (osCMSIS < 0x20000U)
osMutexDef(MTX);
*sobj = osMutexCreate(osMutex(MTX));
#else
*sobj = osMutexNew(NULL);
#endif
#else
#if (osCMSIS < 0x20000U)
osSemaphoreDef(SEM);
*sobj = osSemaphoreCreate(osSemaphore(SEM), 1);
#else
*sobj = osSemaphoreNew(1, 1, NULL);
#endif
#endif
ret = (*sobj != NULL);
return ret;
}
,这样就不会出现你的未定义文件;不过你要是想用configUSE_PORT_OPTIMISED_TASK_SELECTION,是要改下文件,不然会报错误,因为是任务优先级问题 eric2013 发表于 2020-12-6 12:09
V1和V2不兼容。
ST给FatFS仅做了V1封装层的接口函数
确实,使用cubemx构建freertos v2 + fatfs 的工程会报错 eric2013 发表于 2020-12-6 12:09
V1和V2不兼容。
ST给FatFS仅做了V1封装层的接口函数
这个问题的解决方案 是不是 我们需要给FatFS做V2封装层的接口?
页:
[1]