FATfs+FreeRTOS移植的时候代码运行时序问题导致底层SD卡初始化的问题

在移植了FATfs和FreeRTOS后,代码在挂载SD卡时遇到问题,因为f_mount函数会屏蔽Systick中断,导致HAL_Delay函数在临界段中产生异常。为解决这个问题,作者将HAL_Delay替换为自定义的delay_xms函数,该函数通过直接读取SysTick计数器来实现延迟,即使在中断被屏蔽的情况下也能正常工作。
摘要由CSDN通过智能技术生成

移植完FATfs+FreeRTOS之后,发现挂载SD卡的时候代码总是卡在

 原因:在使用FreeRTOS的时候,调用FATfs中的f_mount函数会进入临界段,在临界段中Systick定时器中断会被屏蔽,而Systick中断服务函数中会调用HAL_IncTick函数来使全局变量umTick自增,所以只要在临界段中调用HAL_Delay就会导致莫名奇妙的问题。

 将HAL_Delay底层修改为自己定义的函数delay_xms

 

 该函数底层直接去读SysTick寄存器的计数值,虽然中断被屏蔽了,但是计数器还是在工作!所以可以根据MCU主频,然后通过读计数值来完成延时操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值