Vill skapa definitioner med ## men får inte till det
Postat: 8 april 2018, 17:34:23
Jag har ett projekt till en PIC (MPLAB X & XC8) där jag behöver några definitioner.
En är vilken portpinne, en annan är vilket TRIS-register som det gäller.
Så jag skriver alltså (för en av pinnarna):
#define D_JK0_SET_P B // Port
#define D_JK0_SET_B 5 // Bit
vilket betyder att den är på PORTB5.
Så jag BORDE kunde göra:
#define JK0_Set PORT ## D_JK0_SET_P ## bits.R ## D_JK0_SET_P ## D_JK0_SET_B
// Har tänkt: "PORT" + "B" + "bits.R" + "B" + "5" = "PORTBbits.RB5"
#define JK0_Set TRIS ## D_JK0_SET_P ## D_JK0_SET_B
vilket jag ser som givande:
#define JK0_Set PORTBbits.RB5
#define JK0_Set_D TRISB5
Men nix, får en del intressanta felmeddelanden. Jag har letat på nätet, hittat en del om preprocessorn till GCC och andra men helt klart måste det vara något jag inte fattar. Jag har testat med citationstecken, utan och lite olika kombinationer men jag har helt klart missat något grundläggande.
Jag vill alltså stycka ihop ett antal definitioner automagisk baserat på portnamn och bit, då kan jag skriva definitionerna och sedan välja att byta placering utan problem.
Men hur gör jag?
Helst vill jag ha ett lösningexempel med förklaring, då kan jag lära mig något - och det är ju förutsättningen för en bra dag.
En är vilken portpinne, en annan är vilket TRIS-register som det gäller.
Så jag skriver alltså (för en av pinnarna):
#define D_JK0_SET_P B // Port
#define D_JK0_SET_B 5 // Bit
vilket betyder att den är på PORTB5.
Så jag BORDE kunde göra:
#define JK0_Set PORT ## D_JK0_SET_P ## bits.R ## D_JK0_SET_P ## D_JK0_SET_B
// Har tänkt: "PORT" + "B" + "bits.R" + "B" + "5" = "PORTBbits.RB5"
#define JK0_Set TRIS ## D_JK0_SET_P ## D_JK0_SET_B
vilket jag ser som givande:
#define JK0_Set PORTBbits.RB5
#define JK0_Set_D TRISB5
Men nix, får en del intressanta felmeddelanden. Jag har letat på nätet, hittat en del om preprocessorn till GCC och andra men helt klart måste det vara något jag inte fattar. Jag har testat med citationstecken, utan och lite olika kombinationer men jag har helt klart missat något grundläggande.
Jag vill alltså stycka ihop ett antal definitioner automagisk baserat på portnamn och bit, då kan jag skriva definitionerna och sedan välja att byta placering utan problem.
Men hur gör jag?
Helst vill jag ha ett lösningexempel med förklaring, då kan jag lära mig något - och det är ju förutsättningen för en bra dag.