Почему TaskSpawn принимает ints вместо void*?



Для операционной системы 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.

Обычно я мог бы передать соответствующие аргументы, основанные на функции ввода.





Учитывая, что это функция C, мне было любопытно, есть ли причина, по которой vxWorks выбирает аргументы 1-10 вместо указателей void.



Если бы они были пустыми указателями, я бы смог пройти в любом типе,а затем привести его обратно в функцию ввода.



Если я хочу передать указатель struct foo в функцию ввода, заданную taskSpawn, можно ли преобразовать его в целое число, а затем обратно в соответствующий указатель?
основываясь на дизайне этой функции, я вынужден использовать глобалы?

720   1  

1 ответ:

Я думаю, вы обнаружите, что на VxWorks целое число имеет тот же размер, что и указатель, и обычная практика заключается в приведении между ними. Поэтому, если вы хотите передать указатель через TaskSpawn, вы можете передать его как (int)ptr.

Нет, это не портативный C, но это, по-видимому, нормальная практика на этой платформе с этой функцией.

Comments

    Ничего не найдено.