This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: Re: DSR question
- From: Gary Thomas <gthomas at ecoscentric dot com>
- To: Tim Michals <t dot michals at attbi dot com>
- Cc: eCos Discussion <ecos-discuss at sources dot redhat dot com>
- Date: 29 Sep 2002 06:10:57 -0600
- Subject: Re: [ECOS] Re: DSR question
- References: <002101c26772$f9cab7e0$7901a8c0@timHome>
On Sat, 2002-09-28 at 22:45, Tim Michals wrote:
>
> All,
>
> Problem:
> When the ISR is invoked several times the OS seems to lock up. After
> investigation, the OS is running but the DSR loop is not being invoked.
> Used ARM ICE to verify ISR is still being called, but the DSR block stops
> being called. Why would this happen? I'm sure it is some type of race
> condition. But, with a simple DSR and ISR how could this happen? Verified
> that the interrupt is not active. The interrupt is MASKed off. Turn the
> interrupt back on via the emulator, the isr is called. Also, the ISR/DSR
> is being called a number of time, I'm doing a simulation by holding the
> interrupt pin high for several seconds.
>
> Observations:
> The OS is running but any threads that are blocked on timers or any DSR
> calls, they are stopped. Created a simple thread that just sends messages
> out the port, it never locks up. Jut the threads blocked on timer, ie DSR.
>
> Using eCOS version 2.0
>
> Snippet for code:
>
> static int
> lcd_panel_isr(cyg_vector_t vector, cyg_addrword_t data, HAL_SavedRegisters
> *regs)
> {
> cyg_drv_interrupt_mask(CYGNUM_HAL_INTERRUPT_EINT2);
> cyg_drv_interrupt_acknowledge(CYGNUM_HAL_INTERRUPT_EINT2);
> return (CYG_ISR_CALL_DSR); // Run the DSR
> }
You have to tell the interrupt code that your ISR was successful
in dealing with this, as well as schedule the DSR. I always use:
return (CYG_ISR_HANDLED|CYG_ISR_CALL_DSR); // Run the DSR
>
> // This DSR starts up the touch panel [logical] processing
> static void
> lcd_panel_dsr(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
> {
>
> cyg_drv_interrupt_unmask(CYGNUM_HAL_INTERRUPT_EINT2);
> // cyg_semaphore_post(&lcd_panel_sem);
> }
--
------------------------------------------------------------
Gary Thomas |
eCosCentric, Ltd. |
+1 (970) 229-1963 | eCos & RedBoot experts
gthomas@ecoscentric.com |
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