为什么TaskSpawn采用int而不是void *?

时间:2016-05-01 04:00:00

标签: c pointers casting void-pointers vxworks

对于vxWorks操作系统,它们提供了一个用于生成任务的系统库:

int taskSpawn
    (
    char *  name,             /* name of new task (stored at pStackBase) */
    int     priority,         /* priority of new task */
    int     options,          /* task option word */
    int     stackSize,        /* size (bytes) of stack needed plus name */
    FUNCPTR entryPt,          /* entry point of new task */
    int     arg1,             /* 1st of 10 req'd task args to pass to func */
    int     arg2,
    int     arg3,
    int     arg4,
    int     arg5,
    int     arg6,
    int     arg7,
    int     arg8,
    int     arg9,
    int     arg10
    )

你可以看到这与std :: thread相比有多么有限 通常,我可以根据entry函数传入适当的参数。

鉴于这是一个C函数,我很好奇是否有一个原因是vxWorks选择让参数1-10为int而不是void指针。

如果它们是void指针,我将能够传入任何类型,然后将其转换回入口函数。

如果我想将struct foo的指针传递给taskSpawn的入口函数,是否可以将其转换为整数,然后返回相应的指针?
基于此函数的设计,我是否被迫使用全局变量?

1 个答案:

答案 0 :(得分:2)

我想你会发现在VxWorks上,一个整数与指针的大小相同,通常的做法是在它们之间进行转换。因此,如果您想通过TaskSpawn传递指针,则可以将其作为(int)ptr传递。

不,这不是便携式C,但在这个平台上使用此功能显然是正常做法。