Autor Tema: Ensamblador para PIC24FV16KM202  (Leído 3160 veces)

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

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Ensamblador para PIC24FV16KM202
« en: 18 de Junio de 2019, 07:36:55 »
Estoy haciendo un bootloader para un PIC24FV16KM202 y quería saber que opciones hay para ensamblar código para 16bits.

Conozco el programa xc16-as.exe que viene con el compilador XC16. ¿Hay que llamar directamente al ensamblador o se invoca a través del xc16-gcc.exe?

¿Se puede seguir utilizando el mpasm que valía para los micros de 8 bits?

Un saludo.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Ensamblador para PIC24FV16KM202
« Respuesta #1 en: 18 de Junio de 2019, 09:36:57 »
 
Depende de si quieres meter ensamblador incrustado dentro de un programa en C, o quieres directamente programarlo todo en ensamblador.

Hace mucho que abandoné los PIC, y nunca los programé en ensamblador, pero creo que al instalar el IDE configurabas los compiladores a usar, y por ahí aparecía el ensamblador instalado por defecto junto al IDE. Supongo que la extensión de un fuente en ensamblador será .asm o algo así, y con eso o al crear el proyecto ya defines que compilador usar.

Lo que no veo es que relación tiene crear un bootloader para un PIC24, con el ensamblador, hazlo todo en C. Yo solo he usado el "nop" incrustado en C para ajustar algunos tiempos críticos, pero programar en ensamblador para un 16bit o un 32bit, no tiene sentido y es innecesario para hacer un bootloader.
« Última modificación: 18 de Junio de 2019, 09:40:54 por planeta9999 »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Ensamblador para PIC24FV16KM202
« Respuesta #2 en: 18 de Junio de 2019, 09:56:10 »
Es un tinypicbootloader que ocupa solo 100bytes.
El problema con c es cómo colocar el código generado en lo más alto de la flash.

Tengo un bootloader para el pic24fv32ka304 que funcionaba, pero da errores al ensamblar con el Mplabx.
Creo que lo ensamblé con el Asm30.
Si encuentro el ensamblador adecuado que no dé errores, con cambiar dos o tres líneas ya tendría el bootloader para mi micro pic24fv16km202 porque son muy parecidos.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Ensamblador para PIC24FV16KM202
« Respuesta #3 en: 18 de Junio de 2019, 10:36:25 »
Es un tinypicbootloader que ocupa solo 100bytes.
El problema con c es cómo colocar el código generado en lo más alto de la flash.

Eso se configura en el Linker Script, para que el enlazador ubique el objeto donde quieras.

De todas formas lo habitual, es al contrario, bootloader en la parte baja de la flash, y programa del usuario a partir de la primera página libre después del bootloader.
« Última modificación: 18 de Junio de 2019, 10:39:33 por planeta9999 »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Ensamblador para PIC24FV16KM202
« Respuesta #4 en: 18 de Junio de 2019, 10:39:26 »
He eliminado el programa en ensamblador que había posteado antes porque no estaba bien. No compila porque faltaban etiquetas entre otras cosas.

La verdad es que estoy harto de pelearme con el ensamblador para cada proyecto que hago con un micro nuevo. Si ocupa más memoria en c no me importa mucho así que voy a traducir el bootloader a C y a ver si consigo que funcione.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Ensamblador para PIC24FV16KM202
« Respuesta #5 en: 18 de Junio de 2019, 10:41:15 »
 
Lo raro es que Microchip no te de un ejemplo gratuito en C, de un bootloader.

Yo hace años lo hice para PIC32, totalmente en C, a partir de uno de Microchip (nota aplicativa AN1388). Le añadí encriptación y varios datos en direcciones fijas de la flash, número de serie único, código de producto y versión.
« Última modificación: 18 de Junio de 2019, 10:45:26 por planeta9999 »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Ensamblador para PIC24FV16KM202
« Respuesta #6 en: 18 de Junio de 2019, 13:02:32 »
Es que quiero que funcione con una aplicación para PC (TinyPicBootloader) que después de cargar el programa por la UART, cambia a modo teletipo para enviar y recibir datos por la misma UART. Es muy cómodo para hacer debug.

