跳到主要内容

hardware-claim

轻量级硬件资源管理 API。

详细描述

hardware_claim 提供了一个简单的 API,用于在运行时管理硬件资源。

此 API 通常由其他特定硬件的申请 API 调用,并提供简单的多核安全方法,用于操作表示硬件资源的紧凑位集。

此 API 允许任何其他库通过协作方式参与一套方案,使得编译期和运行期的资源分配可以共存,并能在不同库之间不了解彼此的情况下避免或检测到冲突(具体取决于使用场景)。

提供的功能包括:

. 申请资源(若资源已被申请则断言失败)

. 释放(取消申请)资源

. 查找未使用的资源

函数

void hw_claim_or_assert (uint8_t **bits, uint bit_index, const char **message)
 原子地申请资源,若已被使用则触发 panic。

int hw_claim_unused_from_range (uint8_t **bits, bool required, uint bit_lsb, uint bit_msb, const char **message)
 从一组资源范围中原子地申请一个未使用的资源,可选择在无空闲时断言失败。

bool hw_is_claimed (const uint8_t *bits, uint bit_index)
 确定调用时资源是否已被申请。

void hw_claim_clear (uint8_t *bits, uint bit_index)
 原子地取消申请资源。

  • uint32_t hw_claim_lock (void): 获取 hardware_claim` 库提供的运行时互斥锁。
  • void hw_claim_unlock (uint32_t token): 释放 hardware_claim` 库提供的运行时互斥锁。

函数文档

hw_claim_clear

void hw_claim_clear (uint8_t * bits, uint bit_index)

原子地取消申请资源。

资源的所有权由位数组中 bit_index 对应的位表示。

参数

  • bits: 指向位数组的指针(每字节 8 位)
  • bit_index: 要取消申请的资源(位数组中的位索引)

hw_claim_lock

uint32_t hw_claim_lock (void)

获取 hardware_claim 库提供的运行时互斥锁。

此方法会被其他 hw_claim_ 方法自动调用,但也作为便利方法提供,供需要保护其他硬件初始化代码免受并发使用的代码调用。

hw_claim_lock() 内部使用自旋锁,因此会禁用调用核心的中断,并在调用核心已持有锁时产生死锁。

返回

一个传递给 hw_claim_unlock() 的令牌。

hw_claim_or_assert

void hw_claim_or_assert (uint8_t ** bits, uint bit_index, const char ** message)

原子地申请资源,若已被使用则触发 panic。

资源的所有权由位数组中 bit_index 对应的位表示。

参数

  • bits: 指向位数组的指针(每字节 8 位)
  • bit_index: 要申请的资源(位数组中的位索引)
  • message: 若无法申请该位时显示的字符串;注意此字符串可以包含一个 printf 格式说明符 "%d" 用于表示位序号

hw_claim_unlock

void hw_claim_unlock (uint32_t token)

释放 hardware_claim 库提供的运行时互斥锁。

此方法必须从调用 hw_claim_lock() 的同一核心调用。

参数

  • token: 对应 hw_claim_lock() 调用返回的令牌

hw_claim_unused_from_range

int hw_claim_unused_from_range (uint8_t ** bits, bool required, uint bit_lsb, uint bit_msb, const char ** message)

从一组资源范围中原子地申请一个未使用的资源,可选择在无空闲时断言失败。

参数

  • bits: 指向位数组的指针(每字节 8 位)
  • required: 若为 true,当资源不空闲时此方法将触发 panic
  • bit_lsb: 要申请的资源范围的下界(含)
  • bit_msb: 要申请的资源范围的上界(含)
  • message: 若无法申请该位时显示的字符串

返回

表示已申请资源的位索引,若范围内无可用资源且 required = false 则返回 -1。

hw_is_claimed

bool hw_is_claimed (const uint8_t * bits, uint bit_index) [inline]

确定调用时资源是否已被申请。

资源的所有权由位数组中 bit_index 对应的位表示。

参数

  • bits: 指向位数组的指针(每字节 8 位)
  • bit_index: 要检查的资源(位数组中的位索引)

返回

若资源已被申请则返回 true。


中文翻译版以英文版相同知识授权方式共享:CC-BY-SA 4.0。交流 Q群:498908352