<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On 26 June 2014 18:28, Chris Johns <span dir="ltr"><<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="">On 26/06/2014 11:54 pm, Martínez, Pablo wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="">
<br>
<br>
<br>
On 26 June 2014 08:37, Chris Johns <<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a><br></div><div class="">
<mailto:<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>>> wrote:<br>
<br>
<br>
<br>
    On 26/06/2014 12:56 am, Martínez, Pablo wrote:<br>
<br>
        Hi,<br>
<br>
        Im having troubles trying to use the class rtemsTask from the the<br>
        librtems++.<br>
<br>
        (<br></div>
        <a href="https://github.com/atgreen/__RTEMS/blob/master/c/src/__librtems%2B%2B/include/rtems%__2B%2B/rtemsTask.h" target="_blank">https://github.com/atgreen/__<u></u>RTEMS/blob/master/c/src/__<u></u>librtems%2B%2B/include/rtems%_<u></u>_2B%2B/rtemsTask.h</a><div class="">

<br>
        <<a href="https://github.com/atgreen/RTEMS/blob/master/c/src/librtems%2B%2B/include/rtems%2B%2B/rtemsTask.h" target="_blank">https://github.com/atgreen/<u></u>RTEMS/blob/master/c/src/<u></u>librtems%2B%2B/include/rtems%<u></u>2B%2B/rtemsTask.h</a>><br>


        )<br>
<br>
        This class is basically a wrapper for the rtems task api.<br>
<br>
        I can create the task successfully (its returns 0), but when I call<br>
        start() the entry point origin doesnt start despite returning 0<br>
        (this<br>
        method just write a memory position to check if the task is<br>
        working).<br>
<br>
<br>
        const rtems_status_code rtemsTask::start(const<br>
        rtems_task_argument arg)<br>
<br>
<br>
        {<br>
        if (owner)<br>
<br>
<br>
        {<br>
        argument = arg;<br>
<br>
<br>
        // pass the this pointer as the argument<br></div>
        set_status_code(rtems_task___<u></u>start(id,<br>
        origin,<br>
        (rtems_task_argument) this));<br>
<br>
<br>
        }<br>
        else<br>
        set_status_code(RTEMS_NOT___<u></u>OWNER_OF_RESOURCE);<div class=""><br>
        return last_status_code();<br>
<br>
<br>
        }<br>
<br>
        Any help?<br>
<br>
<br>
    Are the priorities ok ? If not it might not be able to run.<br>
<br>
<br>
Im using this parameters to create the task:<br>
<br>
"SELF"<br>
1  (priority)<br>
RTEMS_MINIMUM_STACK_SIZE<br>
RTEMS_NO_PREEMPT<br>
0<br>
RTEMS_NO_FLOATING_POINT<br>
RTEMS_LOCAL<br>
<br>
<br>
In C implementation is working fine, but the problem comes with C++.<br>
<br>
</div></blockquote>
<br>
I would need a more complete example to know what is happening.<br>
<br></blockquote><div><br></div><div>Chris,<br><br></div><div>Im trying to use the rtems++ library as follows:<br></div><div><br><br>//////////////Tempo.h<br><br>#ifndef TEMPO_H_<br>#define TEMPO_H_<br><br>#include <rtems++/rtemsTask.h><br>

