OpenEdv-开源电子网

标题: freertos当中如何处理USB与FATFS [打印本页]

作者: g758993137    时间: 2020-3-20 19:19
标题: freertos当中如何处理USB与FATFS
请教一下,在freertos中,我用NANDFLASH做U盘,同时又要有FATFS对它进行数据的读写,我看了代码并搜了一下资料,由于USB的中断和FATFS调用的读写函数是一样的,需要做一个互斥处理,但是freertos的互斥信号量只能用于任务当中,请教一下该如何去做这个互斥访问

作者: 霸王猫    时间: 2020-3-21 19:31
本帖最后由 霸王猫 于 2020-3-23 09:05 编辑

把这个函数编写成支持可重入的函数

   1、该函数中只能是局部变量,不能有全局变量
   2、入口参数用形参数
   3、要么编写成该函数有返回值
   4、要么编写成无返回值时,在形参中用指针形参返回

---------------------------------------------------------------
    因此如果需要使用全局变量,就可以这样:

         获取互斥信号量
         全局变量暂存到局部变量
         释放互斥信号量
         调用刚刚编写好的可重入函数(该函数的形参为刚刚暂存的局部变量)            


作者: 霸王猫    时间: 2020-3-21 19:34
本帖最后由 霸王猫 于 2020-3-23 09:05 编辑

另外:如果全局变量在中断中写,在任务中读,则就不能使用互斥信号量,只能使用关中断的方式保护。

    ----可以这样编写【任务】中的代码

         关中断
         全局变量暂存到局部变量
         开中断
         调用刚刚编写好的可重入函数(该函数的形参为刚刚暂存的局部变量)   
作者: 八度空间    时间: 2020-3-22 12:00
可以使用队列来做啊,要写入的数据放到队列里边,在fatfs任务中就读取,然后往fatfs里边丢就是了
作者: justchen    时间: 2020-4-17 10:43
mark  mark




欢迎光临 OpenEdv-开源电子网 (http://openedv.com/) Powered by Discuz! X3.4