When building NoSpark on Ubuntu 17.10 (avr-gcc 5.4.0, avr-libc 2.0.0), the compiler has problems with the string constants using the PSTR() macro from avr/pgmspace.h:
[C++] lcdstaterunning.cpp
In file included from customcharacters.h:18:0,
from lcdstaterunning.cpp:27:
lcdstaterunning.cpp: In member function 'void ui::LcdStateRunning::drawDefault()':
strings_en.h:24:37: warning: uninitialized variable '__c' put into program memory area [-Wuninitialized]
#define STR_STATE_ERROR PSTR("ERROR ")
^
lcdstaterunning.cpp:152:39: note: in expansion of macro 'STR_STATE_ERROR'
lcd << stream::PGM << STR_STATE_ERROR;
...
obj/libui.a(serialconsole.o): In function `ui::SerialConsole::handleCommand(char const*, unsigned char)':
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:164: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:164: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:164: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:164: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:164: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:165: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:165: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:165: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
/home/geith/src/openevse/NoSpark/ui/serialconsole.cpp:165: undefined reference to `ui::SerialConsole::SerialConsole(stream::UartStream&)::__c'
collect2: error: ld returned 1 exit status
Makefile:70: recipe for target 'obj/NoSpark.elf' failed
make: *** [obj/NoSpark.elf] Error 1
A solution in my version was to change the string constant definition from #define ... PSTR(...) to const variables. Currently, they are defined like this:
#define STR_STATE_READY PSTR("READY ")
I changed that in my version to a variable declaration in the header file and an assignment in a .cpp file:
When building NoSpark on Ubuntu 17.10 (avr-gcc 5.4.0, avr-libc 2.0.0), the compiler has problems with the string constants using the
PSTR()
macro from avr/pgmspace.h:A solution in my version was to change the string constant definition from
#define ... PSTR(...)
to const variables. Currently, they are defined like this:I changed that in my version to a variable declaration in the header file and an assignment in a .cpp file:
This changes the compile time language selection too (by CXXFLAG). As additional side effect, this change reduces also the image size a little from
to
I could prepare a pull request for this change too.