I have a problem that Arduino-mk does not seam to compile the same way as the IDE, and gives me a compile error for code that works in the IDE.
Here is my example.
#include <EEPROM.h>
void setup()
{
float tempFloat;
int addr;
Serial.begin(57600);
Serial.println("Begin setup");
Serial.println("EEPROM Compile Test");
Serial.println(__DATE__);
Serial.println(__TIME__);
addr = 1;
EEPROM.get(addr, tempFloat);
EEPROM.put(addr, tempFloat);
addr += sizeof(float);
}
void loop()
{
}
(I know it doesn't do anything useful, I just wanted minimum code that demonstrated the compile error)
This compiles fine in the IDE.
Using Arduino-mk I get compile error. Here is my Makefile
ARDUINO_DIR = /usr/share/arduino
USER_LIB_PATH = /home/gareth/Arduino/libraries
ARDUINO_LIBS = EEPROM
BOARD_TAG = mega2560
ARDUINO_PORT = /dev/ttyACM0
include /usr/share/arduino/Arduino.mk
Here is the output when I run make.
-------------------------
gareth@deskpi:~/Arduino/EEPROM_make_test $ make
-------------------------
Arduino.mk Configuration:
- [AUTODETECTED] CURRENT_OS = LINUX
- [USER] ARDUINO_DIR = /usr/share/arduino
- [COMPUTED] ARDMK_DIR = /usr/share/arduino (relative to Common.mk)
- [AUTODETECTED] ARDUINO_VERSION = 105
- [DEFAULT] ARCHITECTURE =
- [DEFAULT] ARDMK_VENDOR = arduino
- [DEFAULT] ARDUINO_SKETCHBOOK =
- [BUNDLED] AVR_TOOLS_DIR = /usr/share/arduino/hardware/tools/avr (in Arduino distribution)
- [COMPUTED] ARDUINO_LIB_PATH = /usr/share/arduino/libraries (from ARDUINO_DIR)
- [COMPUTED] ARDUINO_VAR_PATH = /usr/share/arduino/hardware/arduino//variants (from ARDUINO_DIR)
- [COMPUTED] BOARDS_TXT = /usr/share/arduino/hardware/arduino//boards.txt (from ARDUINO_DIR)
- [USER] USER_LIB_PATH = /home/gareth/Arduino/libraries
- [DEFAULT] PRE_BUILD_HOOK = pre-build-hook.sh
- [USER] BOARD_TAG = mega2560
- [COMPUTED] CORE = arduino (from build.core)
- [COMPUTED] VARIANT = mega (from build.variant)
- [COMPUTED] OBJDIR = build-mega2560 (from BOARD_TAG)
- [COMPUTED] ARDUINO_CORE_PATH = /usr/share/arduino/hardware/arduino//cores/arduino (from ARDUINO_DIR, BOARD_TAG and boards.txt)
- [DETECTED] MONITOR_BAUDRATE = 57600 (in sketch)
- [DEFAULT] OPTIMIZATION_LEVEL = s
- [DEFAULT] MCU_FLAG_NAME = mmcu
- [DEFAULT] CFLAGS_STD = -std=gnu11 -flto -fno-fat-lto-objects
- [DEFAULT] CXXFLAGS_STD = -std=gnu++11 -fno-threadsafe-statics -flto
- [COMPUTED] DEVICE_PATH = /dev/ttyACM0 (from MONITOR_PORT)
- [DEFAULT] FORCE_MONITOR_PORT =
- [AUTODETECTED] Size utility: AVR-aware for enhanced output
-
- ARDUINO_LIBS =
- [SYSTEM] EEPROM
- [COMPUTED] BOOTLOADER_PARENT = /usr/share/arduino/hardware/arduino//bootloaders (from ARDUINO_DIR)
- [COMPUTED] ARDMK_VERSION = 1.5
- [COMPUTED] CC_VERSION = 4.9.2 (avr-gcc)
-------------------------
mkdir -p build-mega2560
/usr/share/arduino/hardware/tools/avr/bin/avr-g++ -x c++ -include Arduino.h -MMD -c -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=105 -D__PROG_TYPES_COMPAT__ -I/usr/share/arduino/hardware/arduino//cores/arduino -I/usr/share/arduino/hardware/arduino//variants/mega -I/usr/share/arduino/libraries/EEPROM -Wall -ffunction-sections -fdata-sections -Os -fpermissive -fno-exceptions -std=gnu++11 -fno-threadsafe-statics -flto EEPROM_make_test.ino -o build-mega2560/EEPROM_make_test.ino.o
EEPROM_make_test.ino: In function ‘void setup()’:
EEPROM_make_test.ino:17:10: error: ‘class EEPROMClass’ has no member named ‘get’
EEPROM.get(addr, tempFloat);
^
EEPROM_make_test.ino:19:10: error: ‘class EEPROMClass’ has no member named ‘put’
EEPROM.put(addr, tempFloat);
^
/usr/share/arduino/Arduino.mk:1251: recipe for target 'build-mega2560/EEPROM_make_test.ino.o' failed
make: *** [build-mega2560/EEPROM_make_test.ino.o] Error 1
I did look for EEPROM.h and found that it defined an EEPROMClass in terms of read and write... so maybe the IDE and Arduino-mk are using different versions of EEPROM.h? But I only found one in my file structure?
I'm using a Raspberry Pi 3. Debian Stretch.
None of the other libraries I've tried have given me any problems. Any suggestions on where I go from here to debug this problem?
Thanks
Gareth