Best Practices for Maintainable Device Drivers (Windows CE 5.0)
While developing a device driver, if feasible, write consistent, self-validating code, in a non-confusing manner.
The following list shows best practices for maintainability:
Define the power states of your device.
Remove the DOSYSGEN logic from sources files.
Use all source and header files.
Verify that no source or header files contain unused code.
Initialize any global variables within DLL_PROCESS_ATTACH, which is within the DLLENTRY function.
Be aware of any implicit initialization to zero or NULL.
Call the DisableThreadLibraryCalls function within DLL_PROCESS_ATTACH in each DLL.
DLL_PROCESS_ATTACH is in the DLLENTRY function. Installable ISR DLLs cannot call DisableThreadLibraryCalls.
Move duplicated code into functions.
Move code that multiple drivers share into a shared library.
Use only necessary critical sections.
Do not use the HalXXX bus parent access functions: HalGetBusData, HalTranslateBusAddress, and so on.
Instead, use the CEDDK bus access functions: BusTransBusAddrToVirtual, GetBusNamePrefix, and so on.
Use the DEBUGCHK or ASSERT macros to ensure all assumptions are explicit.
Use validation functions to validate important structures, global data, device states, and so on.
Use debug zones of appropriately size.
Run the Application Verifier on the driver.
Declare destructors as
virtual
, if you expect a C++ class to have subclasses.
See Also
Power States | Sources File | Application Verifier Tool | Bus Drivers | CEDDK Dynamic-Link Library Bus Access Reference | Debugging Macros | Windows CE Drivers
Send Feedback on this topic to the authors