Atmel Studio och preprocessor #error funkar inte

Permalänk

Atmel Studio och preprocessor #error funkar inte

Bakgrund: Använder Atmel Studio 7 och programmerar en Atmega324PB. Har inte ställt om Tool-chain till nåt speciellt.

Jag har kollat hur preprocessor-direktiven #if/#elif/#else/#endif ska fungera och - det gör inte det. Vad gör jag för fel?

Jag har i fil1.h

#define HW_VER0 0 #define HW_VER1 1 #define HW_VERSION HW_VER1

I olika c-filer har jag sedan...
(Jag har #includat första filen..)

#if (HW_VERSION == HW_VER0) ... ... #elif (HW_VERSION == HW_VER1) ... #else #error "Felaktig HW-version" #endif

Om jag nu #definar HW_VERSION till HW_VER2 så bör det bli ett error. Givetvis blir det inte det. Inget sker. Varför?

Permalänk
Hedersmedlem

Nu verkar vi ju inte få se den riktiga koden men ett tips kan vara att förenkla villkoren för att se att det funkar som du förväntar dig I ett enklare fall. Testa till exempel

#if (1 != 0) #error "bad" #endif

Permalänk
Skrivet av Shimonu:

Nu verkar vi ju inte få se den riktiga koden men ett tips kan vara att förenkla villkoren för att se att det funkar som du förväntar dig I ett enklare fall. Testa till exempel

#if (1 != 0) #error "bad" #endif

Ja. Det du skrev fungerar och även mer komplicerade saker med #elif och #else. Det är nåt med #define. Jag provade med fasta värde i if-satsen och då fungerade det; typ #if(HW_VERSION == 1).

Permalänk
Hedersmedlem
Skrivet av Sweedland:

Ja. Det du skrev fungerar och även mer komplicerade saker med #elif och #else. Det är nåt med #define. Jag provade med fasta värde i if-satsen och då fungerade det; typ #if(HW_VERSION == 1).

Så du menar att du om du sätter

#define HW_VERSION HW_VER1

så kan du jämföra med

#if (HW_VERSION == 1)

och det fungerar?

Du kan ju stoppa in #warning eller #error I alla grenar för att se var den hamnar också

Permalänk
Skrivet av Sweedland:

Ja. Det du skrev fungerar och även mer komplicerade saker med #elif och #else. Det är nåt med #define. Jag provade med fasta värde i if-satsen och då fungerade det; typ #if(HW_VERSION == 1).

Bara för att se var det failar så skulle jag prova några olika saker:

Lägg in definen precis ovanför din jämförelse

Sätt ett #error i .h-filen också, för att se i vilken ordning de ploppar ut när du kompilerar.

Permalänk
Skrivet av Shimonu:

Så du menar att du om du sätter

#define HW_VERSION HW_VER1

så kan du jämföra med

#if (HW_VERSION == 1)

och det fungerar?

Du kan ju stoppa in #warning eller #error I alla grenar för att se var den hamnar också

Jag skippade #define HW_VER0 0, #define HW_VER1 1 och satte #HW_VERSION 1.
I koden sen hade jag #if(HW_VERSION == 0)....
Det fungerade och just nu är jag nöjd med det även om det sticker i mig varför inte första förslaget fungerade.