<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>