Macro i AVR-GCC
Postat: 20 mars 2005, 17:30:52
Jag håller på med att skriva till uart ganka mycket på en AVR och då uppstår problem med att ram minnet tar slut efter som av någon anledning lägger alla strängar där
, så lösningen blir att lägga de i program minet vilket är ett lite bökit man måste då skriva PSTR("hej\n") för att den ska lägga det i program minnet. Så då tänkte jag skriva ett makro som gör det åt mej, och det fungerar nästan...
Macrot
om man skriver exempel printf("hej %d\n", 10)
så kommer makrot att ersätta det med
{char temp[100];avr_printf(strcpy_P(temp,PSTR("hej %d\n")),10);}
vilket fungerar ut märkt
Problemet upstår när man bara har med "strängen", delvis exempel printf("hej\n")
så kommer resultatet att bli
{char temp[100];avr_printf(strcpy_P(temp,PSTR("hej\n")),);}
vilket inte går att kompilera på grund av _ , _ som kommer med
Hur löser man detta...
Det borde gå... tycker man...

Macrot
Kod: Markera allt
#define printf(x,...) {char temp[100];avr_printf(strcpy_P(temp,PSTR(x)),__VA_ARGS__);}
så kommer makrot att ersätta det med
{char temp[100];avr_printf(strcpy_P(temp,PSTR("hej %d\n")),10);}
vilket fungerar ut märkt
Problemet upstår när man bara har med "strängen", delvis exempel printf("hej\n")
så kommer resultatet att bli
{char temp[100];avr_printf(strcpy_P(temp,PSTR("hej\n")),);}
vilket inte går att kompilera på grund av _ , _ som kommer med

Hur löser man detta...
Det borde gå... tycker man...