I've upgraded to latest version 6752. However code completion engine fails in many situations.
1. Struct member autocomletion fail even on simpliest structures:
a) Works normal:
struct TEST
{
int a,
int b,
};
TEST t;
b) FAIL: Only "a" member is visible inside t
struct TEST
{
int a,
int b
};
TEST t;
2. Structures from ARM headers aren't visible. Example:
/* "LPC11xx.h" */
typedef struct
{
__IO uint32_t MOD; /*!< Offset: 0x000 Watchdog mode register (R/W) */
__IO uint32_t TC; /*!< Offset: 0x004 Watchdog timer constant register (R/W) */
__O uint32_t FEED; /*!< Offset: 0x008 Watchdog feed sequence register ( /W) */
__I uint32_t TV; /*!< Offset: 0x00C Watchdog timer value register (R/ ) */
} LPC_WDT_TypeDef;
#define LPC_WDT ((LPC_WDT_TypeDef *) LPC_WDT_BASE )
Now LPC_WDT-> expands to nothing
3. Functions from math.h and other system libraries doesn't work (but from my file works fine)
Example:
/* <math.h> */
#ifndef __math_68881
extern double atan _PARAMS((double));
extern double cos _PARAMS((double));
extern double sin _PARAMS((double));
extern double tan _PARAMS((double));
extern double tanh _PARAMS((double));
extern double frexp _PARAMS((double, int *));
extern double modf _PARAMS((double, double *));
extern double ceil _PARAMS((double));
extern double fabs _PARAMS((double));
extern double floor _PARAMS((double));
#endif /* ! defined (__math_68881) */
Code completion doesn't understand that.
sprintf, atoi and other functions aren't visible too.
It seems CC completely unaware of macros. Is it possible to make it work?
Small extract from the project above. No need for additional headers and defines.
/* structure declaration demo */
#ifdef __cplusplus
#define __I volatile /*!< defines 'read only' permissions */
#else
#define __I volatile const /*!< defines 'read only' permissions */
#endif
#define __O volatile /*!< defines 'write only' permissions */
#define __IO volatile /*!< defines 'read / write' permissions */
typedef struct
{
__IO uint32_t PCON; /*!< Offset: 0x000 Power control Register (R/W) */
__IO uint32_t GPREG0; /*!< Offset: 0x004 General purpose Register 0 (R/W) */
__IO uint32_t GPREG1; /*!< Offset: 0x008 General purpose Register 1 (R/W) */
__IO uint32_t GPREG2; /*!< Offset: 0x00C General purpose Register 2 (R/W) */
__IO uint32_t GPREG3; /*!< Offset: 0x010 General purpose Register 3 (R/W) */
__IO uint32_t GPREG4; /*!< Offset: 0x014 General purpose Register 4 (R/W) */
} LPC_PMU_TypeDef;
/*@}*/ /* end of group LPC11xx_PMU */
#define LPC_AHB_BASE (0x50000000UL)
#define LPC_PMU_BASE (LPC_APB0_BASE + 0x38000)
#define LPC_PMU ((LPC_PMU_TypeDef *) LPC_PMU_BASE )
/* function declaration demo (from math.h) */
#define _PARAMS(paramlist) paramlist
extern double acos _PARAMS((double));
void main(void)
{
LPC_PMU->PCON = 0x20; /* members of LPC_PMU-> are not shown */
((LPC_PMU_TypeDef *) LPC_PMU_BASE)->PCON = 0x20; /*this is the same, but members of LPC_PMU_TypeDef now visible*/
acos(20.5); /*this autocompletes only if _PARAMS macro substituted in "settings" menu */
}