<div dir="ltr"><div><div>Hi guys,<br><br></div>Im trying to implement a single shot timer.<br><br></div>I derive from rtemsTimer class and replace virtual void triggered()=0<br><br><div>#include <rtems++/rtemsTimer.h><br>...<br><br>class Timer : public rtemsTimer {<br>public:<br>    Timer(const char* tname);<br>    virtual ~Timer();<br>private:<br>    void triggered();<br>};<br><br></div><div>in timer.cpp<br></div><div><br>void SynchTimer::triggered(){<br><br>    printf("hello Timer! \n");<br><br>}<br><br><br></div><div>Then I have the following task class who creates and fires a Timer object:<br><br>class TimerMngr : public rtemsTask{<br><br>public:<br>    TimerMngr(const char* tname);<br>    virtual ~TimerMngr();<br><br>private:<br>    void body(rtems_task_argument argument);<br><br>};<br></div><div><br><br></div><div>in timerMngr.cpp<br><br>TimerMngr::TimerMngr(const char* tname)<br>:    rtemsTask(tname,<br>        1,<br>        RTEMS_MINIMUM_STACK_SIZE,<br>        RTEMS_PREEMPT|RTEMS_TIMESLICE,<br>        0,<br>        RTEMS_NO_FLOATING_POINT,<br>        RTEMS_LOCAL)<br><br>{<br>    if(last_status_code()!=RTEMS_SUCCESSFUL)<br>        printf("SynchMngr::error when create()%d \n",<br>                last_status_code());<br>}<br></div><div><div><div><br><br><br>void TimerMngr::body(rtems_task_argument argument){<br><br>    printf("TimerMngr::body!  \n");   [1] <br><br>    /* Create the Timer<br>     * *****************************/<br>    Timer* timer=new Timer("timer");<br><br>    printf("SynchMngr, CurrentTime! @ %d \n",getCurrentTime());   [2] <br><br><br>    /* start timer<br>     * *****************************/<br>    rtems_status_code status;<br>    status=synch_timer->fire_after(120);<br>    printf("synch_timer->fire_after() status %d \n",status); [3] <br><br><br>    wake_after(500);<br>    printf("SynchMngr, CurrentTime @ %d \n",getCurrentTime()); [4]<br><br>}<br><br clear="all">unsigned TimerMngr::getCurrentTime(){<br>    //rtems_unsigned32  time_stamp;<br>    unsigned time_stamp;<br>    time_stamp=0;<br>    rtems_status_code status;<br><br>    status=rtems_clock_get(RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH,&time_stamp);<br>    if(status!=RTEMS_SUCCESSFUL)<br>        printf("error with rtems_clock_get %d \n",status);<br><br>    return time_stamp;<br>}<br><br></div><div>When I run the app I get the first and second printf [1] y [2]. But just <br>"syn" from the 3erd printf [3].<br><br></div><div>In the conf file:<br><br>#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER<br>#define CONFIGURE_TICKS_PER_TIMESLICE       30 <br>#define CONFIGURE_MAXIMUM_TIMERS              4<br></div><div><br></div><div>Any suggestion?<br></div><div><br></div><div>Cheers,<br></div><div>Pablo<br></div><div><br>-- <br>Martínez, Pablo Agustín
</div></div></div></div>