ich das folgende Makro in C geschrieben haben:IAR Compiler Warnung: "Makro erstellen kein gültiges Token"
#define __HAL_CLK_ENABLE(CONTROL_STRUCT,REG,CLK) do { \
SET_BIT(CONTROL_STRUCT->REG,##CONTROL_STRUCT##_##REG##_##CLK##EN);\
} while(0)
Makroaufruf in main.c/Alle Parameter werden in cpu spezifischen Header definiert Dateien:
__HAL_CLK_ENABLE(RCC,AHB1ENR,GPIOA);
Das Ergebnis sollte sein:
SET_BIT(RCC->AHB1ENR,RCC_AHB1ENR_GPIOAEN)
Dieses Makro funktioniert und aktiviert meinen GPIOA-Port korrekt, aber ich erhalte zwei Compiler-Warnungen. (IAR EW 7.6)
- Makro Der Parameter "CONTROL_STRUCT" wird sowohl in erweiterter als auch in Rohform verwendet. (Ich werde diese Warnung ignorieren, denn in diesem Fall ist es richtig, beiden Formen zu verwenden!)
2. Verkettung mit „RCC_AHB1ENR_GPIOAEN“ in Makro „__HAL_CLK_ENABLE“ erstellen kein gültiges Token. (Was bedeutet es, weil die Token wird nach dem Aufruf dieses Makros korrekt und meine Uhr funktioniert aktiviert?)
Dank
EDIT1:
Makrodefinitionen:
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
#define RCC ((RCC_TypeDef *) RCC_BASE)
typedef struct
{
...
__IO uint32_t AHB1ENR;
...
} RCC_TypeDef;
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
Sie müssen die Definitionen aller Makros anzeigen. Bitte erstellen Sie ein minimales Beispiel. – 2501
Okay, ich habe alle verwendet Makrodefinitionen – Passe
Ist es möglich, dass der Fehler von der Definition von GPIOA abhängt? – Passe