硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1098|回复: 5
收起左侧

[技术讨论] 使用SPI DMA时会一直卡住

[复制链接]

5

主题

22

回帖

37

积分

新手上路

积分
37
发表于 2024-12-15 16:43:01 | 显示全部楼层 |阅读模式
在使用SPI的DMA读取外部FLASH数据的时候,会出现卡死在通道x传输完成语句里,例如:while(DMA_GetFlagStatus(DMA1_FLAG_TC3) == RESET),但是debug能看到返回的是RESET了。这个触发的情况大概是两个线程同时读取FLASH吗,因为一个线程是处理设备空闲时蓝牙发送的连接数据,然后刷一个小图标,另一个线程是处理蓝牙数据跟读FLASH刷图片。请问这个问题有没有解决方案?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-12-16 08:25:24 | 显示全部楼层
方便的话,完整车处理代码看下。两个任务都操作要注意做好互斥处理
回复

使用道具 举报

5

主题

22

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2024-12-16 09:59:19 | 显示全部楼层
eric2013 发表于 2024-12-16 08:25
方便的话,完整车处理代码看下。两个任务都操作要注意做好互斥处理

那应该就是两个线程同时操作的情况下,导致了这样的异常,我们跑FreeRTOS没做互斥处理.话说贵司有没有处理比较好的例程可以学习学习
回复

使用道具 举报

5

主题

162

回帖

177

积分

初级会员

积分
177
发表于 2024-12-16 11:09:44 | 显示全部楼层
cmz 发表于 2024-12-16 09:59
那应该就是两个线程同时操作的情况下,导致了这样的异常,我们跑FreeRTOS没做互斥处理.话说贵司有 ...

直接用信号量互斥就好了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-12-17 09:04:54 | 显示全部楼层
cmz 发表于 2024-12-16 09:59
那应该就是两个线程同时操作的情况下,导致了这样的异常,我们跑FreeRTOS没做互斥处理.话说贵司有 ...

这种的,我们一般都不开两个任务,我们是仅开一个任务,那个文件要操作就给这个任务发消息。

你当前使用互斥信号量也可以的,更简单省事些。


回复

使用道具 举报

5

主题

22

回帖

37

积分

新手上路

积分
37
 楼主| 发表于 2024-12-17 17:43:06 | 显示全部楼层
eric2013 发表于 2024-12-17 09:04
这种的,我们一般都不开两个任务,我们是仅开一个任务,那个文件要操作就给这个任务发消息。

你当前使 ...

目前的话,用上了效果还可以,不过我注意到很多人获取和释放信号量的时候,并不会确认是当前任务获取到信号量,如果不是当前任务获取到信号量,那么释放的时候则有可能触发断言---在FreeRTOS中,prvResetNextTaskUnblockTime卡在configASSERT(pxTCB == pxCurrentTCB)
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:02 , Processed in 0.040986 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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