OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4271|回复: 4

freertos当中如何处理USB与FATFS

[复制链接]

4

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2020-1-9
在线时间
11 小时
发表于 2020-3-20 19:19:14 | 显示全部楼层 |阅读模式
请教一下,在freertos中,我用NANDFLASH做U盘,同时又要有FATFS对它进行数据的读写,我看了代码并搜了一下资料,由于USB的中断和FATFS调用的读写函数是一样的,需要做一个互斥处理,但是freertos的互斥信号量只能用于任务当中,请教一下该如何去做这个互斥访问
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2020-3-21 19:31:21 | 显示全部楼层
本帖最后由 霸王猫 于 2020-3-23 09:05 编辑

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

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

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

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

回复 支持 反对

使用道具 举报

19

主题

334

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1108
金钱
1108
注册时间
2018-11-6
在线时间
240 小时
发表于 2020-3-21 19:34:38 | 显示全部楼层
本帖最后由 霸王猫 于 2020-3-23 09:05 编辑

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

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

         关中断
         全局变量暂存到局部变量
         开中断
         调用刚刚编写好的可重入函数(该函数的形参为刚刚暂存的局部变量)   
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2020-3-22 12:00:59 | 显示全部楼层
可以使用队列来做啊,要写入的数据放到队列里边,在fatfs任务中就读取,然后往fatfs里边丢就是了
回复 支持 反对

使用道具 举报

18

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
190
金钱
190
注册时间
2019-5-24
在线时间
73 小时
发表于 2020-4-17 10:43:42 | 显示全部楼层
mark  mark
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 22:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表