This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: Will unlock_inner() be called twice during Real Time Clock Interrupt in ecos?
- From: Nick Garnett <nickg at ecoscentric dot com>
- To: "Qiang Huang" <jameshq at liverpool dot ac dot uk>
- Cc: "Ecos-Discuss" <ecos-discuss at sources dot redhat dot com>
- Date: 24 Sep 2002 18:55:31 +0100
- Subject: Re: [ECOS] Will unlock_inner() be called twice during Real Time Clock Interrupt in ecos?
- References: <BDEPKKELILOKGOAOMONOEECACAAA.jameshq@liv.ac.uk>
"Qiang Huang" <jameshq@liverpool.ac.uk> writes:
> As I posted similar subject onto ecos mailing list before, still hasn't be
> clearly described.
>
> Question:
> When a Real Time clock interrupt happens: clock tick.
>
> interrupt VSR --> .. --> interrupt_end() --> Cyg_Scheduler::unlock() -->
> **unlock_inner()** --> Cyg_Interrupt::call_pending_DSRs() --> calls to
> Cyg_RealTimeClock::dsr() --> rtc->tick( ) --> Cyg_Scheduler::unlock()-->
> **unlock_inner()** --> now comes back again, will it turn out to be
> recursive call? or the next time it won't drops into
> Cyg_RealTimeClock::dsr() again (which one is the fact??). but seems
> unlock_inner() has been called twice during a real time clock interrupt.
>
You missed the call in rtc->tick() to Cyg_Scheduler::lock(). Since the
scheduler lock is not being zeroed at this point
Cyg_Scheduler::unlock() will not call unlock_inner().
--
Nick Garnett - eCos Kernel Architect
http://www.eCosCentric.com/
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss