jueves, 13 de agosto de 2009

Duda al modificar el toolchain de sdcc

Este es otro post que coloque en el Foro activo de herramientas Linux para programacion de PICS
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Saludos a toda la comunidad, me presento y agradezco de antemano los esfuerzos que son realizados por la comunidad para manejar micros desde totalmente S.L. bounce

Bien mi duda es la siguiente, estoy comenzando a trabajar con un PIC18F2550, con piklab y un programador Pickit2, pues bien la comunicación entre el piklab y el pickit2 esta muy bien y reconoce y lee muy bien el micro que tengo, ahora bien, leyendo en el foro, me encontre con el caso siguiente


Problema con la libreria delay en los 18F


Fernan el Vie 9 Ene 2009 - 19:38Si uso la libreria Include con el 18f4520 :
#include "pic18f4520.h"
#include "delay.h"

// initialize board
void init_board(void) {
ADCON1=0x7; // PORTA used for digital I/O
TRISBbits.TRISB0=0; // configure PORTB0 for output (right LED)
TRISBbits.TRISB1=0; // configure PORTB1 for output (right LED) ....




bien vi que habia un problema con la libreria libc18f.lib, el compañero arcachofo le recomendo lo siguiente


De todas formas fíjate en la linea de ejecución del linker.. creo que
los delays estan en libc18f.lib, si no aparece quizás tengas que
añadirla para que la incluya, para esto en: opciones del proyento -
toolchain -linker, tendrías que añadir una linea para que incluya
libc18f.lib



Bien pues entre ahi, y en efecto, el toolchain del linker permite dos opciones una automatica, la cual permite añadir carpetas y una que es personalizada; en el caso de la personalizada la linea de comandos del piklab me pone la siguiente línea


-m%FAMILY -%DEVICE -V --debug -Wl-c -Wl-m $LKR(-Wl-s%LKR) -I$(SRCPATH) -o%O %OBJS %LIBS



de lo que vi en la ayuda, los parametros que se pasan son la familia, el dispositivo a usar, el linker a usar, incluir el lugar del codigo fuente dar las salidas, los archivos objeto y las librerias extras Rolling Eyes

Sin embargo al dar clik en Construir- compilar archivo lo que obtengo es lo siguiente


sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
reloj.asm:20: error: Symbol not previously defined (_delay1kcy).
reloj.asm:311: error: Symbol not previously defined (_delay1kcy).
reloj.asm:311: error: Symbol not previously defined (_delay1kcy).

+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/reloj_test/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/reloj_test/" "reloj.c"
reloj.c:41: warning 112: function 'delay1kcy' implicit declaration
reloj.c:41: warning 84: 'auto' variable 'delay1kcy' may be used before initialization
reloj.c:41: warning 84: 'auto' variable 'delay1kcy' may be used before initialization

+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL -Dpic18f2550 -D__18F2550 -DSTACK_MODEL_SMALL -g -c "reloj.asm" -o "reloj.o"
+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL -Dpic18f2550 -D__18F2550 -DSTACK_MODEL_SMALL -g -c "reloj.asm" -o "reloj.o" returned errorcode 256

*** Salida con estado: 1 ***

confused confused confused confused confused

segui leyendo el hilo y pues vi que habria que integrar en la linea de comando del toolchain a la libreria a utilizar, de acuerdo a arcahofo y continuando con la lectura, nuestro compañero Fernan logro echar a funcionar su programa, y ya que ellos modificaron el toolchain, pues fui de nuevo a las opciones de proyecto del piklab y esta vez elegí la opción personalizada para el toolchain.


"/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16"
-I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o led.hex led.o crt0i.o
libc18f.lib pic18f4520.lib libsdcc.lib



modificandola por esta, que no se si este bien, bueno de hecho no esta bien por que los resultados obtenidos al construir el proyecto, no fueron satisfactorios Sad


"/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16"
-I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o%O %OBJS
libc18f.lib pic18f2550.lib libsdcc.lib



Sin embargo el resultado que obtengo es el mismo



sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
reloj.c:41: warning 112: function 'delay1kcy' implicit declaration
reloj.c:41: warning 84: 'auto' variable 'delay1kcy' may be used before initialization
reloj.c:41: warning 84: 'auto' variable 'delay1kcy' may be used before initialization
reloj.asm:20: error: Symbol not previously defined (_delay1kcy).
reloj.asm:311: error: Symbol not previously defined (_delay1kcy).
reloj.asm:311: error: Symbol not previously defined (_delay1kcy).

+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/reloj_test/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/reloj_test/" "reloj.c"
+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL -Dpic18f2550 -D__18F2550 -DSTACK_MODEL_SMALL -g -c "reloj.asm" -o "reloj.o"
+ "/usr/bin/gpasm" -DSDCC_MODEL_SMALL -Dpic18f2550 -D__18F2550 -DSTACK_MODEL_SMALL -g -c "reloj.asm" -o "reloj.o" returned errorcode 256

*** Salida con estado: 1 ***



Bien el sistema que tengo actualmente es ubuntu 9.04, el piklab que tengo es 0.15.4, es sdcc es el que viene por defecto en ubuntu
sdcc -v
SDCC : avr/pic16/pic14/xa51 2.8.0 #5117 (Jun 2 2008) (UNIX)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Saludos, bien pues siguiendo con esto, Very Happy segui con la investigación, y aún no me es posible echar a andar el problema que tengo, sin embargo en la red me encontre la siguiente pagina,AQUI y en esta da una explicacion buena sobre sdcc y propone un ejemplo sencillo para un PIC18F452, y bueno supongo que ya tiene mucho tiempo, puesto que hace un uso de la captura de un archivo ctr0.o y luego hay que implementar un make file, esta paso a paso. pero bueno, el caso es que probe este código para el micro que estoy usando y quedo el código de la siguiente manera
Código:

//hello.c
// fuente: http://www.freenet.org.nz/sdcc/
//
// Este es un pequeño programa que parpadea un led

//Configuracion
//-----------------------------
//Cambia si tienes otro pin diferente a RA1
#include
#ifndef LED_TRIS
#define LED_TRIS TRISAbits.TRISA1
#endif

#ifndef LED_PIN
#define LED_PIN LATAbits.LATA1
#endif

//El siguiente include, jala a los correctos registros
//del archivo de definiciones

#include

//-------------------------------
//Una función de retardo simple

void delay_ms(long ms){
long i;
while(ms--){
for(i=0;i<330;i++)
;
}
}

//Nuestro punto de entrada
void main(void){
//poniendo como salida
ADCON1=0x07; // El puerto A se usa como I/O digital
LED_TRIS =0;
//generando un loop infinito
for(;;){
LED_PIN=0;
delay_ms(250);
LED_PIN=1;
delay_ms(250);
}
}


Lo curioso es que deje las opciones que por defecto trae el piklab y pues lo compilo bien Very Happy Very Happy cheers

sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/hola_mundo/ -c led.c
+ "/usr/bin/sdcpp" -nostdinc -Wall -std=c99 -I"/home/mike/PIC/hola_mundo/" -Dpic18f2550 -D__18f2550 -DSTACK_MODEL_SMALL -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic16 -D__pic16 -I"/usr/bin/../share/sdcc/include/pic16" -I"/usr/share/sdcc/include/pic16" -I"/home/mike/PIC/hola_mundo/" "led.c"
sdcc -mpic16 -p18f2550 -V --debug -Wl-c -Wl-m -I/home/mike/PIC/hola_mundo/ -ohola_mundo.hex led.o
using default linker script "/usr/share/gputils/lkr/18f2550.lkr"
+ "/usr/bin/gplink" -I"/usr/bin/../share/sdcc/lib/pic16" -I"/usr/share/sdcc/lib/pic16" -c -m -w -r -o hola_mundo.hex led.o crt0i.o pic18f2550.lib libsdcc.lib
*** Éxito ***
Parsing COFF file: /home/mike/PIC/hola_mundo/hola_mundo.cof
Device name: "18F2550"

ahora estoy en las pruebas de quemado y probar este pic albino

Bueno en esta etapa, ya no se tuvo éxito Crying or Very sad Crying or Very sad

Conectando Firmware PICkit2 2.x en Puerto USB con el dispositivo 18F2550...
Versión de firmware es 2.32.0
La versión de firmware (2.32.0) es más alta que la versión probada con Piklab (2.10.0). Podría experimentar problemas.
Read id for family 16X: 0x0
Read id for family 18F: 0x1246
Id leída: 18F2550 (rev. 6)
Establecer destino auto alimentado: true
Target Vdd = 4.99512 V
Target Vpp = 7.1042 V
Conectado.
Enter normal mode
Already in requested mode.
Programando memoria de dispositivo...
protected: code=false data=false
Borrando dispositivo
Escribir memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Verificar memoria: Memoria de código
start=0x000000 nbWords=0x004000 total=0x004000 force=false varOffset=false varSize=false
Memoria de dispositivo no coincide con archivo hex (en Memoria de código en dirección 0x000000: leído 0x000E esperando 0xEFE6).