硬汉嵌入式论坛

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

[HAL] HAL库里面的锁函数__HAL_LOCK和__HAL_UNLOCK真是神奇的存在,知道在哪里开始的,却不知道在哪里就结束了

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2018-8-3 00:36:41 | 显示全部楼层 |阅读模式
说明:
1、特别注意,当前的锁机制是不支持RTOS的。
2、这里锁机制的目的就跟RTOS里面的互斥信号量一个意思,实现对资源的独享。只是HAL库这里,如果此资源(结构体变量等)还在操作中,再次操作这个资源会直接return
看下面源函数就明白了:
  1. #if (USE_RTOS == 1)
  2.   #error " USE_RTOS should be 0 in the current HAL release "
  3. #else
  4.   #define __HAL_LOCK(__HANDLE__)                                           \
  5.                                 do{                                        \
  6.                                     if((__HANDLE__)->Lock == HAL_LOCKED)   \
  7.                                     {                                      \
  8.                                        return HAL_BUSY;                    \
  9.                                     }                                      \
  10.                                     else                                   \
  11.                                     {                                      \
  12.                                        (__HANDLE__)->Lock = HAL_LOCKED;    \
  13.                                     }                                      \
  14.                                   }while (0)

  15.   #define __HAL_UNLOCK(__HANDLE__)                                          \
  16.                                   do{                                       \
  17.                                       (__HANDLE__)->Lock = HAL_UNLOCKED;    \
  18.                                     }while (0)
复制代码


以DMA里面的API为例,比如启动DMA传输函数在这里开启了:
888.png

对于函数HAL_DMA_Start,启动后需要调用函数HAL_DMA_Abort或者HAL_DMA_PollForTransfer配套使用,关锁函数就是在这两个函数里面。DMA里面的API不是很多,还好找,如果是API多的,估计都不知道在哪里关锁了。

QQ截图20180803005021.png
99.png


回复

使用道具 举报

4

主题

42

回帖

54

积分

初级会员

积分
54
发表于 2018-8-3 13:52:20 | 显示全部楼层
1,库里的BUG挺多的,尤其是这种必须在特定条件下才能出现的问题,我估计他们自己也没测试过。
2,这个东西根本没什么用,裸机跑就是单线程的,根本用不着做这些处理。用OS那个也没什么用,因多线程时给你返回个HAL_ERROR你还是不怎么回事,是该挂起线程啊还是重试啊还是等待啊?所以这种硬件访问互斥的问题还是要用OS本身的信号量或者互斥锁才是合理的方案,用系统的信号量可以在资源释放后自动唤醒线程,而这些个LOCK和UNLOCK是做不到的。
3. ST一边吹它的新器件性能NB了多少,提高了多少,一边使劲推它这个臃肿的库,程序复杂了那你就不得不买更高级的器件,以前有个  安迪-比尔  定律说的就是这样的问题,现在ST更厉害在MCU领域把安迪和比尔的事情都自己干完。

题外话,个人感觉,做软件的人只知道做加法,不愿在原来的地方修改,就更别提做减法了。其结果就是,电脑或者手机程序也好,源代码也好,都是越来越大,越来越臃肿,因为他们不会减少代码量;而增加出来的新功能却不多,性能就更别提了,能不拖慢性能都算是非常用心非常良心的升级。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2018-8-3 14:01:37 | 显示全部楼层
jinggx 发表于 2018-8-3 13:52
1,库里的BUG挺多的,尤其是这种必须在特定条件下才能出现的问题,我估计他们自己也没测试过。
2,这个东 ...

1、明年带安全认证的H7库就发布了,那个做的认证比较全面。
2、有用,对于用户操作API是一种有效的检测机制,其实还是有意义的。
3、这个库的确是臃肿,这个没办法,因为要配合那个傻瓜式的软件CubeMX。软件要傻瓜式,操作的API必然复杂。

4、软件方面更新当前主要有两种,一种就是打补丁,这种方式主要用于维护,windows系统不都是这样吗。另一种就是直接更新换代,像uCOS-II直接升级到全新的uCOS-III,RTX4直接升级到RTX5,都已经是全新的东西。
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-11-10 10:38:34 | 显示全部楼层
eric2013 发表于 2018-8-3 14:01
1、明年带安全认证的H7库就发布了,那个做的认证比较全面。
2、有用,对于用户操作API是一种有效的检测 ...

2020年了,安全认证的H7库 在哪里下载?谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-11-11 08:09:53 | 显示全部楼层
bear_yh 发表于 2020-11-10 10:38
2020年了,安全认证的H7库 在哪里下载?谢谢

https://www.st.com/content/st_com/en/functionalsafety.html
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-11-11 10:45:23 | 显示全部楼层
eric2013 发表于 2020-11-11 08:09
https://www.st.com/content/st_com/en/functionalsafety.html

cubemx里面找了一圈没找到这个,cubemx能直接下载吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-11-11 10:47:49 | 显示全部楼层
bear_yh 发表于 2020-11-11 10:45
cubemx里面找了一圈没找到这个,cubemx能直接下载吗?

这个必须要注册申请。
回复

使用道具 举报

13

主题

192

回帖

231

积分

高级会员

积分
231
发表于 2020-11-11 18:18:07 | 显示全部楼层
额。。看了一下,好像用这个安全库要收费的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-11-12 03:18:52 | 显示全部楼层
zhang0352505 发表于 2020-11-11 18:18
额。。看了一下,好像用这个安全库要收费的?

不收费,就是要申请下。
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-11-12 11:04:45 | 显示全部楼层
eric2013 发表于 2020-11-11 10:47
这个必须要注册申请。

这个安全库 比HAL库效率高吗?
回复

使用道具 举报

41

主题

112

回帖

235

积分

高级会员

积分
235
发表于 2020-11-12 11:06:12 | 显示全部楼层
eric2013 发表于 2018-8-3 14:01
1、明年带安全认证的H7库就发布了,那个做的认证比较全面。
2、有用,对于用户操作API是一种有效的检测 ...

除了H7系列,其他系列目前也都有安全裤吗?f1,f4,f7……
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2020-11-12 11:17:07 | 显示全部楼层
bear_yh 发表于 2020-11-12 11:04
这个安全库 比HAL库效率高吗?

这个库我还没用过。
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
发表于 2021-7-9 17:17:42 | 显示全部楼层
小白一枚,我怎么理解的是LOCK是关锁,UNLOCK是开锁呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
 楼主| 发表于 2021-7-9 18:48:39 | 显示全部楼层
alicexhong 发表于 2021-7-9 17:17
小白一枚,我怎么理解的是LOCK是关锁,UNLOCK是开锁呢?

这里的开锁是指的开启锁机制。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 10:28 , Processed in 0.215648 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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