Autor Tema: Usar toda la memoria de datos del PIC18F4550  (Leído 5161 veces)

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

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Usar toda la memoria de datos del PIC18F4550
« en: 01 de Septiembre de 2009, 22:37:33 »
Hola! Estoy teniendo problemas de memoria con mi 18f4550... se supone que dispongo 2k pero cuando compilo, me muestra lo siguiente

Memory Summary:
    Program space          used  3714h ( 14100) of  8000h bytes   ( 43.0%)
    Data space               used   2BBh  (   699) of   400h bytes   ( 68.3%)   ------->  1024 bytes  :(
    EEPROM space          used     0h    (     0) of    100h bytes   (  0.0%)
    ID Location space      used     0h     (     0) of     8h nibbles (  0.0%)
    Configuration bits      used     3h    (     3) of     7h words   ( 42.9%)


Supongo que el 1K de memoria de datos que me falta esta siendo asignada para el buffer del USB... que directiva deberia usar para hacer que el buffer del usb pase a ser parte de la memoria de datos?? Por las dudas, estoy usando el HI-TECH PICC-18

Gracias!!!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #1 en: 02 de Septiembre de 2009, 13:12:15 »
Hola

Seguramente estás incluyendo una librería de funciones USB que está apartando la memoria. Revisa todos tus includes, uno de ellos no debe estar ahí.

Si no lo encuentras puedes subir tu archivo principal para que lo revisemos.

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #2 en: 03 de Septiembre de 2009, 11:29:39 »
Hola migsantiago, gracias por responder!

Estuve revisando los include, y la verdad no encuentro nada que haga referencia al usb... lo unico que hago es incluir el htc.h este a su vez incluye las librerias para trabajar con el pic18f4550 (<pic18.h> y  <pic18f4550.h>) en las cuales no se toca la parte de onfiguracion de buffer... Sera que por defecto arranca todo dispuesto para que el micro use 1k de ram y el resto quede para buffer del usb?

Sera que hay que darle alguna directiva al compilador?

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #3 en: 03 de Septiembre de 2009, 11:34:49 »
Sube el archivo pic18f4550.h, capaz allí esta el problema.
No contesto mensajes privados, las consultas en el foro

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #4 en: 03 de Septiembre de 2009, 11:43:44 »
Ok Suky! Aca van!!

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #5 en: 03 de Septiembre de 2009, 12:43:43 »
Hola Richard, normalmente las definción del direccionamiento final es manejada por el linker con un archivo configurable ( normalmente llamado link control file ) que dependiendo del compilador puede ser con extension prm, lcg, def, etc y que en este se definen las regiones o segmentos de cada area ( RAM, SFR, ROM, etc ). Aunque no soy usuario de MicroChip y por ende de sus compiladores pero yo buscaria este archivo y me fijaria ahi la limitación.

Saludos !

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #6 en: 03 de Septiembre de 2009, 14:41:52 »
El archivo pic18f4450.h en las líneas 158 y 159 incluye una librería...

Código: [Seleccionar]
// Add structured and bitfield defs for USB endpoints and buffer descriptors
#include <usbregs18.h>

... esta librería seguramente aparta los bancos 4 al 7 de memoria como USB y no te permite usarlos como memoria de usuario.

Comenta la línea 159 y prueba.

Código: [Seleccionar]
// Add structured and bitfield defs for USB endpoints and buffer descriptors
//#include <usbregs18.h>

EDITO: Por cierto, tu tema habla del 4550 pero el archivo adjunto es el 4450... cualquiera que sea debes comentar la inclusión de la librería usbregs18.h.
« Última modificación: 03 de Septiembre de 2009, 14:44:43 por migsantiago »

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #7 en: 03 de Septiembre de 2009, 15:13:48 »
Hola, solo de chusma. Buscando en la net encontre algo parecido

Citar
The header file, provided with compiler has an issue.

I've commented out the following two lines in "usbregs18.h" file and now the project builds without problems:

Code:
--------------------------------------------------------------------------------

// Define 16 USB Endpoint controllers//volatile _USB_ENDPOINT_BITS _USB_ENDPOINT[15] @ ((unsigned)&UEP0);// Define 64 buffer descriptors//volatile _BUFFER_DESCRIPTOR_STRUCT _USB_DESCRIPTOR[64] @ 0x400;

Es tal cual lo que dice Mig, los descriptores se asignan al address 0x400, lo que me parece feisimo es uno tenga que modificar un header del fabricante y aca la culpa la tiene Hi-Tech porque deberia probeer una macro que lo haga automaticamente. Algo asi:

Código: C
  1. #ifndef __NO_USB_SUPPORT__
  2.  #include "usbregs18.h"
  3. #endif

Cosa que al momento de armar el proyecto pases o no esa macro sin tener que tocar el header, please corriganme si me equivoco.

Saludos !

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #8 en: 03 de Septiembre de 2009, 15:19:09 »
Gentes! antes que nada 1000 gracias por ponerse las pilas para darme una mano! Les comparto creo que pude resolver el problema, ahora consigo que me tire esto:

HI-TECH C PRO for the PIC18 MCU Family (Lite)  V9.63PL3
Copyright (C) 1984-2009 HI-TECH SOFTWARE
(1273) Omniscient Code Generation not available in Lite mode (warning)
Advisory[1233] Employing 18F4550 errata work-arounds:
Advisory[1234]  * Corrupted fast interrupt shadow registers

Memory Summary:
    Program space        used  3B3Eh ( 15166) of  8000h bytes   ( 46.3%)
    Data space           used   593h (  1427) of   800h bytes   ( 69.7%)
    EEPROM space         used     0h (     0) of   100h bytes   (  0.0%)
    ID Location space    used     0h (     0) of     8h nibbles (  0.0%)
    Configuration bits   used     3h (     3) of     7h words   ( 42.9%)

Lo que hice, fue agregar una directiva de compilacion que encontre en el manual de high tech

--ram=default,+400-7ff

Con eso, reservo memoria de datos... y ahora si entra el codigo... eso si... no se bien que es lo q hace esa directiva... supongo que dice que al default de memoria de datos, agregue, en este caso, 1K

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #9 en: 03 de Septiembre de 2009, 15:26:53 »
Hola Richard, por lo que se entiende eso es lo que hace la directiva ( lo que comentas vos ) es una forma un poco mas elegante que tocar el header, pero para mi gusto no me termina de convencer. Ojo no es contra uds, es contra HiTech.

Saludos !

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #10 en: 03 de Septiembre de 2009, 15:33:42 »
Hola Richard, por lo que se entiende eso es lo que hace la directiva ( lo que comentas vos ) es una forma un poco mas elegante que tocar el header, pero para mi gusto no me termina de convencer. Ojo no es contra uds, es contra HiTech.

Saludos !

Si, la verdad es algo asi como un parche... estaria bueno que sea algo mas elegante como vos decis... Ahora bien, con esto de la directiva tengo buenos resultados... estaba tratando de descomentar ya sea el include del usbregs18.h o bien las dos lineas que estan dentro de usbregs18.h q preseleccionan la ubicacion del buffer... pero con esto de descomentar, no estoy teniendo exito... cuando compilo, me tira error de falta de memoria. Asi que por ahora me quedo como funcional la opcion de la directiva...

Ahi vi un poco mejor lo que hace esa directiva. --ram=default,+400-7ff significa que al rango de memoria de datos por default, le agrega un rango mas, empezando en 400h y terminando en 7ff, rango que por defecto esta designado al buffer del usb :d


Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #11 en: 03 de Septiembre de 2009, 15:42:49 »
Ten cuidado al usar el archivo .h, el 4450 tiene menos memoria que el 4550.

Con solo comentar la librería usbregs18.h y no usar la directiva debería liberarte ram.

Desconectado richardjr

  • PIC12
  • **
  • Mensajes: 69
Re: Usar toda la memoria de datos del PIC18F4550
« Respuesta #12 en: 03 de Septiembre de 2009, 16:01:21 »
sisi!! Me equivoque yo al adjuntar el archivo, estaba usando el del 18f4550. El punto es que ni se entera que comento la inclucion de usbregs18.h , asi q por ahora me quedo con la opcion de la directiva --ram=default,+400-7ff

Gracias!