使用CubeMX构造一个包含了FreeRTOS和FATFS的项目,开了两个任务。
发现它把FATFS的初始化函数放在DefaultTask里执行。
如果放在DefaultTask里的话,要么,其它线程不要试图调用FatFs的函数。要么确保MX_FATFS_Init()执行完毕。
为什么不把MX_FATFS_Init()放在main.c里,在调用MX_FREERTOS_Init之前执行?
CubeMX这样构造是出于什么考虑?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
早上起来,突然冒出个念头:
如果多个任务都需要使用FATFS的API的话,还要做互斥。
会不会CubeMX的设计者希望,一个外设只由一个任务去操作,避免多任务抢占?
===================================================================================
问题解决
结果是,当选择了FreeRTOS,FATFS也要增加一些操作系统中的加锁动作。这个过程CubeMX替我做了,以至于我没有想到。
f_mount函数就带有中锁动作。如果在RTOS没有启动时去执行f_mount的话,就会在某入死循环。
CubeMX替我建了一个默认任务,其它中间件的初始化工作最好在默认任务里完成(包括USB)
放在哪里都行,使用之前初始化就好了
为什么必须要在 MX_FREERTOS_Init之前执行?为什么不能放在这里?