关于STM32F4 Cube库UART DMA的问题,什么是__HAL_Lock()?

2019-03-23 17:44发布

在STM32提供的F4 CUBE库,stm32f4XX_hal_def.h中提供了如下代码:

  1. #if (USE_RTOS == 1)
  2.   /* Reserved for future use */
  3.   #error “USE_RTOS should be 0 in the current HAL release”
  4. #else
  5.   #define __HAL_LOCK(__HANDLE__)                                          
  6.                                 do{                                       
  7.                                     if((__HANDLE__)->Lock == HAL_LOCKED)   
  8.                                     {                                      
  9.                                        return HAL_BUSY;                    
  10.                                     }                                      
  11.                                     else                                   
  12.                                     {                                      
  13.                                        (__HANDLE__)->Lock = HAL_LOCKED;   
  14.                                     }                                      
  15.                                   }while (0)

  16.   #define __HAL_UNLOCK(__HANDLE__)                                          
  17.                                   do{                                       
  18.                                       (__HANDLE__)->Lock = HAL_UNLOCKED;   
  19.                                     }while (0)
  20. #endif /* USE_RTOS */
复制代码


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

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

其实我操心的是,我们做的项目上了FreeRTOS,由于要管理超过6个串口,这里部分串口打算采用UART DMA方式,从上面的代码看出当#define USE_RTOS 1之后,就会由于上述代码而报Error “USE_RTOS should be 0 in the current HAL release”,

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

关键问题就是,我该如何在RTOS中使用UART的DMA传输?请诸位大神解答。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。