Good day. I use simple macro to define custom function for debug message. It seems like this:
#define DebugMessageFromProgMem(...) xprintf(__VA_ARGS__) #define DEBUG_MESSAGE_FROM_PROG(message, args...) {\ static char progmem_debug_message_local[] PROGMEM = message;\ DebugMessageFromProgMem(progmem_debug_message_local, ##args);\ } Here, xprintf - is extendet printf, which get format from program memory. Also xprintf can get argumets from program memory, if you specify %S in format string. So, it is simply to use: DEBUG_MESSAGE_FROM_PROG("We are here\r\n"); DEBUG_MESSAGE_FROM_PROG("value = %d\r\n", myValue); And it is cheap for RAM. Further, I want to add trace and assert function. Now I use such macro: #define STRING_HELPER(arg) #arg #define STRING_VALUE(arg) STRING_HELPER(arg) #define DEBUG_TRACE_PROGMEM(messageLine) \ {\ static const char progmem_trace_file[] PROGMEM = __FILE__;\ static const char progmem_trace_line[] PROGMEM = STRING_VALUE(__LINE__);\ static const char progmem_trace_messasge[] PROGMEM = messageLine;\ DEBUG_MESSAGE_FROM_PROG("Function %s\r\nin file %S:%S %S", \ __func__, \ progmem_trace_file, \ progmem_trace_line, \ progmem_trace_messasge);\ } In the same way I define DEBUG_ASSERT_PROGMEM macro. It is OK, but I want to use many trace and assert functions, so there is a question. Is there way to place function name in program memory? Maybe there are specific __FUNC_PROGMEM__ marco, or some compiler parameters, which switch __func__ from charecter array to string literal? Alexander Iljin _______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-gcc-list