Autor Tema: introduccion de datos en memoria  (Leído 3093 veces)

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

Desconectado pinkfloyd

  • PIC10
  • *
  • Mensajes: 5
introduccion de datos en memoria
« en: 02 de Septiembre de 2008, 17:50:04 »
Hola a todos

Estoy trabajando con un dsPIC30F4011. Mi objetivo es un crear un PWM senoidal y para ello introduzco los valores de la funcion seno (de todo un periodo) en la memoria de datos X, y luego en cada interrupcion PWM voy leyendo los datos de esa tabla y opero con ellos para obtener el ciclo de trabajo. La cosa es que estoy trabajando con 64 valores de la funcion seno y me funciona bien, pero ahora me gustaria trabajar con 128 para tener mas precision. Al hacer esto me da problemas en la compilacion.

El codigo de introduccion de datos es el siguiente:

int sinetable[128] __attribute__ ((space(xmemory)))={...};

El error que me da es:

inverter2ccprueba.o: Link Error: Could not allocate section .nbss, size = 10 bytes, attributes = bss near
Link Error: Could not allocate data memory

No lo entiendo muy bien. ¿Alguien me podria dar una solucion? Con 64 valores me funciona bien.

Muchas gracias


Conectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: introduccion de datos en memoria
« Respuesta #1 en: 03 de Septiembre de 2008, 02:05:59 »
Imagino que usas MPLAB.
Si es así, vete al menú Project->Build options->Project.
Ahora abre la pestaña MPLAB C30 y elige en el desplegable "Categories" la opción Memory Model.
En la sección Data Model elige "Large data model".

En teoría con eso se resuelve.

Por cierto, supongo que lo sabes, pero por si acaso. Si metes en la tabla los valores de sólo un cuadrante (de 0º a 90º) puedes obtener los de todo el recorrido (90º a 360º) con una sencilla operación.

Desconectado pinkfloyd

  • PIC10
  • *
  • Mensajes: 5
Re: introduccion de datos en memoria
« Respuesta #2 en: 03 de Septiembre de 2008, 03:57:02 »
Hola

Muchas gracias, pero he probado eso y me sigue saliendo el mismo error.

En cuanto a lo de trabajar con valores del primer cuadrante solo, no es tan facil, porque estoy haciendo un PWM trifasico, y en la misma interrupcion, debo añadir al puntero un offset de 120º y otro de 240º. Ademas se debe recorrer toda la tabla de valores y volver a empezar una y otra vez, y poniendo una tabla completa es mucho mas comodo.

Pero muchas gracias por tu atencion!



Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: introduccion de datos en memoria
« Respuesta #3 en: 04 de Septiembre de 2008, 22:43:59 »
¿¿Porque escribes datos en el área de memoria X ... ??

Porque no simplemente:

int sinetable[128];

Y el compilador buscará la mejor forma de ubicar esa tabla en RAM; eso y con el consejo del señor NOCTURNO debería de funcionar ... yo he hecho tablas de 1024 datos y funciona perfecto.

Saludos!
Control Automático, DSP & Microcontroladores

Desconectado pinkfloyd

  • PIC10
  • *
  • Mensajes: 5
Re: introduccion de datos en memoria
« Respuesta #4 en: 05 de Septiembre de 2008, 13:35:50 »
Hola,

he metido

int sinetable[128]={dato1,dato2,...,...};

y me sigue dando el mismo error, no tengo ni idea.

Gracias



Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
Re: introduccion de datos en memoria
« Respuesta #5 en: 05 de Septiembre de 2008, 14:55:44 »
No sea que no tengas 128 valores , quizas asi

int sinetable[]={dato1,dato2,...,...};

Desconectado pinkfloyd

  • PIC10
  • *
  • Mensajes: 5
Re: introduccion de datos en memoria
« Respuesta #6 en: 06 de Septiembre de 2008, 11:18:50 »
Hola de nuevo y gracias por vuestra colaboracion

Lo he intentado tambien asi

 int sinetable[]={dato1,dato2,...,...}

y me sigue saliendo el mismo error.
Al final lo dejare con 64 valores, pero no se que puede estar pasando

Conectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: introduccion de datos en memoria
« Respuesta #7 en: 06 de Septiembre de 2008, 11:57:01 »
¿Puedes poner aquí tu programa y tu proyecto de MPLAB para intentar compilarlo?

Desconectado blackcat

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 600
Re: introduccion de datos en memoria
« Respuesta #8 en: 06 de Septiembre de 2008, 20:33:22 »
Ya que la tabla es estatica, es decir, no será modificada durante la ejecución del programa porque no la creas como una tabla de constantes, de esta manera el compilador la ubicará en la memoria de programa y no en la de datos;

const int sinetable[]={dato1,dato2,...,...}

Saludos!!
Control Automático, DSP & Microcontroladores

Desconectado pinkfloyd

  • PIC10
  • *
  • Mensajes: 5
Re: introduccion de datos en memoria
« Respuesta #9 en: 07 de Septiembre de 2008, 08:16:55 »
Muchas gracias!!

Nocturno, no habia puesto mi programa, porque he utilizado el Visual Initializer, que genera el codigo en ensamblador y el resto del programa en C y resultaba un poco follon, pero con el consejo de blackcat ya lo he arreglado y me compila bien. Mañana en el laboratorio lo probare a ver si consigo obtener una onda senoidal mejor o en cambio tampoco se nota mucho.

Gracias de nuevo a todos!!


 

anything