Autor Tema: duda de principiante acerca de las operaciones matemáticas en los dspics.  (Leído 4386 veces)

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

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
hola, tengo una duda con los dspics a la hora de hacer operaciones. Estos tienen un juego de instrucciones específicas para hacer operaciones matemáticas y normalmente son en ensamblador, por eso mi duda es: si programo en c30, y quiero hacer una operación matemática (una simple multiplicación por ejemplo), se supone que el compilador se encarga de hacerlo de la manera óptima?

Si hago por ejemplo:

c=a*b //(donde se supone que todos son floats)

el compilador lo hace utilizando su recurso más adecuado?
o por el contrario es equivalente a hacer la misma instruccion en un pic18f utillizando el c18?

A lo mejor me he liado demasiado para preguntar algo que es sencillo, lo que quiero es saber si el c30 optimiza la forma de hacer las operaciones matemáticas utillizando los recursos más adecuados del dspic.

saludos.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: duda de principiante acerca de las operaciones matemáticas en los dspics.
« Respuesta #1 en: 29 de Octubre de 2010, 11:52:48 »
No, esa operación invoca a las instrucciones MCU y no a las DSP.

Para echar a andar el motor DSP debes hacer uso de las funciones __builtin_funcion() y usar números fraccionales formato 1.15 (o enteros).

Por ejemplo, una multiplicación DSP se hace así...

Código: [Seleccionar]
fractional d, e, f;

   e = Q15(0.25); //0.25
   f = Q15(0.5); //0.5

register int result asm("A"); //usa acumulador A

//ni * n2 sin prefetches
result = __builtin_mpy(n1, n2, 0, 0, 0, 0, 0, 0);

d = __builtin_sac(result, 0); //regresa el MSB de A

Las operaciones DSP se pueden hacer con signo o sin signo. Para ello debes jugar con el registro CORCON.

Para convertir números reales a fraccionales usas Q15() o como yo lo hago, uso mi conversor SL Q15 Tool.
http://www.migsantiago.com/index.php?option=com_content&view=article&id=20:sl-q15-tool&catid=2:articulo&Itemid=27

Desconectado fram_22

  • PIC18
  • ****
  • Mensajes: 316
Re: duda de principiante acerca de las operaciones matemáticas en los dspics.
« Respuesta #2 en: 02 de Noviembre de 2010, 10:53:16 »
Tambien puede utilizar la libreria libq.h esta cuenta con un amplio espectro de oepraciones matemáticas integradas.
Estas incluyen operaciones aritméticas´y trigonométricas de 16 y 32 bits. A mi me han sido de gran utilidad y creo que es
una forma sencilla de comenzar.

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
Re: duda de principiante acerca de las operaciones matemáticas en los dspics.
« Respuesta #3 en: 08 de Noviembre de 2010, 20:28:02 »
Tambien puede utilizar la libreria libq.h esta cuenta con un amplio espectro de oepraciones matemáticas integradas.
Estas incluyen operaciones aritméticas´y trigonométricas de 16 y 32 bits. A mi me han sido de gran utilidad y creo que es
una forma sencilla de comenzar.

en lugar de la que tú mencionas he encontrado la "math.h", pero he observado que llama a otra función predefinida de esta forma:
#define sin __MPROTO(sin)

y digo yo... no será la __MPROTO(sin) una buildin function para la función seno?  Si es asi, fenomenal, aunque pensandolo bien... no creo, sería difícil que tuviese una función específica para funciones trigonométricas.

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
Re: duda de principiante acerca de las operaciones matemáticas en los dspics.
« Respuesta #4 en: 13 de Diciembre de 2010, 19:40:51 »
Tambien puede utilizar la libreria libq.h esta cuenta con un amplio espectro de oepraciones matemáticas integradas.
Estas incluyen operaciones aritméticas´y trigonométricas de 16 y 32 bits. A mi me han sido de gran utilidad y creo que es
una forma sencilla de comenzar.

en lugar de la que tú mencionas he encontrado la "math.h", pero he observado que llama a otra función predefinida de esta forma:
#define sin __MPROTO(sin)

y digo yo... no será la __MPROTO(sin) una buildin function para la función seno?  Si es asi, fenomenal, aunque pensandolo bien... no creo, sería difícil que tuviese una función específica para funciones trigonométricas.

hola, recupero este post ya que no he conseguido aclarar mi duda. He utilizado la librería "math.h", esta vez para averiguar si un punto está o no dentro de una circunferencia (las coordenadas del punto las definen dos potenciometros conectados al cad del pic. Y he observado que el cálculo es instantáneo, y me surge la duda de si la librería math.h utiliza funciones builtin o funciones software. Viendo las tripas de esta librería he observado que llama una otra función llamada __MPROTO(). Po ejemplo para la función seno llama a la función __MPROTO(sin). Entonces no me queda muy claro si es que hace el cálculo mediante software o mediante las funciones del dspic.

un saludo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: duda de principiante acerca de las operaciones matemáticas en los dspics.
« Respuesta #5 en: 14 de Diciembre de 2010, 12:00:33 »
Entonces no me queda muy claro si es que hace el cálculo mediante software o mediante las funciones del dspic.

un saludo.

Puedes usar el View Disassembly List y ver el código ASM. Buscas las instrucciones en el manual y ahí defines si son instrucciones CPU o instrucciones dsPIC.