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