Microsoft KB Archive/319432

= Delays May Occur from Running an ISR to Running an IST =

Article ID: 319432

Article Last Modified on 2/1/2007

-

APPLIES TO


 * Microsoft Encarta Reference Suite 2001

-



This article was previously published under Q319432



SYMPTOMS
Platforms that use the Hitachi SuperH family of processors may experience long delays in running an interrupt service thread (IST) after running an interrupt service routine (ISR).



CAUSE
The exact cause of this problem is not yet understood. If interrupts are masked and an interrupt is pending service when the SLEEP instruction is run, the return from the service routine runs the SLEEP instruction again. This causes the running of the service thread to be delayed until the next interrupt occurs, which can take as long as 1 millisecond.



RESOLUTION
A supported software update is now available from Microsoft as Windows CE 3.0 Core OS QFE Q319432. To resolve this problem immediately, click the following article number for information about obtaining Windows CE Platform Builder and core operating system software updates:

837392 How to locate core operating system fixes for Microsoft Windows CE Platform Builder products

The English version of this package should have the following file attributes or later:   Size        File name 1,931,608  020318_sh4_wce30-q319432.exe The English version of this fix should contain the following files, with the listed file attributes or later:   Date        Time    Size       File name     Platform ---  11-Mar-2002  18:31  1,324,112  Nkmain.lib    SH4\Debug 11-Mar-2002 18:31     94,208  Nkmain.pdb    SH4\Debug 11-Mar-2002 18:31  1,492,318  Nkprmain.lib  SH4\Debug 11-Mar-2002 18:31    102,400  Nkprmain.pdb  SH4\Debug 11-Mar-2002 18:29    921,350  Nkmain.lib    SH4\Retail 11-Mar-2002 18:29     94,208  Nkmain.pdb    SH4\Retail 11-Mar-2002 18:29  1,077,628  Nkprmain.lib  SH4\Retail 11-Mar-2002 18:29    102,400  Nkprmain.pdb  SH4\Retail



MORE INFORMATION
To fix this problem, the return from ISR determines whether the return pointer equals the location of the SLEEP instruction in CPUEnterIdle, which is the only place that SLEEP should be called with interrutps disabled. This fix requires some implementation by the OEM in to work correctly:   Add the following import to cfw2.c or to other files that contain the OEMInit function for your platform: extern DWORD OEMIdleSleepPtr;   Add the following line to the beginning of OEMInit: OEMIdleSleepPtr = CPUEnterIdle; 

Note that Hitachi has not yet confirmed this behavior. This fix may have to be modified in the future, pending Hitachi's findings.



STATUS
Microsoft has confirmed that this is a problem in the Microsoft products that are listed at the beginning of this article.

Keywords: kbbug kbfix kbqfe KB319432

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.