Microcontroladores PIC en Linux.
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

duda al modificar el toolchain de sdcc en piklab

4 participantes

Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty duda al modificar el toolchain de sdcc en piklab

Mensaje por maigke Dom 26 Abr 2009 - 21:59

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


librerias - duda al modificar el toolchain de sdcc en piklab I_icon_minipost 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)

Por su tiempo, muchas gracias!
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty Re: duda al modificar el toolchain de sdcc en piklab

Mensaje por maigke Dom 26 Abr 2009 - 23:48

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:

http://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).
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty Re: duda al modificar el toolchain de sdcc en piklab

Mensaje por arcachofo Lun 27 Abr 2009 - 4:11

Hola maigke... bienvenido al foro y gracias por participar... Smile

El problema que tienes con los delay creo que es más sencillo... bueno, el tema de incluir la librería en el linker hay que hacerlo, pero fíjate que el fallo te lo dá en el primer paso... ni siquiera ha llegado al linker.
Creo que estás usando un nombre de función que no existe:

delay1kcy();

Yo diría que el nombre correcto es este:

delay1ktcy();

No estoy seguro 100%, pero creo que por ahí va la cosa.

Respecto al Pickit2 hay un problema con Piklab y es que Las últimas versiones del firmware no están soportadas por Piklab:
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.

Esto se puede solucionar cargando en el Pickit2 una versión soportada por Piklab o bién usar la posiblidad del Piklab 0.15.4 de añadir un programador personalizado, solo tienes que poner las lineas de comando del pk2cmd en las casillas correspondientes y mandar a grabar con este programador.
Avisa si necesitas ayuda con los comandos para pk2cmd.

Saludos y suerte con tus proyectos.
arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty Re: duda al modificar el toolchain de sdcc en piklab

Mensaje por maigke Lun 27 Abr 2009 - 5:19

Gracias por responder!!!, me sali un rato a echarme un cigarrin y a platicar con los amigos para despejar la mente un poco, y pues despues de los sagrados, ya estamos aqui de nuevo, en efecto amigo arcachofo, tenias razon en cuanto a la sintaxis del delay Laughing me equivoque, ya revise el archivo include y si es como me comentas y pues nada de modificar el toolchain del piklab!!!

Hay algo que no entiendo, y es por que hay que poner un 1 como argumento de la funcion del 1000 ciclos de retardo???

y pues fué todo un éxito bounce bounce bounce bounce bounce bounce , bueno, ahora nadamas me falta lo que me comentas del programador !!

y si te agradeceria que me ayudaras con los comandos del pk2cmd
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty Re: duda al modificar el toolchain de sdcc en piklab

Mensaje por arcachofo Miér 29 Abr 2009 - 7:27

Hay algo que no entiendo, y es por que hay que poner un 1 como argumento de la funcion del 1000 ciclos de retardo???
Hay varias funciones de delay, delay1ktcy(); es 1kilociclos, osea 1000 ciclos, pero hay otras, creo que 1tcy es un ciclo, 10tcy 10 ciclos y así, aunque nosé si estas que he mencionado existen, pero la lógica es esa.

Respecto a los comandos de pk2cmd para "custom programmer" en Piklab, partimos de la base de que tienes pk2cmd instalado y funcionando; los comandos son estos:

Read:
pk2cmd -P -GFtemp.hex

Erase:
pk2cmd -P -E

Program:
pk2cmd -P -M -Fnombre_archivo.hex

Verify:
pk2cmd -P -Y -Fnombre_archivo.hex

Blank:
pk2cmd -P -C

Run:
pk2cmd -P -W -R

Stop:
pk2cmd -P

Donde pone "nombre_archivo.hex" hay que poner el nombre del archivo a grabar o verificar, y esto es un problema, porque hay que cambiarlo cada vez que se graba o verifica un archivo distinto, no he encontrado la manera de automatizar esto, las variables de Piklab tipo: %I no funcionan...
Esto es un problema... si alguien sabe como solucionarlo que lo comparta porfavor.. Smile

Saludos.
arcachofo
arcachofo
Participante Activo
Participante Activo

Mensajes : 91
Fecha de inscripción : 26/11/2008

Volver arriba Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty Por fin!

Mensaje por maigke Sáb 8 Ago 2009 - 6:32

Bueno despues de dejar esto de la integracion de piklab con el pickit2 y sdcc que tengo en casa Very Happy, pues ya despues de releer un buen Idea y bien debido a que soy lenton, pues ya comprendí!!

Lo unico que hize despues de volver sobre mis pasos, y encontrarme con los mismos problemas de hace un tiempo, decidí, reiniciar todo de nuevo. y lo único que agregue en Proyecto- Oopciones de Proyecto -- Toolchain --- Linker -- Camiarlo a personalizado, afortunadamente me quedaba con las opciones por defecto, bueno pues me coloque sobre la línea de texto y agregue la línea