#include <rtems++/rtemsTaskMode.h><br><br>class Tempo: public rtemsTask<br>{<br>public:<br>    Tempo(const char* name,<br>            const rtems_task_priority initial_priority,<br>            const uint32_t stack_size,<br>

            const rtems_mode preemption = RTEMS_NO_PREEMPT,<br>            const rtems_mode timeslice = RTEMS_NO_TIMESLICE,<br>            const rtems_mode asr = RTEMS_NO_ASR,<br>            const rtems_interrupt_level interrupt_level = 0,<br>

            const FloatingPoint floating_point = fpoff,<br>            const Scope scope = local);<br><br>    virtual ~Tempo();<br>    //rtems_task origin(rtems_task_argument argument);<br><br>    const rtems_status_code start(const rtems_task_argument argument);<br>

    static rtems_task origen(rtems_task_argument argument);<br>    void cuerpo(rtems_task_argument argument);<br><br>private:<br><br>      // task name<br>      rtems_name name;<br>      char name_str[5];<br><br>      // owner, true if this object owns the task<br>

      // will delete the task when it destructs<br>      bool owner;<br><br>      // the rtems id, object handle<br>      rtems_id id;<br><br>      // the argument for the task, this class uses the actual argument<br>      // passed to RTEMS<br>

      rtems_task_argument argument;<br><br>};<br><br>#endif /* TEMPO_H_ */<br><br><br></div><div>//////////////Tempo.cpp<br></div><div><br>#include "Tempo.h"<br><br>Tempo::Tempo(const char* tname,<br>                     const rtems_task_priority initial_priority,<br>

                     const uint32_t stack_size,<br>                     const rtems_mode preemption,<br>                     const rtems_mode timeslice,<br>                     const rtems_mode asr,<br>                     const rtems_interrupt_level interrupt_level,<br>

                     const FloatingPoint floating_point,<br>                     const Scope scope)<br>  : name(rtems_build_name('S', 'E', 'L', 'F')),<br>    owner(true),<br>    id(RTEMS_SELF),<br>

    argument(0)<br>{<br>  strcpy(name_str, "SELF");<br>  create(tname,<br>         initial_priority,<br>         stack_size,<br>         preemption,<br>         timeslice,<br>         asr,<br>         interrupt_level,<br>

         floating_point,<br>         scope);<br>}<br><br><br>Tempo::~Tempo()<br>{<br>}<br><br><br>const rtems_status_code Tempo::start(const rtems_task_argument arg)<br>{<br><br>    argument = arg;<br>    // pass the this pointer as the argument<br>

    set_status_code(rtems_task_start(id,origen,(rtems_task_argument) this));<br><br>    printf ("   ---Tempo::start  --- \n\n");<br><br>  return last_status_code();<br>}<br><br><br>rtems_task Tempo::origen(rtems_task_argument argument)<br>

{<br></div><div>    //just for debugging:<br></div><div>    unsigned *regout;<br>    regout= (unsigned*)0x80000d04;<br>    (*regout)=0x12345678;<br><br>    printf ("   --- Tempo::origen  --- \n\n");<br><br>  Tempo *task = (Tempo*) argument;<br>

  task->cuerpo(task->argument);<br><br>}<br><br>void Tempo::cuerpo(rtems_task_argument )<br>{<br>    printf ("   --- Tempo::do sth  --- \n\n");<br>}<br><br><br>::::::::::<br><br>"  ---Tempo::start  --- \n\n" gets printed, but origen() is not triggered.<br>

<br><br></div><div>Trying to solve this out, Im trying with one solution I just found (from you!) <br></div><div>You use a thread template. I just found it so I haven't tested it yet.<br></div><div><br><a href="http://comments.gmane.org/gmane.os.rtems.user/20625">http://comments.gmane.org/gmane.os.rtems.user/20625</a><br>

<br><br></div><div>cheers,<br>Pablo<br></div><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Chris<br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="">
thank u,<br>
P<br>
<br>
<br>
<br>
    Chris<br>
<br>
        best regards,<br>
<br>
<br>
<br>
        --<br>
        Martínez, Pablo Agustín<br>
<br>
<br></div>
        ______________________________<u></u>___________________<br>
        users mailing list<br>
        <a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a> <mailto:<a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a>><br>
        <a href="http://lists.rtems.org/__mailman/listinfo/users" target="_blank">http://lists.rtems.org/__<u></u>mailman/listinfo/users</a><br>
        <<a href="http://lists.rtems.org/mailman/listinfo/users" target="_blank">http://lists.rtems.org/<u></u>mailman/listinfo/users</a>><br>
<br>
    ______________________________<u></u>___________________<br>
    users mailing list<br>
    <a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a> <mailto:<a href="mailto:users@rtems.org" target="_blank">users@rtems.org</a>><br>
    <a href="http://lists.rtems.org/__mailman/listinfo/users" target="_blank">http://lists.rtems.org/__<u></u>mailman/listinfo/users</a><div class=""><br>
    <<a href="http://lists.rtems.org/mailman/listinfo/users" target="_blank">http://lists.rtems.org/<u></u>mailman/listinfo/users</a>><br>
<br>
<br>
<br>
<br>
--<br>
Martínez, Pablo Agustín<br>
</div></blockquote>
</blockquote></div><br><br clear="all"><br>-- <br>Martínez, Pablo Agustín
</div></div>