Para eso tiene que funcionar según sus parámetros.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Ensamblador para PIC24FV16KM202
« Respuesta #7 en: 18 de Junio de 2019, 14:35:01 »
 
Eso es tipo Arduino.

En los ARM lo tienes nativo por SWD, el pin SWO sirve para redirigir el printf de C y te visualiza las variables que quieras en tiempo real en la consola del IDE, también se pueden visualizar en gráficos.

Si en vez de un PIC, usas un STM32 o un Kinetis, lo tienes todo hecho, y puedes usar el bootloader encriptado uTasker, todo en C. También tendrás el compilador de C gratis, el IDE MCUXpresso para NXP o STM32CubeIDE para los STM32. Otra alternativa interesante es el RT1020 de NXP, soportado por MCUXpresso, y según me comentó el autor de uTasker, también lo va a añadir a su bootloader encriptado.

Como curiosidad, ST se ha cargado el Atollic TrueStudio, ya no le darán más soporte, lo reemplazan por el STM32CubeIDE. Lo tengo que probar, porque la última vez que hice algo con STM32 usé el System Workbench, que no deja de ser un producto externo a ST. Ahora ST ya tiene entorno propio y gratuito.

Y la última es que NXP acaba de sacar la versión 11 de MCUXpresso, y también una nueva versión del SDK. Parece que lleva bastante novedades.

« Última modificación: 18 de Junio de 2019, 14:46:11 por planeta9999 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Ensamblador para PIC24FV16KM202
« Respuesta #9 en: 18 de Junio de 2019, 16:45:48 »

Eso es tipo Arduino.

En los ARM lo tienes nativo por SWD, el pin SWO sirve para redirigir el printf de C y te visualiza las variables que quieras en tiempo real en la consola del IDE, también se pueden visualizar en gráficos.

Hace tiempo que compré varias placas ARM (una Teensy entre otras) y tengo pendiente aprender a manejarlas.

Por ahora los PIC24 me atraen por 2 razones: pueden funcionar con entradas y salidas a 5V y tienen periféricos como el CTMU para medir tiempos con precisión sub nanosegundo o el CLC, una especie de pequeña GAL de lógica programable.
Por otro lado estoy cansado de los errores y limitaciones de la familia PIC. Creo que va siendo hora de darle una oportunidad a los ARM.

Saludos.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Ensamblador para PIC24FV16KM202
« Respuesta #10 en: 18 de Junio de 2019, 16:48:18 »
https://www.microchip.com/SWLibraryWeb/product.aspx?product=Microchip%20Easy%20Bootloader

Y esto ?

Le echaré un vistazo, pero el bootloader tiene que tener el mismo protocolo que el tinypic bootloader.

El problema que tengo ahora es que no consigo ni siquiera que funcione un bucle infinito en ensamblador (un simple goto). No me compila. Debe haber un problema con la definición del microcontrolador. Luego subo el programa.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ensamblador para PIC24FV16KM202
« Respuesta #11 en: 18 de Junio de 2019, 17:58:19 »
A mi si me funciona:

Archivo: main.s

Código: ASM
  1. .include "p24fv16km202.inc"
  2.  
  3. ;..............................................................................
  4. ; Configuracion, Palabras sacadas del include.
  5. ; Primero va el registro con 2 guion bajo (__FOSC) por ejemplo y luego la
  6. ; configuracion del mismo
  7. ;..............................................................................
  8.  
  9. ;    config __FOSCSEL, FNOSC_FRCDIV16 & IESO_ON
  10.  
  11. ;..............................................................................
  12. ;Declaraciones Globales:
  13. ;Aca declaramos las etiquetas que pueden ser usadas por otros archivos y
  14. ;tambien los vectores de interrupcion, los nombres de estos se peuden ver en
  15. ;el archivo de linker p33fj32mc202.gld para este caso
  16. ;..............................................................................
  17.  
  18.     .global _main               ; De donde viene del startup.
  19.  
  20.     .text                               ;Seccion codigo
  21.  
  22. ;..............................................................................
  23. ;Configuracion de pines y entrada de programa
  24. ;..............................................................................
  25.  
  26. _main:
  27.  
  28. ;..............................................................................
  29. ;Programa Principal
  30. ;..............................................................................                    
  31.                            
  32. MainLoop:
  33.  
  34.         bra MainLoop        ; Inicio nuevamente
  35.  
  36. ;----------------- Fin del codigo ---------------------------------------------
  37.        
  38. .end

