硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2999|回复: 6
收起左侧

STM32F4的新版HAL库增加的几个原子操作API

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107778
QQ
发表于 2021-10-7 09:14:31 | 显示全部楼层 |阅读模式
代码:

  1. /* Use of CMSIS compiler intrinsics for register exclusive access */
  2. /* Atomic 32-bit register access macro to set one or several bits */
  3. #define ATOMIC_SET_BIT(REG, BIT)                             \
  4.   do {                                                       \
  5.     uint32_t val;                                            \
  6.     do {                                                     \
  7.       val = __LDREXW((__IO uint32_t *)&(REG)) | (BIT);       \
  8.     } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
  9.   } while(0)

  10. /* Atomic 32-bit register access macro to clear one or several bits */
  11. #define ATOMIC_CLEAR_BIT(REG, BIT)                           \
  12.   do {                                                       \
  13.     uint32_t val;                                            \
  14.     do {                                                     \
  15.       val = __LDREXW((__IO uint32_t *)&(REG)) & ~(BIT);      \
  16.     } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U); \
  17.   } while(0)

  18. /* Atomic 32-bit register access macro to clear and set one or several bits */
  19. #define ATOMIC_MODIFY_REG(REG, CLEARMSK, SETMASK)                          \
  20.   do {                                                                     \
  21.     uint32_t val;                                                          \
  22.     do {                                                                   \
  23.       val = (__LDREXW((__IO uint32_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
  24.     } while ((__STREXW(val,(__IO uint32_t *)&(REG))) != 0U);               \
  25.   } while(0)

  26. /* Atomic 16-bit register access macro to set one or several bits */
  27. #define ATOMIC_SETH_BIT(REG, BIT)                            \
  28.   do {                                                       \
  29.     uint16_t val;                                            \
  30.     do {                                                     \
  31.       val = __LDREXH((__IO uint16_t *)&(REG)) | (BIT);       \
  32.     } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
  33.   } while(0)

  34. /* Atomic 16-bit register access macro to clear one or several bits */
  35. #define ATOMIC_CLEARH_BIT(REG, BIT)                          \
  36.   do {                                                       \
  37.     uint16_t val;                                            \
  38.     do {                                                     \
  39.       val = __LDREXH((__IO uint16_t *)&(REG)) & ~(BIT);      \
  40.     } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U); \
  41.   } while(0)

  42. /* Atomic 16-bit register access macro to clear and set one or several bits */
  43. #define ATOMIC_MODIFYH_REG(REG, CLEARMSK, SETMASK)                         \
  44.   do {                                                                     \
  45.     uint16_t val;                                                          \
  46.     do {                                                                   \
  47.       val = (__LDREXH((__IO uint16_t *)&(REG)) & ~(CLEARMSK)) | (SETMASK); \
  48.     } while ((__STREXH(val,(__IO uint16_t *)&(REG))) != 0U);               \
  49.   } while(0)
复制代码


评分

参与人数 1金币 +10 收起 理由
WZH + 10 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107778
QQ
 楼主| 发表于 2021-10-7 09:18:37 | 显示全部楼层
RTX5里面也有一大批原子操作函数。
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2021-11-12 14:47:58 | 显示全部楼层
请教硬汉哥为何直接调用会有个黄色警告? QQ截图20211112144542.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107778
QQ
 楼主| 发表于 2021-11-13 08:53:48 | 显示全部楼层
云琴箫龙 发表于 2021-11-12 14:47
请教硬汉哥为何直接调用会有个黄色警告?

回头我试试,ST的这个还没有测试过。
回复

使用道具 举报

6

主题

21

回帖

39

积分

新手上路

积分
39
发表于 2022-5-11 09:48:20 | 显示全部楼层
请问在哪里可以查询到这种原子操作呢,在F4的HAL库的哪个文件里?
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2023-6-20 10:16:52 | 显示全部楼层
云琴箫龙 发表于 2021-11-12 14:47
请教硬汉哥为何直接调用会有个黄色警告?

请问您这个问题解决了没,加了头文件也还有警告,但编译不报错。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107778
QQ
 楼主| 发表于 2023-6-20 11:08:22 | 显示全部楼层
skylar 发表于 2023-6-20 10:16
请问您这个问题解决了没,加了头文件也还有警告,但编译不报错。

编译不报错没关系
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-14 04:04 , Processed in 0.277152 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表