[STM32F1] 什么是__HAL_Lock()

[复制链接]
1714|39
bestwell 发表于 2023-5-18 13:58 | 显示全部楼层
__HAL_Lock()是一种用于多线程保护的函数,常用于STM32 HAL库中。
Pretext 发表于 2023-5-18 14:06 | 显示全部楼层
zwll 发表于 2022-4-17 21:03
在STM32提供的F4 CUBE库,stm32f4XX_hal_def.h中提供了如下代码:

#if (USE_RTOS == 1)

从代码上看不出来具体是锁什么的。
天天向善 发表于 2023-5-18 14:06 | 显示全部楼层
要看这个函数用在什么地方才知道是干嘛的。
芯路例程 发表于 2023-5-18 14:08 | 显示全部楼层
zwll 发表于 2022-4-17 21:03
在STM32提供的F4 CUBE库,stm32f4XX_hal_def.h中提供了如下代码:

#if (USE_RTOS == 1)

应该有相应的配置选择RTOS,如果直接改#define USE_RTOS 1,就出问题了。
modesty3jonah 发表于 2023-5-18 14:43 | 显示全部楼层
使用宏 __HAL_LOCK() 锁死
nomomy 发表于 2023-5-18 15:09 | 显示全部楼层
在禁止中断期间,其他任务无法访问共享资源,从而避免了竞态条件的发生。
fengm 发表于 2023-5-18 15:22 | 显示全部楼层
如果多个任务同时访问共享资源,就会出现数据不一致或数据损坏等问题。这时就需要采取某种方式来解决这个问题
wilhelmina2 发表于 2023-5-18 15:57 | 显示全部楼层
当任务结束访问共享资源后,可以调用__HAL_Unlock()函数,重新使能全局中断开关,从而允许其他任务访问共享资源。
sanfuzi 发表于 2023-5-21 10:07 | 显示全部楼层
当某个任务需要访问共享资源时,它可以调用__HAL_Lock()函数,禁用全局中断开关,并且保存当前中断状态。
albertaabbot 发表于 2023-5-21 11:42 | 显示全部楼层
该函数通过关闭全局中断开关(Interrupts)来禁止对共享资源的访问,从而实现对共享资源的互斥保护。
burgessmaggie 发表于 2023-5-21 11:52 | 显示全部楼层
__HAL_Lock()是一种用于多线程保护的函数,常用于STM32 HAL库中。
alvpeg 发表于 2023-5-21 14:20 | 显示全部楼层
当任务结束访问共享资源后,可以调用__HAL_Unlock()函数,重新使能全局中断开关,从而允许其他任务访问共享资源。
earlmax 发表于 2023-5-21 15:13 | 显示全部楼层
在禁止中断期间,其他任务无法访问共享资源,从而避免了竞态条件的发生。
wangdezhi 发表于 2023-5-21 16:09 | 显示全部楼层
如果多个任务同时访问共享资源,就会出现数据不一致或数据损坏等问题。这时就需要采取某种方式来解决这个问题
youtome 发表于 2023-5-21 16:36 | 显示全部楼层
__HAL_Lock()函数只能保护共享资源的访问,不能保护代码段的执行顺序。
burgessmaggie 发表于 2023-5-21 17:21 | 显示全部楼层
使用宏 __HAL_LOCK() 锁死
理想阳 发表于 2023-5-24 15:45 | 显示全部楼层
好的,我来日诰日去单元试一下,多谢列位大侠了哈
digit0 发表于 2023-5-25 16:06 | 显示全部楼层
然后,你怎么处理这个
AIsignel 发表于 2023-5-25 17:23 | 显示全部楼层
我该怎么在rtos中利用串口的dma传输,
Jacquetry 发表于 2023-5-25 22:31 | 显示全部楼层
应该是防止多个进程同时操作一个变量的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部