Respuesta:

Citar
CLEAN SUCCESSFUL (total time: 55ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'F:/CCS/MPLABx/TestXC16asm.X'
make  -f nbproject/Makefile-default.mk dist/default/production/TestXC16asm.X.production.hex
make[2]: Entering directory 'F:/CCS/MPLABx/TestXC16asm.X'
"C:\Program Files (x86)\Microchip\xc16\v1.36\bin\xc16-gcc.exe"   main.s  -o build/default/production/main.o  -c -mcpu=24FV16KM202  -omf=elf -DXPRJ_default=default  -legacy-libc  -Wa,-MD,"build/default/production/main.o.d",--defsym=__MPLAB_BUILD=1,-g,--no-relax
"C:\Program Files (x86)\Microchip\xc16\v1.36\bin\xc16-gcc.exe"   -o dist/default/production/TestXC16asm.X.production.elf  build/default/production/main.o      -mcpu=24FV16KM202        -omf=elf -DXPRJ_default=default  -legacy-libc    -Wl,,,--defsym=__MPLAB_BUILD=1,,--script=p24FV16KM202.gld,--stack=16,--check-sections,--data-init,--pack-data,--handles,--isr,--no-gc-sections,--fill-upper=0,--stackguard=16,--no-force-link,--smart-io,-Map="dist/default/production/TestXC16asm.X.production.map",--report-mem,--memorysummary,dist/default/production/memoryfile.xml


xc16-ld 1.36 (B)

"program" Memory  [Origin = 0x200, Length = 0x2a00]

section                    address   length (PC units)   length (bytes) (dec)
-------                    -------   -----------------   --------------------
.text                        0x200                0xce           0x135  (309)
.text                        0x2ce                 0x2             0x3  (3)

                 Total "program" memory used (bytes):          0x138  (312) 1%


"data" Memory  [Origin = 0x800, Length = 0x800]

section                    address      alignment gaps    total length  (dec)
-------                    -------      --------------    -------------------

                 Total "data" memory used (bytes):              0  (0)


Dynamic Memory Usage

region                     address                      maximum length  (dec)
------                     -------                      ---------------------
heap                             0                                   0  (0)
stack                        0x800                               0x800  (2048)

                 Maximum dynamic memory (bytes):          0x800  (2048)

"C:\Program Files (x86)\Microchip\xc16\v1.36\bin"\\xc16-bin2hex dist/default/production/TestXC16asm.X.production.elf -a  -omf=elf 
make[2]: Leaving directory 'F:/CCS/MPLABx/TestXC16asm.X'
make[1]: Leaving directory 'F:/CCS/MPLABx/TestXC16asm.X'

BUILD SUCCESSFUL (total time: 1s)
Loading code from F:/CCS/MPLABx/TestXC16asm.X/dist/default/production/TestXC16asm.X.production.hex...
Loading completed

Observaras que posee muchos mas bytes de lo que es el programa...
Esto se debe a que el compilador de C genera un startup que en otros compiladores se puede ver... aca esta un poco oculto... te dejo esto que habia realizado antes:

http://www.todopic.com.ar/foros/index.php?topic=45240.msg376314#msg376314

Aunque para mi no vale la pena complicarse la vida tanto asi.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Ensamblador para PIC24FV16KM202
« Respuesta #12 en: 19 de Junio de 2019, 09:11:18 »
Ya he conseguido ensamblar un programa pequeño de blink. Pero el compilador añade el código que comentas.

Creo que no voy a complicarme más. Es mucho trabajo para conseguir poca cosa.


Gracias y un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5878
    • Picuino
Re:Ensamblador para PIC24FV16KM202
« Respuesta #13 en: 19 de Junio de 2019, 14:16:25 »
Encontré el viejo ensamblador ASM30 con el que se podía ensamblar el código sin problemas:
https://www.microchip.com/development-tools/pic-and-dspic-downloads-archive