Forums

Passing arguments to an entry point function of the CreateTask() task kernel call

Started by Alex Vinokur February 26, 2006
=============
INTEGRITY RTOS
=============
Task kernel calls CreateTask(), CommonCreateTask(),  CreateANSICTask(),
CreateProtectedTask() contain several arguments. One of them is the
entry point function.

Can that (entry point) function have arguments? How to pass these
arguments to the entry point function while calling  CreateTask() and
similar task kernel calls.

---
 Alex Vinokur
     email: alex DOT vinokur AT gmail DOT com
     http://mathforum.org/library/view/10978.html
     http://sourceforge.net/users/alexvn

"Alex Vinokur" <alexvn@users.sourceforge.net> wrote in message 
news:1140937053.525987.237100@v46g2000cwv.googlegroups.com...
> ============= > INTEGRITY RTOS > ============= > Task kernel calls CreateTask(), CommonCreateTask(), CreateANSICTask(), > CreateProtectedTask() contain several arguments. One of them is the > entry point function. > > Can that (entry point) function have arguments? How to pass these > arguments to the entry point function while calling CreateTask() and > similar task kernel calls. > > --- > Alex Vinokur > email: alex DOT vinokur AT gmail DOT com > http://mathforum.org/library/view/10978.html > http://sourceforge.net/users/alexvn >
I have never used Integrity RTOS but I'm sure the answers to your questions are very easy to find in the manuals and examples that surely come with your purchase. You do have the manuals? I would be very surprised if the answer to your question "Can that function have arguments" was "no". Regards, Richard. http://www.FreeRTOS.org
Alex Vinokur wrote:
> Can that (entry point) function have arguments? How to pass these > arguments to the entry point function while calling CreateTask() and > similar task kernel calls.
No, it can't have arguments. But you can associate an address with the task using Get/SetTaskIdentification; that address can point to a structure containing the arguments (like in Win32 or pthreads, where you also can pass a single pointer only, not arbitrary arguments). Stefan
Stefan Reuther wrote:
> Alex Vinokur wrote: > > Can that (entry point) function have arguments? How to pass these > > arguments to the entry point function while calling CreateTask() and > > similar task kernel calls. > > No, it can't have arguments. But you can associate an address with the > task using Get/SetTaskIdentification; that address can point to a > structure containing the arguments (like in Win32 or pthreads, where you > also can pass a single pointer only, not arbitrary arguments). > > > Stefan
Thank you. It works quite fine. Here is an example: ====== foo.c ====== /* INTEGRITY RTOS */ #include "INTEGRITY.h" #include <stdio.h> void CHECK(Error TheError) { if (TheError) HaltTask(CurrentTask()); } void entry_point() { Address TheAddress; Error TheError = GetTaskIdentification(CurrentTask(),&TheAddress); if (TheError == Success) { printf("Success -> GetTaskIdentification returned %s\n", TheAddress); } else { printf("Failure -> GetTaskIdentification returned Error=%d\n", TheError); } Exit(0); } int main() { Task task; char* ptr = "ABCDXYZ"; CHECK (CreateProtectedTask(1, (Address)entry_point, 0x1000, "the-task", &task)); CHECK (SetTaskIdentification(task, (Address)ptr)); CHECK (RunTask(task)); exit(0); } =================== ===== Output ====== Success -> GetTaskIdentification returned ABCDXYZ =================== Alex Vinokur email: alex DOT vinokur AT gmail DOT com http://mathforum.org/library/view/10978.html http://sourceforge.net/users/alexvn
Alex Vinokur wrote:
[snip]
> int main() > { > Task task; > char* ptr = "ABCDXYZ"; > > CHECK (CreateProtectedTask(1, (Address)entry_point, 0x1000, > "the-task", &task)); > CHECK (SetTaskIdentification(task, (Address)ptr)); > > CHECK (RunTask(task));
CHECK (CloseProtectedTask(task));
> > exit(0); > }
--- Alex Vinokur email: alex DOT vinokur AT gmail DOT com http://mathforum.org/library/view/10978.html http://sourceforge.net/users/alexvn