UINT tx_thread_create(TX_THREAD *thread_ptr, CHAR *name_ptr,
VOID (*entry_function)(ULONG), ULONG entry_input,
VOID *stack_start, ULONG stack_size, UINT priority,
UINT preempt_threshold, ULONG time_slice,
UINT auto_start)
如果我需要向
entry_function
传递多个参数,我必须使用 void *
,因此我的问题是,为什么 ThreadX 使用 ULONG
而不是像 FreeRTOS 那样使用 void *
?
可以根据需要重新解释该论证。 严格来说,参数类型最好是
uintptr_t
,即能够保存指针类型的无符号整数类型,但这也可能是 unsigned long
的类型别名,所以实际上它没有区别。
如果它被设为
void*
但您想传递一个整数值,则在许多情况下它会包含一个不是有效指针的值,而任何 ULONG
值都是有效的。
为了实现您的目标,考虑到:
typedef struct
{
...
} tThreadInfo ;
void threadMainXxxx( tThreadInfo* arg )
{
for{;;}
{
...
}
}
VOID threadEntryXxxx( ULONG arg )
{
threadMainXxxx( (tThreadInfo)arg ) ;
}
然后您可以开始您的线程(省略细节
...
):
static tThreadInfo thread_arg = {...} ;
UINT status = tx_thread_create( &xxxx_tcb, "XXXX",
threadEntryXxxx, (ULONG)&thread_arg,
...) ;