完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在STM32L4xx的HAL库里面的stm32l4xx_hal_uart.c文件中HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)函数里有__HAL_LOCK(huart);和__HAL_UNLOCK(huart);配合使用的,具体是什么作用?为什么要在这个函数里面添加这样的代码?
|
|
相关推荐
12个回答
|
|
看到有些貌似“正确”的回复(还有附和声)我不免想纠正下!请下结论前一定要看足够的资料来支撑自己的结论。
__HAL_LOCK()以及__HAL_UNLOCK()是用于非操作系统(或可以理解为单线程内)的对公共资源访问的一种保护。 多线程中上述LOCK函数没作用(用了也会有潜在风险),需要使用RTOS的比如:事件、信号量、临界区、互斥量等等来实现对公共资源的保护。LOCK等函数和RTOS中的概念是完全不同的,更不是相等的! 看HAL里面的代码也应该有所思吧: |
|
|
|
|
|
|
|
楼上正解
|
|
|
|
看到串口库函数中,有好多的函数里面都要对串口所抽象出来的变量进行操作的时候,都会在之前和之后加这样互斥的操作,为什么要这样做? |
|
|
|
非常感谢你的回答! |
|
|
|
|
|
|
|
7762642422d 发表于 2019-1-18 06:48 非常感谢你的回答,目前我是加了μC/OS的,所以采用了将USE_RTOS=1,然后将__HAL_CLOK和__HAL_UNCLOCK宏定义为空了。 |
|
|
|
60user16 发表于 2019-1-18 07:56 恩,还好你没有受到“误导”。 多看、多思考,对别人的回复总是抱怀疑态度。 |
|
|
|
60user16 发表于 2019-1-18 07:56 为什么我按照你的方法改过之后编译提示出错,错误为error directive :"USE_RTOS should be 0 in the current HAL release",我用的是FREERTOS |
|
|
|
hu_wfllllllllfl 发表于 2019-1-18 08:15 因为这个宏USE_RTOS控制这执行打印这句错误提示。 |
|
|
|
楼主你说你是加了μC/OS,然后将USE_RTOS=1,然后将__HAL_CLOK和__HAL_UNCLOCK宏定义为空了。我用的是freertos,然后我也将USE_RTOS=1了,也屏蔽掉了_HAL_LOCKh和_HAL_UNLOCK,为啥编译不通过 |
|
|
|
hu_wfllllllllfl 发表于 2019-1-18 08:31 FreeRTOS的我就不知道了,你要是出现错误提示打印的话,就看看是不是宏控制了那句话。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1107 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1055 浏览 2 评论
2159 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1253 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1678 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 18:02 , Processed in 0.715258 second(s), Total 64, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号