Hard real-time processing performance of Windows CE versions 2.12 and earlier varies widely according to processor and bus speed. As mentioned, Windows CE versions 2.12 and earlier do not support nested interrupts, which greatly limits real-time processing. On the Windows CE–based reference platform, which uses the Hitachi SH3 microprocessor, interrupt-driven device drivers are typically started within 90 to 170 microseconds after the interrupt occurs, yielding theoretical sampling rates of about 5.8 to 11 kHz. The variability is due to unpredictable factors, such as what data is currently in the processor cache and whether the device driver process happens to be the one currently executing. On other hardware, factors such as CPU speed, bus speed, and the speed of the manufacturer’s interrupt vectoring routines determine the lower limits of interrupt latency. Because the ISTs of device drivers can be pre-empted by high-priority threads, there is no absolute upper limit. In general, however, the latency for servicing interrupts in Windows CE is less than the latency for Windows-based desktop platforms; device drivers are unlikely to lose data unless they are starved for processor time by other high-priority threads running on the system. Device drivers for polled devices may be able to achieve higher sampling rates, since polled devices do not generate interrupts and are therefore not subject to the same latencies.
Peripherals that connect to Windows CE through a serial port can do so at the maximum speed of the serial port. Most serial ports are buffered internally by 16550-class universal asynchronous receiver-transmitters (UARTs) capable of relaying 115 kilobits per second; consult the manufacturer for specific information. PC Card socket speeds vary also; again, the authoritative source of information is the manufacturer.
To reduce the time that it takes your stream interface driver to handle incoming data, defer complicated processing. If the device driver restricts itself to collecting the data in memory, it can leave processing of that data for later, to be handled by a low-priority thread or user-level application.