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