Microsoft KB Archive/319432

From BetaArchive Wiki
Knowledge Base


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:

  1. Add the following import to cfw2.c or to other files that contain the OEMInit function for your platform:

      extern DWORD OEMIdleSleepPtr;
                        
  2. 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