| 
 
| 在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方式传输的时候被用到了,在库中很多的底层模块驱动代码都是用到了这个,
 
 这个库没看多久,项目紧实在不清楚这个是干啥的,求解释。
 
 其实**心的是,我们做的项目上了FreeRTOS,由于要管理超过6个串口,这里部分串口打算采用UART DMA方式,从上面的代码看出当#define USE_RTOS 1之后,就会由于上述代码而报Error “USE_RTOS should be 0 in the current HAL release”,
 
 我觉得这可能考虑到了RTOS中的任务调度对DMA产生了影响造成的吧,这具体是为什么。
 
 关键问题就是,我该如何在RTOS中使用UART的DMA传输?请诸位大神解答。
 | 
 |