Pages: [1]   Go Down
Author Topic: Multiple inclusion of custom library function.  (Read 2849 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have written a file that takes in a number between -128 and 127 that corresponds with the output of a sensor.  -128 represents -1 and 127 represents 127/128.  The function is supposed to take an arcsine of this and return it.  I am computing the arcsine using a lookup table with -128 = -pi/2 and 127 = 127*pi/256 (slightly less than pi/2).

When I try to make this into a library function I get the following error:

magAcc.cpp.o: In function `arcsineLUTFunc(char)':
c:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/arcsineLUT.h:8: multiple definition of `arcsineLUTFunc(char)'
ADXL345\ADXL345.cpp.o:c:/arduino-0021/hardware/tools/avr/lib/gcc/../../avr/include/arcsineLUT.h:8: first defined here
c:/arduino-0021/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: Disabling relaxation: it will not work with multiple definitions
magAcc.cpp.o:(.data.arcsineLUT1+0x0): multiple definition of `arcsineLUT1'
ADXL345\ADXL345.cpp.o:(.data.arcsineLUT1+0x0): first defined here

The file arcsineLUT.h is

Code:
#ifndef arcsineLUTFile
#define arcsineLUTFile

#include "WProgram.h"
char arcsineLUT1[256] = {/*lookup table numbers go here*/};
char arcsineLUTFunc(char index)
{
if(index > 127)
index = 127;
if(index < -128)
index = -128;
return arcsineLUT1[index - -128];
}
#endif

This file is not included anywhere else in my program.

The file that include it is (ADXL345.h)

Code:

#ifndef ADXL_h
#define ADXL_h

#include "WProgram.h"
#include <Wire.h>
#include <arcsineLUT.h>
// Lots of #defines

class cADXL345
{
public:
//various different member functions and variables

private:
//various different member functions and variables
};

#endif // ADXL345_h


The corresponding cpp file is

Code:
#include "WProgram.h"
#include "ADXL345.h"
//various different member functions that don't use arcsineLUT.h.

//The function that uses arcsineLUT.h stripped of irrelevant code.
void cADXL345::phiTheta()
{

theta = arcsineLUTFunc((char)(128*x)/xs);
phi    = arcsineLUTFunc((char)(128*y)/ys);

}
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have solved the problem.

The array and function needed to go into a .cpp file and the function prototype in the .h file.
Logged

Pages: [1]   Go Up
Jump to: