Go Down

Topic: Custom cores question/problem (Read 761 times) previous topic - next topic


I'm working on a custom Arduino-based board for low-power projects. As part of the effort I have added a handful of utility functions to the 'core' for power management. In the hope of creating as little mess as possible, I did it as follows:

* Created new files, mosquino.c/mosquino.h, containing the custom stuff (functions, and macros + prototypes respectively) in the custom core's directory (...My Documents\Arduino\hardware\Mosquino\cores\arduino\)
* #include "mosquino.h" from WProgram.h

Although macros defined in these files are 'visible' from the sketch, the functions are not... even if mosquino.h is #include'd into the sketch by hand:

Code: [Select]

core_test.cpp.o: In function `setup':
C:\DOCUME~1\Tim\LOCALS~1\Temp\build5515614687940556259.tmp/core_test.cpp:32: undefined reference to `power_full()'

A look in the build temp folder shows at least that a mosquino.c.o file was built and contains references to the function.

Currently using a core derived from 0022 and the 0022 IDE (haven't had time to patch it up to 1.0 yet).

Is this behavior expected? That is, is there some peculiarity/voodoo in the Arduino IDE's build process that causes this to fail, or am I missing something simple? (i.e have been away from c++ too long :p )?

Coding Badly

Two choices...

1. Change mosquino.c to mosquino.cpp (this is the choice I would take)

2. Wrap the definitions in mosquino.h with extern "C" { }

In other words, you have a C++ name mangling / linkage problem.


Thanks, that (option 1) solved it!

Out of curiosity, if all the functions contained there are vanilla C-style, is there any advantage/difference (e.g. in code size or performance, or other considerations) to one of these approaches over the other?

Coding Badly

In my opinion you are always better off using C++ (instead of extern/C).  The syntax is "tighter".  Many (most? all?) of the implicit type conversion problems are eliminated.  Name mangling alone is worth using C++ compilation.

I have not used straight-C in ... well ... let's say a few years and I have not once missed it.

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131