[ECOS] Re: I have a problem with the priority of ecos
John Dallaway
john@dallaway.org.uk
Thu Apr 14 07:36:00 GMT 2011
[ moving to ecos-discuss ]
Hi Moktar
moktar_bouain wrote:
> void cyg_user_start(void)
> {
> printf("Entering twothreads' cyg_user_start() function\n");
>
> cyg_mutex_init(&cliblock);
>
> cyg_thread_create(10, taska, (cyg_addrword_t) 0,"Thread A", (void *)
> stack[0], 4096,&simple_threadA, &thread_s[0]);
> cyg_thread_create(0, taskb, (cyg_addrword_t) 1,"Thread B", (void *)
> stack[1], 4096,&simple_threadB, &thread_s[1]);
> }
>
> void main (cyg_addrword_t data)
> {
> for(;;)
> {
> cyg_thread_resume(simple_threadA);
> cyg_thread_resume(simple_threadB);
> }
> }
>
> when I execute this configuration:
> TASKB
> TASKB
> TASKB
> TASKB
> TASKB
> TASKB
> TASKB
> TASKB
> TASKB
> TASKB
> TASKB
It looks like the issue is with main() which will run as an eCos thread
at priority 10 by default (CYGNUM_LIBC_MAIN_THREAD_PRIORITY). The bitmap
scheduler will not handle two threads at the same priority correctly.
Assuming you have a good reason to use main() and to restart the
application threads in this way, main() should be of lower priority than
the other threads.
I hope this helps...
John Dallaway
eCos maintainer
http://www.dallaway.org.uk/john
--
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