Particle Dev Stopped Compiling

I am using a local library for FRAM (https://github.com/SammyHerring/Adafruit_FRAM-I2C) and it worked without issue until today. I am not sure what changed but I get the dreaded “compiler timed out of encountered error” message for my Electron running 0.6.0 using Particle Dev on a Mac.

I tried compiling using the CLI to get more information. And the issue seems to be here:

Cellular-Logger-MMA8452Q.ino:53:63: fatal error: Adafruit_FRAM_I2C.h: No such file or directory
#include “Adafruit_FRAM_I2C.h” // Library for FRAM functions

Again, this had worked for some time. Not sure what changed:

  • The library is in "lib/Adafruit_FRAM_I2C/src/Adafruit_FRAM_I2C.h
  • There is an #include “Adafruit_FRAM_I2C.h” in the main .ino file
  • I added a line dependencies.Adafruit_FRAM_I2C=1.0.0 to the project.properties

I even copied the Adafruit_FRAM_I2C.h and .cpp files into the same directory as the main .ino file without success.

What am I missing?

Thanks,

Chip

Here is the complete dump from the command line in case I missed a clue:

MacBook-Pro-3:src chipmc$ particle compile electron Cellular-Logger-MMA8452Q.ino

Compiling code for electron

Including:
Cellular-Logger-MMA8452Q.ino
attempting to compile firmware
Compile failed. Exiting.
Processing Cellular-Logger-MMA8452Q.ino
make -C …/modules/electron/user-part all
make[1]: Entering directory '/firmware/modules/electron/user-part’
make -C …/…/…/user
make[2]: Entering directory '/firmware/user’
Building cpp file: Cellular-Logger-MMA8452Q.cpp
Invoking: ARM GCC CPP Compiler
mkdir -p …/build/target/user/platform-10-m
arm-none-eabi-gcc -DSTM32_DEVICE -DSTM32F2XX -DPLATFORM_THREADING=1 -DPLATFORM_ID=10 -DPLATFORM_NAME=electron -DUSBD_VID_SPARK=0x2B04 -DUSBD_PID_DFU=0xD00A -DUSBD_PID_CDC=0xC00A -DSPARK_PLATFORM -g3 -gdwarf-2 -Os -mcpu=cortex-m3 -mthumb -DINCLUDE_PLATFORM=1 -DPRODUCT_ID=10 -DPRODUCT_FIRMWARE_VERSION=65535 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DSYSTEM_VERSION_STRING=0.6.2 -DRELEASE_BUILD -I./inc -I…/wiring/inc -I…/system/inc -I…/services/inc -I…/communication/src -I…/hal/inc -I…/hal/shared -I/rtos/FreeRTOSv8.2.2/FreeRTOS/Source/include -I/rtos/FreeRTOSv8.2.2/FreeRTOS/Source/portable/GCC/ARM_CM3 -I…/hal/src/electron -I…/hal/src/stm32f2xx -I…/hal/src/stm32 -I…/platform/shared/inc -I…/platform/MCU/STM32F2xx/STM32_USB_Host_Driver/inc -I…/platform/MCU/STM32F2xx/STM32_StdPeriph_Driver/inc -I…/platform/MCU/STM32F2xx/STM32_USB_OTG_Driver/inc -I…/platform/MCU/STM32F2xx/STM32_USB_Device_Driver/inc -I…/platform/MCU/STM32F2xx/SPARK_Firmware_Driver/inc -I…/platform/MCU/shared/STM32/inc -I…/platform/MCU/STM32F2xx/CMSIS/Include -I…/platform/MCU/STM32F2xx/CMSIS/Device/ST/Include -I…/dynalib/inc -I -I./libraries -I -I -I -I -I. -MD -MP -MF …/build/target/user/platform-10-mCellular-Logger-MMA8452Q.o.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DSPARK_PLATFORM_NET=UBLOXSARA -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -DLOG_INCLUDE_SOURCE_INFO=1 -DPARTICLE_USER_MODULE -DUSE_THREADING=0 -DUSE_SPI=SPI -DUSE_CS=A2 -DUSE_SPI=SPI -DUSE_CS=A2 -DUSE_THREADING=0 -DUSER_FIRMWARE_IMAGE_SIZE=0x20000 -DUSER_FIRMWARE_IMAGE_LOCATION=0x8080000 -DMODULAR_FIRMWARE=1 -DMODULE_VERSION=4 -DMODULE_FUNCTION=5 -DMODULE_INDEX=1 -DMODULE_DEPENDENCY=4,2,108 -D_WINSOCK_H -D_GNU_SOURCE -DLOG_MODULE_CATEGORY="“app”" -fno-exceptions -fno-rtti -fcheck-new -std=gnu++11 -c -o …/build/target/user/platform-10-mCellular-Logger-MMA8452Q.o Cellular-Logger-MMA8452Q.cpp
Cellular-Logger-MMA8452Q.ino:53:63: fatal error: Adafruit_FRAM_I2C.h: No such file or directory
#include “Adafruit_FRAM_I2C.h” // Library for FRAM functions
^
compilation terminated.
…/build/module.mk:267: recipe for target ‘…/build/target/user/platform-10-mCellular-Logger-MMA8452Q.o’ failed
make[2]: *** […/build/target/user/platform-10-mCellular-Logger-MMA8452Q.o] Error 1
make[2]: Leaving directory ‘/firmware/user’
…/…/…/build/recurse.mk:11: recipe for target ‘user’ failed
make[1]: Leaving directory '/firmware/modules/electron/user-part’
make[1]: *** [user] Error 2
…/build/recurse.mk:11: recipe for target ‘modules/electron/user-part’ failed
make: *** [modules/electron/user-part] Error 2
MacBook-Pro-3:src chipmc$

@suda

If it helps, what I have been finding in my project which has a growing number of small libraries, some hosted, some local, some my own is that tiny errors that would normally be picked up and flagged by the compiler are now instead resulting in a timeout error. In my instance these have been the usual silly C-syntax typos like missing a semi-colon, and in any other modern IDE would probably be caught by the built-in linting tools. Getting linting working in Atom on Windows looks to be a bit of a pest but it might be easier for you on a Mac.

I’m not entirely sure what specifying a library in project.properties does, I think it might mean that the compiler is trying to find a library of that name that has been published to the cloud… Which might explain some of the file not found errors you are getting, in my case I just get a timeout.

I have been having this problem for over a week in Dev. I get this error for any compile error. I have had to resort to copy/pasting into Build to find the errors correct them and then copy back to Dev which will compile and flash fine if there are no errors. If you find a solution please report back, this problem is making Dev almost useless.

Hi Charles, sorry you’re having those issues. Looking at the output you provided I see that when using the CLI you’re passing the Cellular-Logger-MMA8452Q.ino which will just send this file. To compile whole project try particle compile electron ..

As for Particle Dev it might be a bug in current version. I can confirm same error you’re having and that it’s not present in latest version which we’ll release this week. I hope you can use the CLI until then.

FWIW…I’ve been experiencing the same issue more frequently with the exceedingly vague “compiler timed out or encountered an error”. I wasted hours this past weekend with a simple program that wouldn’t compile and I could only comment out blocks of code until I finally narrowed in on the issue which seemed to resolve itself. I should have copy-pasted my code onto the forum, but needed to get it working for a project.

I had thought this only occurred with Particle.variables() that had a string for the first parameter that was longer than 12 characters. However, that was not the case this weekend. It may have been due to a Timer callback that was doing a Particle.publish(). If that is a no no, then a more specific error message would certainly seem appropriate. I ended up removing the Timer object and resorting to simply using time stamps in loops.

Should I be attempting a CLI compile and post the output on the forum the next time it occurs?

Great suggestion to copy-paste into Build to identify the exact problem! However, that step should obviously not be needed.

Absolutely! That will help narrow down the problem :wink:

1 Like

All,

Thank you for your comments. I have resolved this with support and Suda’s help.

For others who have this problem, here is what worked for me:

  1. Take the entry out of particle.properties - not a published library so not needed or helpful
  2. Get rid of the lib directory and move all the .h and .ccp library files into the same directory as my .ino file.
  3. From that directory, use the correct CLI to compile: “particle compile electron .”
  4. From the CLI output - found my minor syntax errors and fixed them
  5. Once it compiled cleanly from the CLI, I could continue using the compile functions in Particle Dev.

Particle Dev needs a linter but, I can make this work for now.

Hope this helps someone else. Thanks for Rick and Suda for you help and patience.

Chip

2 Likes

@chipmc, by “Take the entry out of particle.properties” can you clarify what you mean by “Take the entry out”. What entry are you referring to? In my case, I did not have a set of local library files, nor did I have a lib directory.

Sure, I was following the process to create a library and had created a line in the particle.properties like this:

dependencies.Adafruit_FRAM_I2C=1.0.0

this is the entry that needed to be removed as - I suspect - it caused the compiler to go look for a library in the published catalog and fail.

I am not sure that deleting the lib directory was required but, that was the approach that Rick from tech support took and I followed his lead. I would imagine that, if you had a lot of private local libraries, having a directory structure would be good. It may also help for GitHub integration.

Thanks,

Chip

@chipmc, Thanks for the clarification. I assumed that, but really hate to assume!

I’ve been experiencing the same issue in the desktop IDE…“compiler timed out or encountered an error”. After discovering it was a coding error, I forgot a semi-colon, and knowing I just recently installed 0.6.2, I changed the build target to version 0.5.3, re-compiled, and it worked as it should, giving me a compiler error for the missing “;”. So, I now compile in 0.5.3 and when my code compiles clean, I re-compile in 0.6.2 and flash to the device. Kinda crazy, but it works for now.