[ECOS] Re: Réf. : Twothreads.c without cyg_thread_delay

Gary Thomas gary@mlbassoc.com
Mon Nov 27 13:25:00 GMT 2006


Michele Portolan wrote:
> I found the answer: simply the example twothread.c does not explicetly 
> calls up cyg_scheduler_start inside cyg_user_start.
> After adding teh command scheduling works just fine!
>
Sounds like your platform has some problem (perhaps with tools or 
otherwise).  There should not need to be
any explicit call to start the scheduler - this happens when 
cyg_user_start() returns.

Certainly when I tested it last week (from the latest sources), there 
was no need to change the example program
other than the modifications I posted to light LEDs instead of prints 
and delays.
>
> Gary Thomas wrote:
>> Michele Portolan wrote:
>>> I have the same problems for eCos working on Leon2: I have no 
>>> context switches if the process is not suspended....
>>> Which interrupt whoudl I check? Thanks,
>>
>>   CYGNUM_HAL_INTERRUPT_RTC
>>
>>>
>>> Michele
>>>
>>> Gary Thomas wrote:
>>>> David Luca wrote:
>>>>> Timeslicing is enabled by default in eCos kernel.
>>>>> This is what I'm interested, to see two threads of
>>>>> same priority working. Using cyg_thread_delay doesn't
>>>>> mean much advantage over infinite loops because the
>>>>> tasks can be very long in working time before it
>>>>> reaches cyg_thread_delay. Its just a cooperative
>>>>> multitasking. Timeslicing is the reason I must use
>>>>> RTOS. If timeslicing is not working, then eCos is not
>>>>> a true RTOS. Anyone tested timeslicing?
>>>>
>>>> Of course!
>>>>
>>>> I just tried it.  I changed the thread function to simply
>>>> put a unique value into the platform LEDs - no delays:
>>>>
>>>> /* this is a simple program which runs in a thread */
>>>> void simple_program(cyg_addrword_t data)
>>>> {
>>>>   int message = (int) data;
>>>>
>>>>   printf("Beginning execution; thread data is %d\n", message);
>>>>   while (true) {
>>>>       HAL_SET_LEDS(1<<data);
>>>>   }
>>>> }
>>>>
>>>> Using the default scheduler (MLQUEUE), I changed the timeslice count
>>>> to be something that I can see (500 ticks = 5 seconds).  Running this,
>>>> I see first one value in the LEDS then a different value 5 seconds 
>>>> later.
>>>> The pattern repeats, ad nauseum.
>>>>
>>>> Timeslicing definitely works, as do eCos' other scheduling mechanisms.
>>>>
>>>> I believe that you're having trouble with your platform - 
>>>> interrupts aren't
>>>> working for your system clock.  Have you tried running the various 
>>>> kernel
>>>> tests?
>>>>
>>>>>
>>>>> --- Jean-Marc.Lopez@faiveleytransport.com wrote:
>>>>>
>>>>>
>>>>> ---------------------------------
>>>>> Hi David.
>>>>>  
>>>>>
>>>>> Excuse me but with your explanations, it's looks like
>>>>> you did not manage properly  the threads priorities.
>>>>>  
>>>>>
>>>>> It's just  a problem of Real time OS.
>>>>>  
>>>>>
>>>>> If your 2 threads had the same priority, and Thread_1
>>>>> never "give the hand" to the kernel, the Thread 2 will
>>>>> never run. …Except if you configure the timeSlicing
>>>>> option in your kernel. ( never done at this moment).
>>>>>  
>>>>>
>>>>> By using a cyg_thread_delay function, we said to the kernel to 
>>>>> stop the current Thread ( Thread 1 ) and to
>>>>> run the Thread 2 ( or the thread who have the higtest
>>>>> priority after the Thread1).
>>>>>  
>>>>>
>>>>> By setting the timeslicing option, the kernel will
>>>>> commute between the 2 threads every x ms ( depending
>>>>> of your kernel configuration) even if threads have the
>>>>> same priority. (but not experimented yet).
>>>>>  
>>>>>
>>>>>  
>>>>> LPZ
>>>>>
>>>>>  
>>>>> -----David Luca <davidluca3000@yahoo.com> a écrit :
>>>>> -----
>>>>>
>>>>> Pour : ecos-devel <ecos-devel@sourceware.org>,
>>>>> ecos-discuss <ecos-discuss@sourceware.org>
>>>>> De : David Luca <davidluca3000@yahoo.com>
>>>>> Date : 24/11/2006 14:29
>>>>> Objet : Twothreads.c without cyg_thread_delay
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Hello,
>>>>> Today I started twothreads.c application, but I
>>>>> replaced printf(not working yet on my platform) with
>>>>> leds. My question is, without the cyg_thread_delay, is
>>>>> it possible to run concurrently the two threads?
>>>>> Because if I comment this function, only one task is
>>>>> running, I can see that only one led is turn on and
>>>>> off.
>>>>> Thank you in advance,
>>>>> David Luca.
>>>>
>>>>
>>>
>>>
>>
>>
>
>


-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



More information about the Ecos-discuss mailing list