• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

CubeMX+FreeRTOS+FATFS的一个疑问

Spirit 2018-11-14 浏览量:1615

使用CubeMX构造一个包含了FreeRTOS和FATFS的项目,开了两个任务。

发现它把FATFS的初始化函数放在DefaultTask里执行。

如果放在DefaultTask里的话,要么,其它线程不要试图调用FatFs的函数。要么确保MX_FATFS_Init()执行完毕。

为什么不把MX_FATFS_Init()放在main.c里,在调用MX_FREERTOS_Init之前执行?

CubeMX这样构造是出于什么考虑?

QQ图片20181114124025.png

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

早上起来,突然冒出个念头:

如果多个任务都需要使用FATFS的API的话,还要做互斥。

会不会CubeMX的设计者希望,一个外设只由一个任务去操作,避免多任务抢占?

===================================================================================

问题解决

结果是,当选择了FreeRTOS,FATFS也要增加一些操作系统中的加锁动作。这个过程CubeMX替我做了,以至于我没有想到。

f_mount函数就带有中锁动作。如果在RTOS没有启动时去执行f_mount的话,就会在某入死循环。

CubeMX替我建了一个默认任务,其它中间件的初始化工作最好在默认任务里完成(包括USB)

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 可能就是分层分模块编程的思维方式,才这样写的吧
    • 发布于 2018-11-15
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 放在哪里都行,使用之前初始化就好了

    为什么必须要在 MX_FREERTOS_Init之前执行?为什么不能放在这里?

    • 发布于2018-11-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 这是模块分层编程的思想,使用来说没啥区别
    • 发布于2018-11-17
    • 举报
    • 评论 0
    • 0
    • 0

  • 其实个人觉得区别不大,我就喜欢放在main.c那里去初始化
    • 发布于2018-11-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是分模块编程的操作,这样操作比较容易调试你的程序
    • 发布于2018-12-14
    • 举报
    • 评论 0
    • 0
    • 0

  • 分层分模块操作,在实际的项目里面用的非常多
    • 发布于2018-12-19
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

CubeMX+FreeRTOS+FATFS的一个疑问