public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
* [ECOS] why is it wrong to call cyg_semaphore_post() in ISR???
@ 2006-06-08 17:39 Monica Dsz
  2006-06-08 18:06 ` Gary Thomas
  0 siblings, 1 reply; 8+ messages in thread
From: Monica Dsz @ 2006-06-08 17:39 UTC (permalink / raw)
  To: ecos discuss

Hallo all,

I am new to eCos(and also to embedded). The eCos documentation says that ISR 
should not involve any kernel calls.But I want to know why 
cyg_semaphore_post() is not allowed in ISR(Interrupt service routine). It 
doesnt block. and i tried to use it though documentation says we shouldnt. 
It worked for me with the following code.

cyg_uint32 timer_isr(cyg_vector_t vector,cyg_addrword_t data)
{
  led_toggle();                    //Toggle the LED

  isr_counter++;                //32 bit ISR counter

  cyg_interrupt_acknowledge( vector ); //acknowledge the Interrupt to the 
processor

  cyg_semaphore_post( &intr_occured );   //give the semaphore,so that task 
waiting for it wakes up

  return( CYG_ISR_HANDLED  );          // Inform the kernel that ISR is 
handled
}

I wonder why in eCos,a semaphore cannot be posted in ISR. In VxWorks we can 
give a semaphore in ISR. Can anybody give me a pointer to documentation or 
an explanation for this.

Thank you in advance

monica


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

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [ECOS] why is it wrong to call cyg_semaphore_post() in ISR???
@ 2006-06-20 12:52 Goldschmidt Simon
  2006-06-20 13:12 ` Andrew Lunn
  0 siblings, 1 reply; 8+ messages in thread
From: Goldschmidt Simon @ 2006-06-20 12:52 UTC (permalink / raw)
  To: ecos-discuss

Hi,

>> Normally, you try not to disable interrupts in RTOS's. You should 
>> protect your critical regions with mutex's, semaphores etc.
>>

That might be true if minimal interrupt latency is your main goal. But if you have to get the best performance out of your hardware, disabling interrupts seems faster to me than using mutexes...

>
>I remember well that I(we in our company) have used intLock () in 
>VxWorks to make sure that interrupt doesnt during some critical 
>sections. Ofcourse we did use semaphores and mutexes to guard against 
>other threads but as far as I remember i never used semaphores/mutexes to guard against interrupts.
>
>    lockKey = intLock ();
>
>     ... (work with interrupts locked out)
>
>    intUnlock (lockKey);

That's how we do it with µC/OS.

>Seems in eCos we dont need to disable interrupts because interrupts 
>doesnt perform any kernal calls and we can use DSR to give semaphores 
>and etcthank you

Any idea what the performance loss is by using ISR+DSR instead of ISR only?
We are using NIOS-II processor and any context switch avoided makes our system a lot faster!

Thanks,
Simon.

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

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-06-20 13:12 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-08 17:39 [ECOS] why is it wrong to call cyg_semaphore_post() in ISR??? Monica Dsz
2006-06-08 18:06 ` Gary Thomas
2006-06-09  7:23   ` Monica Dsz
2006-06-09  9:19   ` Monica Dsz
2006-06-09  9:27     ` Andrew Lunn
2006-06-09  9:43       ` Monica Dsz
2006-06-20 12:52 Goldschmidt Simon
2006-06-20 13:12 ` Andrew Lunn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).