• Jueves 2 de Mayo de 2024, 15:50

Autor Tema:  Leer Y Mandar Datos: Soft  (Leído 2180 veces)

Bixix

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Leer Y Mandar Datos: Soft
« en: Martes 8 de Marzo de 2005, 10:08 »
0
Hola!   :comp:

Parece que hardware está en marcha, pero lo de programar no es lo mio!!

Tengo un programa que funciona:  tiene un main.c donde incializa la función codec que está en codec.c y la de timer que está en timer.c

El programa  solo coge y emite la información, y  tiene dos buffers:

uno de entrada RXBUF y uno de salida TXBUF.
La transferencia de la información se hace en codec.c de esta forma:

void __attribute__((__interrupt__)) _DCIInterrupt(void) {
//static    float x[INSZ1], y[OUTSZ1];
 //int in_count;



  TXBUF0 = RXBUF0;
  TXBUF1 = RXBUF1;
  TXBUF2 = RXBUF2;
  TXBUF3 = RXBUF3;
  IFS2bits.DCIIF = 0;

(esto es lo que hace cuando se genera una interrupción.)

Viendo como cambian de valor las variables he descubierto que mientras que los valores de RXBUF cambian al meterle sonido, la igualdad no se cumple y el TXBUF siempre es 0x0000!!!!!!

Y el programa funciona!!! :o

Alguien me podría explicar esto?



Por otro lado tengo un soft que solo procesa la información y quiero integrarle un filtro..
No encuentro modo alguno!!
Tengo el código en C del filtro y tengo un programa que lee y emite la misma señal en mi tarjeta (devlopment target dsPIC30f6014..)

Ayuda..
GRACIAS  :)

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Leer Y Mandar Datos: Soft
« Respuesta #1 en: Miércoles 9 de Marzo de 2005, 02:41 »
0
Holas, puedo explicar el que no cambien los TXBUF y no se si es exactamente eso, pero talves sea el problema.. en C, las variables tienen un ciclo de vida.. eso que dices supuestamente se debe cumplir dentro de una funcion, y tu quieres ver los resultados fuera de esta.. el alcance de la reforma de las variables TXBUF es hasta que termina la funcion.. es decir.. los valores cambian, pero al salir de la funcion y retornar a la llamada, las variables TXBUF pierden el valor que tenian dentro de la funcion que las reformaba.. eso es porque C por defecto pasa datos entre variables "por valor" y no por referencia, donde especificas la direccion de memoria de la variable y esta es reformada de raiz.. talves no sea especificamente este el problema, pero te explico mas o menos como trata a sus variables el lenguaje C para PC.. pienso que para los microcontroladores no debe variar mucho.. para reformar los valores deberias usar punteros, asi le pasarias el valor a la variable "por referencia" .. es toda una historia ese tema.. lo ideal es un buen manual de C. .. si estoy equivocado por favor que me corrijan... hace rato que no toco este lenguaje :( . Un abrazo! :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

Platypus

  • Miembro activo
  • **
  • Mensajes: 63
    • Ver Perfil
Re: Leer Y Mandar Datos: Soft
« Respuesta #2 en: Miércoles 9 de Marzo de 2005, 18:26 »
0
Hola,  :hola:

tanto TXBUF como RXBUF son del tipo extern volatile unsigned int, en realidad son búferes de transmisión y recepción mapeados en memoria, y el modificador volatile supongo que se aplica porque el propio hardware es capaz de modificar el valor de la variable de forma independiente a la ejecución del programa. Para averiguar exactamente lo que sucede con TXBUF y por qué sólo eres capaz de leer el valor cero te recomiendo que leas la Sección 22 del dsPIC30F Family Reference Manual (ref DS70046) que explica detalladamente el funcionamiento del DCI. Creo haber leido algo sobre que los registros TXBUF se ponen a cero en algun momento, al iniciar la interrupción o al finalizar la transmisión, no se.

Para saber como trata C las variables así como aprender sobre punteros y demás, como dice © Jonathan ©, es recomendable tirar de un buen manual de C.

Saludos a todos. :)