引用: yijun362 发表于 2019-1-18 06:55
这设计到多任务中函数重入和资源争夺的问题
__HAL_LOCK();其实就是OS中的互斥变量mutex,用来保证资源的使用唯一性
引用: yijun362 发表于 2019-1-18 06:55
这设计到多任务中函数重入和资源争夺的问题
__HAL_LOCK();其实就是OS中的互斥变量mutex,用来保证资源的使用唯一性
引用: 7762642422d 发表于 2019-1-18 06:48
看到有些貌似“正确”的回复(还有附和声)我不免想纠正下!请下结论前一定要看足够的资料来支撑自己的结论。
__HAL_LOCK()以及__HAL_UNLOCK()是用于非操作系统(或可以理解为单线程内)的对公共资源访问的一种保护。
多线程中上述LOCK函数没作用(用了也会有潜在风险),需要使用RTOS的比如:事件、信号量、临界区、互斥量 ...
引用: 60user16 发表于 2019-1-18 07:56
非常感谢你的回答,目前我是加了μC/OS的,所以采用了将USE_RTOS=1,然后将__HAL_CLOK和__HAL_UNCLOCK宏定义为空了。
引用: 60user16 发表于 2019-1-18 07:56
非常感谢你的回答,目前我是加了μC/OS的,所以采用了将USE_RTOS=1,然后将__HAL_CLOK和__HAL_UNCLOCK宏定义为空了。
引用: hu_wfllllllllfl 发表于 2019-1-18 08:15
为什么我按照你的方法改过之后编译提示出错,错误为error directive :"USE_RTOS should be 0 in the current HAL release",我用的是FREERTOS
引用: 60user16 发表于 2019-1-18 08:23
因为这个宏USE_RTOS控制这执行打印这句错误提示。
引用: hu_wfllllllllfl 发表于 2019-1-18 08:31
楼主你说你是加了μC/OS,然后将USE_RTOS=1,然后将__HAL_CLOK和__HAL_UNCLOCK宏定义为空了。我用的是freertos,然后我也将USE_RTOS=1了,也屏蔽掉了_HAL_LOCKh和_HAL_UNLOCK,为啥编译不通过
更多回帖