lostangel 发表于 2020-12-5 13:23:57

关于cubemx生成fatfs+freertos工程默认两个错误的问题

使用环境,stm32f103rc芯片,模拟spi-SD卡。 fatfs用的User-defined,用了系统freertos版本 V2,代码都是cubemx生成。出现了下面问题。还没有开始写SD卡部分

进入报错地方查看

后来更改freertos版本为v1,结果报错消失。
后来查看两次代码发现
cmsis_os2.c与cmsis_os.c区别,对信号量申请方式变了。本人水平也就只能分析道这里了。有人能帮助解决下吗?



V1和V2不应该兼容吗?
我不知道我的理解对不对。
附上cubemx生成的工程

eric2013 发表于 2020-12-6 12:09:29

V1和V2不兼容。

ST给FatFS仅做了V1封装层的接口函数

阴世幽泉 发表于 2020-12-17 13:31:39

你这工程建立的有问题吧,如果选择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,是要改下文件,不然会报错误,因为是任务优先级问题

quhaton 发表于 2020-12-17 17:10:26

eric2013 发表于 2020-12-6 12:09
V1和V2不兼容。

ST给FatFS仅做了V1封装层的接口函数

确实,使用cubemx构建freertos v2 + fatfs 的工程会报错

quhaton 发表于 2020-12-17 17:27:23

eric2013 发表于 2020-12-6 12:09
V1和V2不兼容。

ST给FatFS仅做了V1封装层的接口函数

这个问题的解决方案 是不是 我们需要给FatFS做V2封装层的接口?
页: [1]
查看完整版本: 关于cubemx生成fatfs+freertos工程默认两个错误的问题