首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMSIS-RTOS osThreadId到整型

CMSIS-RTOS osThreadId到整型
EN

Stack Overflow用户
提问于 2016-01-07 21:00:46
回答 1查看 532关注 0票数 2

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-09 17:53:33

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

由于您使用的是CMSIS,所以它实际上意味着目标体系结构,但是在一般情况下,为了确保可移植到具有不同大小指针的系统,您可以使用stdint.h中声明的uintptr_t。一种类型的胡枝子可能有用:

代码语言:javascript
复制
typedef uintptr_t tid_t

然后,您可以安全地将osThreadId转换为tid_t --无论是隐式的还是显式的。

严格地说,uintptr_t是一个整数类型,能够保存一个void*,以便将其转换回一个void*,它将与原始指针相比较。由于任何指针类型都可以转换为void*,通常情况下,uintptr_t可以保存任何指针,但是如果这类事情让您感到担忧,您可以在分配给uintptr_t之前严格地将指针转换到void*,但在实践中,这可能是不必要的,当然也可能是Cortex-M。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34665071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档