硬汉嵌入式论坛

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

[HAL] 将HAL库的中断改成寄存器方式时,特别注意HAL库锁机制和状态设置这两个大坑

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2019-5-16 11:28:51 | 显示全部楼层 |阅读模式
搞HAL库有一段时间了,一直没有发现他搞锁机制有什么用,更重要的是这个锁机制是不支持RTOS,所以起不到应有的作用。
__HAL_UNLOCK
__HAL_LOCK

还有这个状态判断
DMA_Handle.State = HAL_DMA_STATE_READY

这两个机制,除了坑还是坑。


用户自己写的话,要将这两个解除,比如DMA的正常模式,如果多次调用函数HAL_DMA_Start_IT,就要尤其注意。

进入中断后,务必手动解锁并设置状态。以前就说过一次,这个锁机制处理的欠妥,开锁和解锁完全在两个不同的函数,使用非常不方便。

  1. void DMA1_Stream1_IRQHandler(void)
  2. {
  3.         /* 传输完成中断 */
  4.         if((DMA1->LISR & DMA_FLAG_TCIF1_5) != RESET)
  5.         {
  6.                 __HAL_UNLOCK(&DMA_Handle);
  7.                 DMA_Handle.State = HAL_DMA_STATE_READY;
  8.                
  9.                 /* 清除标志 */
  10.                 DMA1->LIFCR = DMA_FLAG_TCIF1_5;
  11.         }
  12. }
复制代码







回复

使用道具 举报

28

主题

274

回帖

358

积分

高级会员

积分
358
发表于 2019-5-16 13:39:45 | 显示全部楼层
有人说  撸寄存器 比 学 HAL 快
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
 楼主| 发表于 2019-5-16 13:45:35 | 显示全部楼层
suozhang 发表于 2019-5-16 13:39
有人说  撸寄存器 比 学 HAL 快

寄存器太麻烦了,特别修改参数配置时,LL库就是最直接的撸寄存器,非常不方便。

需要配合HAL库的API做配置,而HAL的优势就在这里了,初始化简单,配置方便。

我们仅需把频繁调用的换成寄存器就可以了。
回复

使用道具 举报

610

主题

3062

回帖

4912

积分

至尊会员

积分
4912
发表于 2019-5-16 22:19:15 | 显示全部楼层
eric2013 发表于 2019-5-16 13:45
寄存器太麻烦了,特别修改参数配置时,LL库就是最直接的撸寄存器,非常不方便。

需要配合HAL库的API做 ...

很高深啦,
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 01:59 , Processed in 0.155626 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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