Autor Tema: Reservar espacio de memoria en XC16  (Leído 4894 veces)

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

Desconectado seba85

  • PIC10
  • *
  • Mensajes: 28
Reservar espacio de memoria en XC16
« en: 19 de Septiembre de 2013, 09:00:07 »
Hola! Alguien sabe como reservar espacios de memoria en XC16? estoy haciendo un programa parte en assembler y parte en C y puede ser que se me estén pisando los espacios de  memoria cuando declaro las variables en C....
Gracias!

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Reservar espacio de memoria en XC16
« Respuesta #1 en: 19 de Septiembre de 2013, 09:22:53 »
En C se usa la función malloc() para reservar memoria. Sin embargo, eso lo administra el compilador y no creo que puedas saber específicamente qué espacios de memoria está usando.
Sé que en CCS hay varias directivas de compilador para administrar el uso de memoria, pero desconozco si las hay en XC. Esperemos la respuesta de los que saben.

Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Reservar espacio de memoria en XC16
« Respuesta #2 en: 19 de Septiembre de 2013, 09:27:57 »
no es necesario reservar nada, el compilador se encarga de asignar memoria a cada variable, aun asi si quieres asignar manualmente memoria lo tienes que hacer con __attribute__(address(direccion))

Desconectado seba85

  • PIC10
  • *
  • Mensajes: 28
Re: Reservar espacio de memoria en XC16
« Respuesta #3 en: 19 de Septiembre de 2013, 09:39:16 »
Gracias por responder!!!
Si en CCS se que se puede reservar un bloque y uno le da la dirección de inicio y final del bloque, y algo así es lo que ando buscando...
pero gracias igual ya tengo algo por donde empezar, cualquier avance se los comento!
Saludos!

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re: Reservar espacio de memoria en XC16
« Respuesta #4 en: 19 de Septiembre de 2013, 11:06:05 »



Mírate la documentación del Linker Script, se pueden hacer muchas cosas relacionadas con la reserva de bloques de memoria.




Desconectado seba85

  • PIC10
  • *
  • Mensajes: 28
Re: Reservar espacio de memoria en XC16
« Respuesta #5 en: 20 de Septiembre de 2013, 10:56:28 »
Estuve intentando usar la declaración:
fractional x[11] __attribute__((address(0x0900)));
pero cuando compilo me sale como que lo ignora...
warning: ignoring address attribute applied to automatic x
« Última modificación: 20 de Septiembre de 2013, 11:51:25 por seba85 »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Reservar espacio de memoria en XC16
« Respuesta #6 en: 20 de Septiembre de 2013, 14:18:07 »
debes quitar la opcion de organizacion automatica de direcciones

Desconectado seba85

  • PIC10
  • *
  • Mensajes: 28
Re: Reservar espacio de memoria en XC16
« Respuesta #7 en: 20 de Septiembre de 2013, 16:09:01 »
y eso como lo hago, me mataste...jeje
en la programación de los fuses esta?

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Reservar espacio de memoria en XC16
« Respuesta #8 en: 20 de Septiembre de 2013, 16:18:38 »
y eso como lo hago, me mataste...jeje
en la programación de los fuses esta?

No, eso es una opción del compilador. Lee el manual del XC, la sección "Auto Variable Allocation"

Saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado seba85

  • PIC10
  • *
  • Mensajes: 28
Re: Reservar espacio de memoria en XC16
« Respuesta #9 en: 24 de Septiembre de 2013, 10:27:02 »
gracias gera! ya encontré como hacerlo y me coloca las variables donde quiero pero ahora tengo otro problema, no me realiza las funciones dsp en assembler MPY y MAC
cargo dos vectores en las posiciones de memoria x e y pero no me las realiza, no se si estoy errando en alguna configuración del dsp o como declaro los vectores en las posiciones x e y....

Código: [Seleccionar]
static fractional x[11] __attribute__((address(0x0900)));  //memoria X
static fractional h[2] __attribute__((address(0x0C00)));   //memoria Y
.
.
.
asm("MOV #0x0916,W9");
        asm("MOV #0x0900,W8");
        asm("MOV [W8],W4");
        asm("MOV #0x0C02,W10");
        asm("MOV [W10],W6");
        asm("DO #9,ENDB");
        asm("MPY W4*W6,A,[W8]+=2,W4,[W10]-=2,W6");
        asm("MAC W4*W6,A,[W8],W4,[W10]+=2,W6");
        asm("SAC.R A,#0,[W9++]");
        asm("ENDB: NOP");


Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Reservar espacio de memoria en XC16
« Respuesta #10 en: 24 de Septiembre de 2013, 11:39:27 »
asm("MOV #0x0C02,W10"); es 0x0c00? o es que decrementa?

Desconectado seba85

  • PIC10
  • *
  • Mensajes: 28
Re: Reservar espacio de memoria en XC16
« Respuesta #11 en: 24 de Septiembre de 2013, 13:58:06 »
el programa hace la derivad digital, en 0x0C00 y 0x0C02 tenemos el 1 y -1 (en fraccional 0x7FFF y 0xFFFF) para obtener la derivada digital de una señal x se debe hacer la convolucion con la señal h=[1 -1] (en teoría de Señales y Sistemas), que sería restarle a la muestra actual la anterior. Entonces haría lo siguiente:

MPY-->  x[0]*h[1]=A
MAC--> A+x[1]*h[0]=A
esto nos da la primera derivada digital
luego
MPY-->  x[1]*h[1]=A
MAC-->  A+x[2]*h[0]=A  
segunda derivada digital... etc
y va guardando el acumulador A en un buffer a partir de la posicion 0x0916
« Última modificación: 24 de Septiembre de 2013, 14:04:22 por seba85 »


 

anything