Hi !
In Keil os_tsk_create_user() doc it passes a void* for the stack parameter, but in the example (and example code in uVision) we do the following :
static U64 stk2[400/8]; ... os_tsk_create_user (task2, 1, &stk2, sizeof(stk2)); ...
If I am right typeof &stk2 is U64 **. As the test work I think the definition is wrong.
www.keil.com/.../rlarm_os_tsk_create_user.htm
The code works with or without the & in the call. Taking the address of the array will point to the start of the array, just as the array name will also point to the start of the array. It's just a question of the type the pointer points to.
The function takes a void pointer, so it doesn't care if it gets a pointer to a char, a pinter to an int, a pointer to an array or a pointer to a struct. The only important thing is that the pointer points to a memory region large enough and that you have correct alignment.
If I am right typeof &stk2 is U64 **.
You're not right. The type of &stk2 is pointer to array of 50 U64, or in code: U64(*)[50].
You seem to have fallen prey to the misconception (taught by unbelievably many, unbelievably bad C textbooks) that arrays and pointers were the same thing. They're not.
OK thanks for answer.