При использовании компилятора TI (Texas Instrument) я могу установить область памяти встроенного микроконтроллера с помощью C ++, просто ADC12IFG = 50;
, Clang помечает этот код как ошибку: indirection requires pointer operand ('int' invalid)
, Поэтому, когда я копаюсь в нем, у TI есть файл заголовка msp430f5335.h, который имеет следующие строки:
#define SFR_16BIT(address) extern volatile unsigned int address
SFR_16BIT(ADC12IFG); /* ADC12+ Interrupt Flag */
Затем есть командный файл компоновщика, msp430f5335.cmd, который имеет следующую строку:
ADC12IFG = 0x070A;
Таким образом, похоже, что командный файл компоновщика определяет address
, Так возможно ли, чтобы инструмент анализа clang распознавал командный файл компоновщика и не вызывал ложных срабатываний?
Clang предназначен для совместимости с GCC.
Заголовочные файлы TI (msp430-gcc-support-files
) использовать следующий механизм для определения отображаемых в памяти переменных регистра:
#define sfrw_(x,x_) extern volatile unsigned int x asm(#x_)
#define sfrw(x,x_) sfrw_(x,x_)
#define ADC12IFG_ 0x070A /* ADC12+ Interrupt Flag */
sfrw(ADC12IFG, ADC12IFG_);
(Для этого не требуется командный файл компоновщика.)