打印
[应用相关]

什么是__HAL_Lock()

[复制链接]
1470|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zwll|  楼主 | 2018-8-29 08:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
什么是__HAL_Lock()
沙发
pengf| | 2018-8-29 08:29 | 只看该作者

什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
板凳
zwll|  楼主 | 2018-8-29 08:31 | 只看该作者
在STM32提供的F4 CUBE库,stm32f4XX_hal_def.h中提供了如下代码:

#if (USE_RTOS == 1)
  /* Reserved for future use */
  #error “USE_RTOS should be 0 in the current HAL release”
#else
  #define __HAL_LOCK(__HANDLE__)                                           \
                                do{                                        \
                                    if((__HANDLE__)->Lock == HAL_LOCKED)   \
                                    {                                      \
                                       return HAL_BUSY;                    \
                                    }                                      \
                                    else                                   \
                                    {                                      \
                                       (__HANDLE__)->Lock = HAL_LOCKED;    \
                                    }                                      \
                                  }while (0)

  #define __HAL_UNLOCK(__HANDLE__)                                          \
                                  do{                                       \
                                      (__HANDLE__)->Lock = HAL_UNLOCKED;    \
                                    }while (0)
#endif /* USE_RTOS */


这个__HAL_LOCK 与__HAL_UNLOCK 宏在UART以DMA方式传输的时候被用到了,在库中很多的底层模块驱动代码都是用到了这个,

这个库没看多久,项目紧实在不清楚这个是干啥的,求解释。

使用特权

评论回复
地板
zwll|  楼主 | 2018-8-29 08:33 | 只看该作者
我们做的项目上了FreeRTOS,由于要管理超过6个串口,这里部分串口打算采用UART DMA方式,从上面的代码看出当#define USE_RTOS 1之后,就会由于上述代码而报Error “USE_RTOS should be 0 in the current HAL release”,

我觉得这可能考虑到了RTOS中的任务调度对DMA产生了影响造成的吧,这具体是为什么。

使用特权

评论回复
5
pangb| | 2018-8-29 08:34 | 只看该作者

然后呢?你是怎么应对这个的呢        

使用特权

评论回复
6
zwll|  楼主 | 2018-8-29 08:36 | 只看该作者
我该如何在RTOS中使用UART的DMA传输?

使用特权

评论回复
7
chenjunt| | 2018-8-29 08:38 | 只看该作者
看了下lock 就是个hal 的标志而已啊

使用特权

评论回复
8
gongche| | 2018-8-29 08:39 | 只看该作者
DMA的应该,应该是配置完就可以,基本与CPU意见OS没有太大关系

使用特权

评论回复
9
zyf部长| | 2018-8-29 08:41 | 只看该作者
感觉是该设备被一个任务占用后,设置标志,然后其他任务调用的话就会返回HAL_BUSY。

使用特权

评论回复
10
zwll|  楼主 | 2018-8-29 08:43 | 只看该作者

好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先        

使用特权

评论回复
11
huahuagg| | 2018-8-29 15:06 | 只看该作者
http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=610273&page=1#pid2232479

使用特权

评论回复
12
huahuagg| | 2018-8-29 15:07 | 只看该作者
这个问题好多人问过了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

885

主题

11314

帖子

5

粉丝