Monday, November 26, 2012

Using #error macro in Compact 7 BSP Development

This post talks about checking whether a variable is CDEFINED or not using #error macro

We have a file test.c under the path _TARGETPLATROOT\SRC\DRIVERS\test\

When we build test folder it generates test.dll which is present in NK.bin and also the registry entries which corresponds to this DLL are also available in NK.bin. 

We have defined some macros as given below in test.c file

#ifdef BSP_TEST
#define SHARED_GPIO GPIO_81
#else
#define SHARED_GPIO GPIO_51
#endif

BSP_TEST was set in <Platform>.bat file and corresponding CDEFINE was done in sources.cmn

Issue: When we load the driver the interface which is controlled test.dll found not working. 

The following debug steps are identified to know what is causing the issue

  • Check if the driver is present or not in Active Registry
  • Enable messages in all the functions of the driver (Test.DLL) if the driver is unloading
  • Print SHARED_GPIO macro value using RETAILMSG

Tools used for the identified steps

  • For the first one we have used Remote Tools from Compact 7 and searched for the test.dll in HKLM\Active path
  • Used RETAIL Messages in all the functions
  • For the third I had come to know a useful macro that is #error
    • Use the below code to check BSP_TEST is enabled or not
    • Include the following lines of code in test.c 
                      #ifndef BSP_TEST 
                            #error "BSP_TEST is not enabled" 
                      #endif
    • With this if by chance the driver is not able to see the CDEFINE for BSP_TEST your build fails and you need not check by booting the system with the NK.bin
  • using #error while preliminary testing of the BSP will save significant amount of your time


No comments:

Post a Comment