gpt4 book ai didi

CMSIS-RTOS osThreadId 到整数类型

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:23 24 4
gpt4 key购买 nike

我正在将产品移植到基于 CMSIS 的 RTOS,该产品需要获取 32 位整数形式的线程 ID。然而,CMSIS 线程 id 类型 (osThreadId) 是完全不透明的,类型定义为 struct os_thread_cb * 并附有注释,可以安全地将其更改为其他类型。

那么是否有一种安全的设备无关方式来获取线程唯一的整数 ID?例如,我可以假设指针地址本身对于每个线程都是唯一且不变的吗?

最佳答案

osThreadId 是一个指针 - Cortex-M 上的指针是 32 位的,因此转换为 32 位整数类型是安全的。由于它是指向线程的控制 block 的指针,因此对于该线程来说它将是完全唯一的。

由于您使用的是 CMSIS,它更像是暗示了目标架构,但在一般情况下,为了确保对可能具有不同大小指针的系统的可移植性,您可以使用 stdint 中声明的 uintptr_t。嗯。 typedef 可能有用:

typedef uintptr_t tid_t

然后您可以安全地将 osThreadId 转换为 tid_t - 隐式或显式。

严格来说,uintptr_t 是一种能够容纳 void* 的整数类型,因此转换回 void* 时,它将比较为等于原始指针。由于任何指针类型都可以与 void* 相互转换,通常情况下 uintptr_t 可以容纳任何指针,但是如果您担心这些事情,您可以严格在分配给 uintptr_t 之前转换为 void* - 但实际上这可能是不必要的,在 Cortex-M 上当然也是如此。

关于CMSIS-RTOS osThreadId 到整数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34665071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com