libc18f.lib

y presione el boton de Add.

esto me dio el siguiente resultado!

sdcc -mpic16 -p18f2550 -V --debug -I/home/mike/PIC/reloj_test/ -c reloj.c
+ "/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"
sdcc -mpic16 -p18f2550 -V --debug -Wl-c -Wl-m -I/home/mike/PIC/reloj_test/ -oreloj.hex reloj.o libc18f.lib
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 reloj.hex reloj.o crt0i.o libc18f.lib pic18f2550.lib libsdcc.lib
*** Éxito ***
Parsing COFF file: /home/mike/PIC/reloj_test/reloj.cof
Device name: "18F2550"

Otro error que habia cometido, es que en la parte izquierda en la barra de proyecto, agregue el codigo objeto generado cuando unicamente compile el archivo, en este caso se llama reloj.o.

Muchas gracias espero que a alguien mas le sea de ayuda

sunny

Ahora seguiremos con las lecturas de los demas post para el echar a andar el pickit2 en piklab

***************************************************************************************************************
Gracias a todos ya he podido hechar a andar mi programador pickit2 con piklab!!
programando en sdcc, bueno pues que sucedia, no tenia los devs del la libreria libusb, por eso mismo tenia problemas para instalar el pk2cmd
Hecho eso, de acuerdo a Risanti https://pic-linux.forosactivos.net/piklab-f3/pickit-2-firmware-1x-en-piklab-t87.htm?highlight=piklab , tenia que solo hacer un
$sudo make install, y bueno de cualquier forma modifique las variables de ambiente en el .bashrc, aunque creo que esta demas.
al igual, como indica Risanti,
Risanti escribió:Hola a todos..

Lo siguiente es cambiar el firmware del pickit 2 para lo cual podemos descargar las distintas versiones desde
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1960

además con el comando pk2cmd -d PK2V012000.hex 'actualizamos firmware tiene que ser 1.20
En piklab configuramos el programador FIRMWARE PICKIT 2 1.X .....comprobamos la conexion que este correcto.. y listo


Aunque
la he probado con algunos pic funciona bien.. no se si sera un problema
de la version 1.20 del pickit pero no puedo programar pic 16F88. pero
otros los pogramos sin problemas...

Para programar 16F88 estoy usando pickit con version 2.32 conjuntamente con pikdev https://pic-linux.forosactivos.net/otros-f19/pickit-2-trabajando-pikdev-v-110-t86.htm#199



Atte.
Risanti
Mis resultados obtenidos ya por el piklab fueron estos

Conectando Firmware PICkit2 1.x en Puerto USB con el dispositivo 18F2550...
Versión de firmware es 1.20.0
set Vdd = 5 V and Vpp = 12 V
Establecer destino auto alimentado: false
Target Vdd = 4.99519 V
Target Vpp = 11.924 V
Conectado.
Enter normal mode
Already in requested mode.
Id leída: 18F2550 (rev. 5)
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
Escribir memoria: Datos EEPROM
Verificar memoria: Datos EEPROM
Escribir memoria: User IDs
Verificar memoria: User IDs
Escribir memoria: Bits de configuración
Verificar memoria: Bits de configuración
Programación exitosa.
maigke
maigke
Asiduo del Foro
Asiduo del Foro

Mensajes : 210
Fecha de inscripción : 12/04/2009
Edad : 46
Localización : Mexico

Volver arriba Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty EN qué directorio se ponen las librerias para piklab ???

Mensaje por a16er70 Sáb 22 Ene 2011 - 12:34

Pues eso, que dónde se añade la librería del pic que utilizas en piklab si ésta no estuviese.

Gracias por la respueta.

a16er70

a16er70
Participante
Participante

Mensajes : 20
Fecha de inscripción : 12/12/2010
Localización : España - Boecillo

Volver arriba Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty Re: duda al modificar el toolchain de sdcc en piklab

Mensaje por Risanti Sáb 22 Ene 2011 - 15:50

Hola..

Mira hace un tiempo puse un video que muestra como incluir otras librerias usando piklab, te lo dejo para ver si te sirve. Video Configurar liberias

Ademas puedes ver estos temas activos del foro donde se ve algo similar a tu pregunta.
https://pic-linux.forosactivos.net/t280-sintaxis-sdcc


https://pic-linux.forosactivos.net/t285-sdcc-fallo-en-el-linker#1366


Saludos
RISanti
Risanti
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 39
Localización : La Serena Chile

https://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

librerias - duda al modificar el toolchain de sdcc en piklab Empty Re: duda al modificar el toolchain de sdcc en piklab

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.