Почему 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, можно ли преобразовать его в целое число, а затем обратно в соответствующий указатель?
основываясь на дизайне этой функции, я вынужден использовать глобалы?
1 ответ:
Я думаю, вы обнаружите, что на VxWorks целое число имеет тот же размер, что и указатель, и обычная практика заключается в приведении между ними. Поэтому, если вы хотите передать указатель через
TaskSpawn, вы можете передать его как(int)ptr.Нет, это не портативный C, но это, по-видимому, нормальная практика на этой платформе с этой функцией.
Comments