problem starting a rtems task

Martínez, Pablo pabloa.mar at gmail.com
Thu Jun 26 21:48:31 UTC 2014


On 26 June 2014 18:28, Chris Johns <chrisj at rtems.org> wrote:

> On 26/06/2014 11:54 pm, Martínez, Pablo wrote:
>
>>
>>
>>
>> On 26 June 2014 08:37, Chris Johns <chrisj at rtems.org
>> <mailto:chrisj at rtems.org>> wrote:
>>
>>
>>
>>     On 26/06/2014 12:56 am, Martínez, Pablo wrote:
>>
>>         Hi,
>>
>>         Im having troubles trying to use the class rtemsTask from the the
>>         librtems++.
>>
>>         (
>>         https://github.com/atgreen/__RTEMS/blob/master/c/src/__
>> librtems%2B%2B/include/rtems%__2B%2B/rtemsTask.h
>>
>>         <https://github.com/atgreen/RTEMS/blob/master/c/src/
>> librtems%2B%2B/include/rtems%2B%2B/rtemsTask.h>
>>         )
>>
>>         This class is basically a wrapper for the rtems task api.
>>
>>         I can create the task successfully (its returns 0), but when I
>> call
>>         start() the entry point origin doesnt start despite returning 0
>>         (this
>>         method just write a memory position to check if the task is
>>         working).
>>
>>
>>         const rtems_status_code rtemsTask::start(const
>>         rtems_task_argument arg)
>>
>>
>>         {
>>         if (owner)
>>
>>
>>         {
>>         argument = arg;
>>
>>
>>         // pass the this pointer as the argument
>>         set_status_code(rtems_task___start(id,
>>         origin,
>>         (rtems_task_argument) this));
>>
>>
>>         }
>>         else
>>         set_status_code(RTEMS_NOT___OWNER_OF_RESOURCE);
>>
>>         return last_status_code();
>>
>>
>>         }
>>
>>         Any help?
>>
>>
>>     Are the priorities ok ? If not it might not be able to run.
>>
>>
>> Im using this parameters to create the task:
>>
>> "SELF"
>> 1  (priority)
>> RTEMS_MINIMUM_STACK_SIZE
>> RTEMS_NO_PREEMPT
>> 0
>> RTEMS_NO_FLOATING_POINT
>> RTEMS_LOCAL
>>
>>
>> In C implementation is working fine, but the problem comes with C++.
>>
>>
> I would need a more complete example to know what is happening.
>
>
Chris,

Im trying to use the rtems++ library as follows:


//////////////Tempo.h

#ifndef TEMPO_H_
#define TEMPO_H_

#include <rtems++/rtemsTask.h>
#include <rtems++/rtemsTaskMode.h>

class Tempo: public rtemsTask
{
public:
    Tempo(const char* name,
            const rtems_task_priority initial_priority,
            const uint32_t stack_size,
            const rtems_mode preemption = RTEMS_NO_PREEMPT,
            const rtems_mode timeslice = RTEMS_NO_TIMESLICE,
            const rtems_mode asr = RTEMS_NO_ASR,
            const rtems_interrupt_level interrupt_level = 0,
            const FloatingPoint floating_point = fpoff,
            const Scope scope = local);

    virtual ~Tempo();
    //rtems_task origin(rtems_task_argument argument);

    const rtems_status_code start(const rtems_task_argument argument);
    static rtems_task origen(rtems_task_argument argument);
    void cuerpo(rtems_task_argument argument);

private:

      // task name
      rtems_name name;
      char name_str[5];

      // owner, true if this object owns the task
      // will delete the task when it destructs
      bool owner;

      // the rtems id, object handle
      rtems_id id;

      // the argument for the task, this class uses the actual argument
      // passed to RTEMS
      rtems_task_argument argument;

};

#endif /* TEMPO_H_ */


//////////////Tempo.cpp

#include "Tempo.h"

Tempo::Tempo(const char* tname,
                     const rtems_task_priority initial_priority,
                     const uint32_t stack_size,
                     const rtems_mode preemption,
                     const rtems_mode timeslice,
                     const rtems_mode asr,
                     const rtems_interrupt_level interrupt_level,
                     const FloatingPoint floating_point,
                     const Scope scope)
  : name(rtems_build_name('S', 'E', 'L', 'F')),
    owner(true),
    id(RTEMS_SELF),
    argument(0)
{
  strcpy(name_str, "SELF");
  create(tname,
         initial_priority,
         stack_size,
         preemption,
         timeslice,
         asr,
         interrupt_level,
         floating_point,
         scope);
}


Tempo::~Tempo()
{
}


const rtems_status_code Tempo::start(const rtems_task_argument arg)
{

    argument = arg;
    // pass the this pointer as the argument
    set_status_code(rtems_task_start(id,origen,(rtems_task_argument) this));

    printf ("   ---Tempo::start  --- \n\n");

  return last_status_code();
}


rtems_task Tempo::origen(rtems_task_argument argument)
{
    //just for debugging:
    unsigned *regout;
    regout= (unsigned*)0x80000d04;
    (*regout)=0x12345678;

    printf ("   --- Tempo::origen  --- \n\n");

  Tempo *task = (Tempo*) argument;
  task->cuerpo(task->argument);

}

void Tempo::cuerpo(rtems_task_argument )
{
    printf ("   --- Tempo::do sth  --- \n\n");
}


::::::::::

"  ---Tempo::start  --- \n\n" gets printed, but origen() is not triggered.


Trying to solve this out, Im trying with one solution I just found (from
you!)
You use a thread template. I just found it so I haven't tested it yet.

http://comments.gmane.org/gmane.os.rtems.user/20625


cheers,
Pablo



> Chris
>
>  thank u,
>> P
>>
>>
>>
>>     Chris
>>
>>         best regards,
>>
>>
>>
>>         --
>>         Martínez, Pablo Agustín
>>
>>
>>         _________________________________________________
>>         users mailing list
>>         users at rtems.org <mailto:users at rtems.org>
>>         http://lists.rtems.org/__mailman/listinfo/users
>>         <http://lists.rtems.org/mailman/listinfo/users>
>>
>>     _________________________________________________
>>     users mailing list
>>     users at rtems.org <mailto:users at rtems.org>
>>     http://lists.rtems.org/__mailman/listinfo/users
>>
>>     <http://lists.rtems.org/mailman/listinfo/users>
>>
>>
>>
>>
>> --
>> Martínez, Pablo Agustín
>>
>


-- 
Martínez, Pablo Agustín
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20140626/ad39a11e/attachment-0002.html>


More information about the users mailing list