This is the mail archive of the ecos-devel@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: I have a problem with the priority of ecos


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
------------------------------------------------------------


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]