2

我正在将产品移植到基于 CMSIS 的 RTOS,并且产品需要获取线程 ID 作为 32 位整数。但是,CMSIS 线程 id 类型 ( osThreadId) 是完全不透明的,typedefstruct os_thread_cb *带有注释,它可以安全地更改为其他内容。

那么是否有一种安全的独立于设备的方法来获取线程唯一的整数 id?例如,我可以假设指针地址本身对于每个线程都是唯一且恒定的吗?

4

1 回答 1

1

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

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

typedef uintptr_t tid_t

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

Strictlyuintptr_t是一个整数类型,能够保存 a void*,这样转换回 avoid*将与原始指针进行比较。由于任何指针类型都可以转换为和从void*,通常情况下 auintptr_t可以保存任何指针,但是如果这些事情让您担心,您可以void*在分配给 a 之前严格转换为 a uintptr_t- 但实际上这可能是不必要的,当然等等 Cortex-M。

于 2016-01-09T17:53:33.923 回答