Autor Tema: problema con dsp.h (undefined reference) (RESUELTO)  (Leído 7686 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
problema con dsp.h (undefined reference) (RESUELTO)
« en: 20 de Enero de 2012, 15:54:06 »
Hola a todos:

Nuevamente acudo a ustedes con una duda. Estoy trabajando con un dsPIC33EP512MC810 en C30, planeo utilizar la libreria dsp.h . Esta ya la he utilizado anteriormente con las familias 30 y 33 sin mayores problemas. Sin embargo en cuanto intento utilizar la misma libreria con este dsPIC obtengo problemas por el linkeado. EL error que me da MPLAB C30 esel siguiente:

Citar
E:\Archivos Fernando\DSPICS\DSPIC33\ADC_dspic33e\codigo.c:55: undefined reference to `MatrixMultiply'
Link step failed.

He agregado los archivos de libreria libdsp-coff.a, libdsp-elf.a, libq-coff.a, libq-elf.a, libq-dsp-coff.a y  libq-dsp-elf.a que son los cuales genearlente hago que funciones las librerias dsp.h y libq.h sin embargo ahora no puedo. Alguien tiene una idea al respecto?

saludos!
« Última modificación: 13 de Febrero de 2012, 13:48:00 por fram_22 »

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: problema con dsp.h (undefined reference)
« Respuesta #1 en: 24 de Enero de 2012, 12:40:34 »
alguien alguna idea  :shock:? Ya puse una solicitud de servicio en microchip pero aun nada.

saludos!

Desconectado ema

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1078
Re: problema con dsp.h (undefined reference)
« Respuesta #2 en: 24 de Enero de 2012, 18:37:46 »
Hola fram!

Imagino que para que alguien te pueda ayudar tienes que dar mas detalles de tu código. (Por ejemplo, en el archivo "codigo.c" es imposible imaginar que tienes ahi, y probablemente el error venga de ese archivo)

Saludos y explicate mejor para tener una respuesta.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: problema con dsp.h (undefined reference)
« Respuesta #3 en: 24 de Enero de 2012, 18:43:23 »
el problema que tienes es que en la linea 55 de codigo.c la funcion que has puesto no existe, lo unico que no se es si esa funcion la trae alguna libreria o algo...

has puesto el #include <p33Exxxx.h> ?
« Última modificación: 24 de Enero de 2012, 18:45:49 por MerLiNz »

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: problema con dsp.h (undefined reference)
« Respuesta #4 en: 24 de Enero de 2012, 22:09:00 »
Hola fram!

Imagino que para que alguien te pueda ayudar tienes que dar mas detalles de tu código. (Por ejemplo, en el archivo "codigo.c" es imposible imaginar que tienes ahi, y probablemente el error venga de ese archivo)

Saludos y explicate mejor para tener una respuesta.

Tienes razón olvide poner el código. La aplicación que pienso realizar es un Control de Voltaje Orientado con Flujo Virtual (VF-VOC). De hecho este código (con algunos cambios para adecuarlo) ya lo probe en un dspic33fj128mc802 y funciona a la perfección, por ello se que el error es más que nada del linker. Pero me gustaria implementarlo en un dspic33e a 60 MIPS, porque posteriomente planeo realizar calculo intensivo. De cualquier forma lo pongo a continuación:

Código: [Seleccionar]
#include <p33EP512MU810.h> 
#include <dsp.h>
#include "libq.h"
////////////////////////////////////////////////////////Fusibles de operacion/////////////////////////////////////////////////////////////
        _FOSCSEL(FNOSC_FRC);
        _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);
        _FWDT(FWDTEN_OFF);
// Number of locations for ADC buffer =  (AN0 to AN5) x 1 = 6 words
__eds__ int BufferA[14][8] __attribute__((eds,space(dma),aligned(256)));
///////////////////////////////////////////////////////Funciones///////////////////////////////////////////////////////////////////////
void initAdc1(void);
void initTmr3(void);
//
fractional A[250],B[250],C[250],alfa[250],beta[250],dummy;
_Q15 clarke[3][3],alfa_beta[3],abc[3],dos_tercios;
int muestras=0,bandera=0,i=1;
///////////////////////////////////////////////////////////MAIN///////////////////////////////////////////////////////////////////////
int main(void){
//Cambio de oscilador RC a xtal con PLL para operacion a 40 MIPS
// Configure PLL prescaler, PLL postscaler, PLL divisor
PLLFBD=58;// M = 32
CLKDIVbits.PLLPOST=0;// N2 = 2
CLKDIVbits.PLLPRE=0;// N1 = 2
// Disable Watch Dog Timer
RCONbits.SWDTEN=0;
// Initiate Clock Switch to Primary Oscillator with PLL (NOSC = 0b011)
__builtin_write_OSCCONH(0x03);
__builtin_write_OSCCONL(0x01);
// Wait for Clock switch to occur
while (OSCCONbits.COSC != 0b011);
// Wait for PLL to lock
while(OSCCONbits.LOCK!=1) {};
///////////////////////////////////////////////  Aqui termina la conficuracion del dsPIC a 40 MIPS//////////////////////////////////////////
////////////////////////////////////////////////Entrada perifericos/////////////////////////////////////////////////////////////
initAdc1();
initTmr3();
/////////////////////////////////////////////////inicializacion
/*dos_tercios=_Q15ftoi(0.66666666666);
clarke[0][0]=_Q15cosPI(0);
clarke[0][1]=_Q15cosPI(_Q15sub(0,dos_tercios));
clarke[0][2]=_Q15cosPI(_Q15add(0,dos_tercios));
clarke[1][0]=_Q15sinPI(0);
clarke[1][1]=_Q15sinPI(_Q15sub(0,dos_tercios));
clarke[1][2]=_Q15sinPI(_Q15add(0,dos_tercios));
clarke[2][0]=_Q15ftoi(0.5);
clarke[2][1]=_Q15ftoi(0.5);
clarke[2][2]=_Q15ftoi(0.5);*/
////////////////////////////////////////////////////////Ciclo infinito//////////////////////////////////////////////////////////
while(1){
if(bandera==1){
for(i=0;i<150;i++){
abc[0]=A[i];
abc[1]=B[i];
abc[2]=C[i];
MatrixMultiply(3,3,1,alfa_beta,clarke,abc);
alfa[i]=alfa_beta[0];
alfa[i]=alfa_beta[0];
}
bandera=0;
}
}
}
//
/////////////////////////////////////////////////////////Subrutinas de interrupcion y configuracion//////////////////////////////////////
void initAdc1(void)
{
AD1CON1bits.FORM   = 3; // Data Output Format: Signed Fraction (Q15 format)
AD1CON1bits.SSRC   = 2; // Sample Clock Source: GP Timer starts conversion
AD1CON1bits.ASAM   = 1; // ADC Sample Control: Sampling begins immediately after conversion
AD1CON1bits.AD12B  = 0; // 10-bit ADC operation
AD1CON1bits.SIMSAM=1;

AD1CON2bits.CSCNA = 0; // Scan Input Selections for CH0+ during Sample A bit
AD1CON2bits.CHPS  = 2; // Converts CH0, Ch1 and Ch2

AD1CON3bits.ADRC = 0; // ADC Clock is derived from Systems Clock
AD1CON3bits.ADCS = 63; // ADC Conversion Clock Tad=Tcy*(ADCS+1)= (1/40M)*64 = 1.6us (625Khz)
// ADC Conversion Time for 10-bit Tc=12*Tab = 19.2us

AD1CON1bits.ADDMABM = 0; // DMA buffers are built in scatter/gather mode
AD1CON2bits.SMPI    = 3; // interrupt every 4 convertions
// AD1CON4bits.DMABL   = 3; // Each buffer contains 8 words
AD1CON4bits.ADDMAEN = 0; // Conversion results stored in ADCxBUF0 to ADCxBUFF registers
AD1CHS0bits.CH0SA=2; //Channel 0 positive input is AN2
AD1CHS123bits.CH123SA=1; //

//AD1CSSH/AD1CSSL: A/D Input Scan Selection Register
AD1CSSH = 0x000F;
ANSELB = 0x003C;
TRISBbits.TRISB2 = 1;
TRISBbits.TRISB3 = 1;
TRISBbits.TRISB4 = 1;
TRISBbits.TRISB5 = 1;

IPC3bits.AD1IP=7; //CH1 positive input is AN3, CH2 positive input is AN4, CH3 positive input is AN5
IFS0bits.AD1IF   = 0; // Clear the A/D interrupt flag bit
IEC0bits.AD1IE   = 1; // Do Not Enable A/D interrupt
AD1CON1bits.ADON = 1; // Turn on the A/D converter
}
//
void initTmr3(void)
{
TMR3 = 0x0000;
PR3  = 1000; // Trigger ADC1 every 125usec
IFS0bits.T3IF = 0; // Clear Timer 3 interrupt
IEC0bits.T3IE = 0; // Disable Timer 3 interrupt
T3CONbits.TON = 1; //Start Timer 3
}
//
void __attribute__((interrupt, no_auto_psv)) _AD1Interrupt(void)
{
A[muestras]=ADC1BUF0;
B[muestras]=ADC1BUF1;
C[muestras]=ADC1BUF2;
dummy=ADC1BUF3;
muestras++;
if(muestras>=250){
muestras=0;
bandera=1;
}
IFS0bits.AD1IF = 0; // Clear the ADC1 Interrupt Flag
}


La linea que meda problema es como dice merlinz la siguiente:

Código: [Seleccionar]
MatrixMultiply(3,3,1,alfa_beta,clarke,abc);
Este operacion matricial viene definida en el archivo dsp.h. Ya la he utilizado previamente en otros dsPICs sin mayores problemas (30f3011 y 33fj128mc802). Por ello se que la función esta siendo utilizada correctamente.

Para utilizar generalmente las funciones  de dsp.h y de libq.h hay que agregar los archivos libdsp-coff.a, libdsp-elf.a, libq-coff.a, libq-elf.a, libq-dsp-coff.a y  libq-dsp-elf.a. |Estos ya los agregue pero aun asi me carca el error de linker.

Por lo anterior parece ser que es un error propio por utilizar un dspic33e. Por ello acudo a uds. Para ver si alguien tiene alguna idea sobre loque pueda estar pasando.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: problema con dsp.h (undefined reference)
« Respuesta #5 en: 24 de Enero de 2012, 23:10:49 »
parece como si te faltase la libreria objeto ya que te da error al linkear
« Última modificación: 24 de Enero de 2012, 23:16:27 por MerLiNz »

Desconectado ema

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1078
Re: problema con dsp.h (undefined reference)
« Respuesta #6 en: 24 de Enero de 2012, 23:59:34 »
Hola de nuevo!

Te comento que me parece te falto colocar la linea:
Código: [Seleccionar]
extern fractional* MatrixMultiply (
   int numRows1,
   int numCols1Rows2,
   int numCols2,
   fractional* dstM,
   fractional* srcM1,
   fractional* srcM2
);

Espero que te sea útil.

Saludos
« Última modificación: 25 de Enero de 2012, 11:05:42 por ema »

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: problema con dsp.h (undefined reference)
« Respuesta #7 en: 25 de Enero de 2012, 12:50:29 »
HOla muchas gracias por sus respuestas. originalment yo tambien he pensado en la libreria faltante, pero no he logrado dar cual es. Mientras voy a intentar al idea de ema. Esperemos funcione.

saludos!

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: problema con dsp.h (undefined reference)
« Respuesta #8 en: 25 de Enero de 2012, 12:55:41 »
Hola:

He intentado declarar la funciona como external, tal y como sugirio ema. Pero no ha cambiado nada  :shock:. Apararentemente debe ser algun archivo faltante. Lo extraño es que no logro encontrar nada al respecto. Los de microchip siguen sin contestar el ticket que solicite. Mientras seguire haciendo la lucha. Cualquier idea es biencenida y se las agradecere profundamente.

saludos!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema con dsp.h (undefined reference)
« Respuesta #9 en: 25 de Enero de 2012, 12:59:56 »
Como dice MerLiNz, puede ser que para ese microcontrolador la biblioteca no esté completa y no esté esa función. Si no tienes la ultima versión de C30 prueba actualizándolo.



Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: problema con dsp.h (undefined reference)
« Respuesta #10 en: 25 de Enero de 2012, 16:48:27 »
no hace falta que lo pongas como external, te esta dando error el linkeador no el compilador, es decir tu lo tienes declarado pero la funcion no existe a la hora de enlazar las funciones.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema con dsp.h (undefined reference)
« Respuesta #11 en: 25 de Enero de 2012, 17:42:17 »
Otra que te queda es reunir en el proyecto los archivos fuente de dsp.h, para así crear los archivos object que te están faltando (seguramente) en la librería.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: problema con dsp.h (undefined reference)
« Respuesta #12 en: 26 de Enero de 2012, 04:00:53 »
Gracias por sus respuesta.

Yo tambien estaba temiendo que se trata de soporte incompleto. (Lo cual parece logico si consideramos que estos dispositivos tienen meses).
La idea  de suki suena interesante pero no estoy muy seguro de como hacerlo. Podrias explicar con un poco0 de mas detalle?

saludos!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema con dsp.h (undefined reference)
« Respuesta #13 en: 26 de Enero de 2012, 12:49:14 »
Gracias por sus respuesta.

Yo tambien estaba temiendo que se trata de soporte incompleto. (Lo cual parece logico si consideramos que estos dispositivos tienen meses).
La idea  de suki suena interesante pero no estoy muy seguro de como hacerlo. Podrias explicar con un poco0 de mas detalle?

saludos!

Buscar los archivos .c o .s de las funciones que necesitas implementar y agregarlas al proyecto (tal como haces con el *.h)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: problema con dsp.h (undefined reference) (RESUELTO)
« Respuesta #14 en: 13 de Febrero de 2012, 13:51:37 »
Finalmente el problema resulto ser una tonteria.
Baje la version mas nueva de c30 y el archivo compilo perfectamente.

saludos!


 

anything