<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On 26 June 2014 18:54, Joel Sherrill <span dir="ltr"><<a href="mailto:joel.sherrill@oarcorp.com" target="_blank">joel.sherrill@oarcorp.com</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 text="#000000" bgcolor="#FFFFFF"><div><div>
<br>
<div>On 6/26/2014 4:48 PM, Martínez, Pablo
wrote:<br>
</div>
<blockquote type="cite">
<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>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>
<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>
<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/__RTEMS/blob/master/c/src/__librtems%2B%2B/include/rtems%__2B%2B/rtemsTask.h</a>
<div>
<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/RTEMS/blob/master/c/src/librtems%2B%2B/include/rtems%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___start(id,<br>
origin,<br>
(rtems_task_argument) this));<br>
<br>
<br>
}<br>
else<br>
set_status_code(RTEMS_NOT___OWNER_OF_RESOURCE);
<div><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" target="_blank">http://comments.gmane.org/gmane.os.rtems.user/20625</a><br>
<br>
</div>
</div>
</div>
</div>
</blockquote>
<br></div></div>
This is still not complete. There has to be an initialization task
and<br>
some RTEMS configuration (e.g. CONFIGURE_xxx followed by<br>
an include of <rtems/confdefs.h>).<br>
<br>
My first guess is that you have an Init task at priority 1 sitting<br>
in a loop watching for something to happen. It won't happen<br>
because it never yields the processor. <br>
<br>
An alternative is that the Init() task falls off the bottom of its<br>
body and this is a fatal error halting the system. <br>
<br>
If we saw the Init() and configuration that goes with this<br>
it would really help. Something invokes your Tempo<br>
constructor.<br>
<br>
--joel<div><br></div></div></blockquote><div><br>#define CONFIGURE_INIT<br><br>#include <rtems.h><br>#include <rtems++/rtemsTask.h><br>#include <rtems++/rtemsTaskMode.h><br>#include </opt/rtems-4.10/sparc-rtems4.10/leon3/lib/include/bsp.h> /* for device driver prototypes */<br>
#include <tmacros.h><br><br>extern "C"<br>{<br> rtems_task Init(<br> rtems_task_argument argument<br> );<br>}<br><br><br>#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER<br>#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER<br>
#define CONFIGURE_MAXIMUM_TASKS 10<br><br>#define CONFIGURE_MAXIMUM_TIMERS 5<br>#define CONFIGURE_MAXIMUM_SEMAPHORES 5<br><br>#define CONFIGURE_RTEMS_INIT_TASKS_TABLE<br>#define CONFIGURE_INIT_TASK_STACK_SIZE (6 * RTEMS_MINIMUM_STACK_SIZE)<br>
#define CONFIGURE_EXTRA_TASK_STACKS (13 * RTEMS_MINIMUM_STACK_SIZE)<br>//#include </opt/rtems-4.10/sparc-rtems4.10/leon3/lib/include/rtems/confdefs.h><br>#include <rtems/confdefs.h><br><br>#include "Tempo.h"<br>
<br>rtems_task Init(rtems_task_argument )<br>{<br> printf (" --- Rtems++ V 1.1 --- \n\n");<br><br> Tempo t1("SELF",1,RTEMS_MINIMUM_STACK_SIZE,RTEMS_NO_PREEMPT,0,RTEMS_NO_FLOATING_POINT,RTEMS_LOCAL);<br>
<br> printf("Tempo::initial status: %d \n",t1.last_status_code());<br> printf("Tempo::started: %d \n",t1.start(1));<br> printf (" --- FIN --- \n\n");<br> exit(0);<br>}<br><br>
<br>
</div><div>Using grmon I can see the program exits normally.<br></div><div><br></div><div>Pablo<br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div>
<br>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">
<div><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>
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>
_________________________________________________<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/__mailman/listinfo/users</a><br>
<<a href="http://lists.rtems.org/mailman/listinfo/users" target="_blank">http://lists.rtems.org/mailman/listinfo/users</a>><br>
<br>
_________________________________________________<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/__mailman/listinfo/users</a>
<div><br>
<<a href="http://lists.rtems.org/mailman/listinfo/users" target="_blank">http://lists.rtems.org/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>
</blockquote>
<br>
</div><span><font color="#888888"><pre cols="72">--
Joel Sherrill, Ph.D. Director of Research & Development
<a href="mailto:joel.sherrill@OARcorp.com" target="_blank">joel.sherrill@OARcorp.com</a> On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985</pre>
</font></span></div>
</blockquote></div><br><br clear="all"><br>-- <br>Martínez, Pablo Agustín
</div></div>