RES: passing parameters to task

Luca Cinquepalmi cinquepalmi at planetek.it
Mon Sep 17 13:18:26 UTC 2012


Thank you Wendell, that's exactly what I mean. I have two question for you.
*
1)* In

*rtems_task mytask(rtems_task_argument arg)*

*{*

*   struct complex_task_parameters* p;*

**

*   p = (complex_task_parameters *)arg;*

**

*   while(true)*

*   {*

*      //use parameters in p*

*      //....*

*   }*

*}*

I have a type error in *p = (complex_task_parameters *)arg;
*Is complex_task_parameters type correct?

*2)* How can I use parameters in while cycle? How can I refer to "foo" 
for example?

      Thanks a lot again!

     Luca


Il 17/09/2012 14.35, Wendell Pereira da Silva ha scritto:
>
> Hi Luca,
>
> Mathew, please, may I post an example?
>
> :-)
>
> rtems_task mytask(rtems_task_argument arg);
>
> (…)
>
> struct complex_task_parameters
>
> {
>
>    uint32_t ui;  // first parameter...
>
>    uint16_t usi; // second parameter...
>
>    const char* foo; // another parameter...
>
> }
>
> rtems_task Init(rtems_task_argument arg)
>
> {
>
>    rtems_id tid;
>
>    struct complex_task_parameters* p_task_param;
>
>    // allocate and initialize parameters
>
>    p_task_param = calloc(1, sizeof(*p_task_param));
>
>    p_task_param->ui = 1;
>
> p_task_param->usi = 0x1000;
>
> p_task_param->foo = "test...";
>
>    // create the task as usual
>
> rtems_task_create(..., &tid);
>
>    // now pass the parameter to the task;
>
>    // use typecast to make the compiler happy.
>
> rtems_task_start(tid, mytask, (rtems_task_argument)p_task_param);
>
> }
>
> rtems_task mytask(rtems_task_argument arg)
>
> {
>
>    struct complex_task_parameters* p;
>
>    p = (complex_task_parameters *)arg;
>
>    while(true)
>
>    {
>
>       //use parameters in p
>
>       //....
>
>    }
>
> }
>
> Hope it helps.
>
> --Wendell.
>
> *De:*rtems-users-bounces at rtems.org 
> [mailto:rtems-users-bounces at rtems.org] *Em nome de *Luca Cinquepalmi
> *Enviada em:* segunda-feira, 17 de setembro de 2012 07:20
> *Para:* Mathew Benson
> *Cc:* rtems-users at rtems.org
> *Assunto:* Re: passing parameters to task
>
> I understand your suggestion... is there any example I could view?
>
>     Luca
>
> Il 17/09/2012 12.18, Mathew Benson ha scritto:
>
>     The same way you would with a POSIX pthread create call.  Just
>     malloc a struct with your multiple parameters, set your
>     parameters, and pass the reference of your struct to the function.
>      In your task entry point, cast the argument to a pointer to your
>     struct and pull your parameters out.
>
>     Sent from my Amiga 1000
>
>
>     On Sep 17, 2012, at 4:35 AM, Luca Cinquepalmi
>     <cinquepalmi at planetek.it <mailto:cinquepalmi at planetek.it>> wrote:
>
>         Hi all,
>         I would like to know if is it possible to pass more than one
>         argument to a single task...
>         At the moment I only use this syntax when I define a task
>
>         *rtems_task Test_task(rtems_task_argument unused)*
>
>         How can I declare and define a more parameters dependent task?
>         Thanks a lot.
>
>             Luca
>
>
>         _______________________________________________
>         rtems-users mailing list
>         rtems-users at rtems.org <mailto:rtems-users at rtems.org>
>         http://www.rtems.org/mailman/listinfo/rtems-users
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20120917/7bad0b4e/attachment-0001.html>


More information about the users mailing list