Re: I have a problem with the priority of ecos

Gary Thomas <[email protected]>
Newsgroups gmane.os.ecos.devel
Message-ID <[email protected]>
On 04/12/2011 03:25 PM, moktar_bouain wrote:
>
> Hello ,
> I have a problem  with  the priority of ecos.
>   I have the following configuration:
>
> #include<cyg/kernel/kapi.h>
>
> #include<stdio.h>
> #include<math.h>
> #include<stdlib.h>
> cyg_thread thread_s[2];		
> char stack[2][4096];
> cyg_handle_t simple_threadA, simple_threadB;
> cyg_mutex_t cliblock;
> void taska(cyg_addrword_t data)
> {
> printf("TASKA \n");
>    }
> void taskb(cyg_addrword_t data)
> {
> printf("TASKB \n");
>
> }
>
> 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
>
> but when  I changed the priority:
>
>    cyg_thread_create(1, 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]);
> I find  this  false result
> TASKB
> TASKA
> TASKB
> TASKA
> TASKB
> TASKA
> TASKB
> TASKA
> TASKB
> TASKA
> TASKB
> TASKA
> TASKB
> TASKA
> TASKB
>
> Any help??

What scheduler are you using? (this controls how many priorities and what
type of  priority mechanism is available)

Also, what makes you think that after a thread does a printf() call, it
should yield the CPU to the other thread?  There is no reason for it and
in the simplest configuration printf() is just diag_printf() which is not
interrupt driven and there would never be a reason for one thread to lose
control of the CPU.

-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.