Fwd: RTEMS core: bad work with _Watchdog_* ?

Joel Sherrill joel.sherrill at OARcorp.com
Wed Feb 6 12:32:10 UTC 2002


I have been working offline with Ilya and sent him the suggestion
to comment out the _ISR_Flash in src/watchdoginsert.c.  Then he should
have a finer grain view of the problem.

--joel

Ilya Alexeev wrote:
> 
> Hi all.
> I has tried to send this message only to Joel,
> but I has received a returned mail with something about that domain isn't in
> a list of allowed rcpthosts... So I send this to rtems-users...
> ------------------------------------
> 
> I am using the latest RTEMS snapshot and
> see such effect:
> 
> Then I create very many tasks which are calling
> rtems_task_wake_after in the infinite loop, there is a very big chance
> that such task isn't wake up.
> 
> I am using the gen68360 bsp.
> 
> Here is the application which I use for test:
> 
> ////////////////// begin of application //////////////////////////
> #include <rtems.h>
> #include <termios.h>
> #include <stdio.h>
> #include <rtems/libio.h>
> #include <fcntl.h>
> #include <bsp.h>
> 
> static rtems_task
> testTask(rtems_task_argument argument)
> {
>     rtems_event_set events;
> 
>     while(1)
>     {
>         rtems_task_wake_after(1);
> //      rtems_event_receive(RTEMS_EVENT_1, RTEMS_WAIT|RTEMS_EVENT_ANY, 1,
> &events);
> 
>     }
> }
> 
> rtems_task
> Init(rtems_task_argument argument)
> {
>     rtems_id tid;
>     int i;
> 
>     for (i = 0; i < 50; i++)
>     {
>         rtems_task_create(rtems_build_name('T','E','S','T'),
>             100, RTEMS_MINIMUM_STACK_SIZE, RTEMS_DEFAULT_MODES,
>             RTEMS_DEFAULT_ATTRIBUTES, &tid);
>         rtems_task_start(tid, testTask, 0);
>     }
> 
>     puts("\n");
>     while(1)
>     {
>         printf("%08d  ", _Watchdog_Ticks_since_boot);
>         fflush(stdout);
>         rtems_task_wake_after(5);
>     }
> 
>     rtems_task_suspend(RTEMS_SELF);
> }
> 
> #define CONFIGURE_MAXIMUM_SEMAPHORES                    8
> #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS        8
> #define CONFIGURE_MAXIMUM_TASKS                         64
> 
> #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> 
> #define CONFIGURE_MICROSECONDS_PER_TICK                 1000
> 
> #define CONFIGURE_EXECUTIVE_RAM_SIZE                    (1024*1024)
> 
> #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
> #define CONFIGURE_INIT
> 
> #include <confdefs.h>
> 
> ////////////////// end of application //////////////////////////
> 
> I see only a some numbers which are printed from the Init task,
> and then all output stops.
> 
> Changing rtems_task_wake_after directive to the rtems_event_receive with
> the same timeout does not made the good situation too.
> 
> As I understood, both this directives (wake_after and event_receive) works
> with the _Watchdog_Ticks_chain.
> 
> Clock interrupts handler works with this chain too
> (_Watchdog_Tickle_ticks() directive).
> 
> In my opinion, there is no appropriate protection of this chain
> then rtems_task_wake_after() and _Watchdog_Tickle_ticks() routines
> are called 'together'.
> 
> When I added to the rtems_task_wake_after directive (taskwakeafter.c)
> _ISR_Disable(level) at the beginning and the _ISR_Disable(level) at
> the end, things goes much better!
> Output from the my application is nevers stops.
> 
> Also then I modified the _Event_Seize directive by the same way
> (I removed the _ISR_Enable - _ISR_Disable around the _Watchdog_Initialize),
> my application begin to work good with the rtems_event_receive() directive.
> 
> What can you say about this?
> Does such changes really needed to the RTEMS core or I mistake somewhere?
> 
> Best regards,
>         Ilya Alexeev.
> 
> -------------------------------------------------------

-- 
Joel Sherrill, Ph.D.             Director of Research & Development
joel at OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (256) 722-9985



More information about the users mailing list