Autor Tema: Convertir sketch a ensamblador  (Leído 5512 veces)

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

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Convertir sketch a ensamblador
« Respuesta #30 en: 22 de Abril de 2018, 22:19:29 »
El tema se ha puesto caliente  :D

Gracias a todos por sus respuestas y su tiempo.

De momento las concluciones que saco de este dialogo son estas:

1) Lo de entender las librerias de Arduino o intentar pasarlas a ASM para migrarlas, de momento, lo dejo. Parece que no es para mi nivel.

2) Programar Arduino en ASM parece que es posible pero, visto lo visto, no le veo demasiadas ventajas. Mejor empezar a estudiar c lo que me puede abrir las puertas no solo a este, sino a otros micros.

3) Hablando del PIC, para programar en C se puede utilizar el CCS o el XC8, pero, segun KILLERJC, si vienes del assembler me recomienda el XC8.

Ahora ya solo necesito sacar tiempo para empezar a estudiar :lol:.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7813
Re:Convertir sketch a ensamblador
« Respuesta #31 en: 22 de Abril de 2018, 22:58:37 »
O sea vos sos libre de elegir el compilador que creas conveniente. Me explico con un ejemplo simple el porque te sugiero este compilador.

Los mas conocidos son: XC8 ( Microchip), CCS y Mikro C, pienso que los 2 mas usados con XC8/CCS

XC8 por su parte proporciona el soporte para TODOS los micros y no solo algunos, asi que esto no te limita a nada. Usando MPLAB X podes incluso probar el programa ( simularlo ) en el mismo IDE, sin necesidad de usar algun otro simulador. Y generador de FUSES de forma visual.
Voy a hacer una comparativa para que veas cual es la diferencia.

Alternar un Led:

Código: C
  1. #include <xc.h>
  2.  
  3. // Aca los FUSES
  4.  
  5. void main(void)
  6. {
  7.      TRISA = 0xFF;              // Asi para cuando te referis a un registro completo, y abajo para cuando te referis a algun bit
  8.      TRISBbits.RB0 = 0;       // Lo mismo que hacer BCF TRISB,0 , observa que no nos importa los bancos cuando manejamos C
  9.      while(1)
  10.      {
  11.           PORTBbits.RB0 = 1;
  12.           __delay_ms(500)
  13.           PORTBbits.RB0 = 0;
  14.           __delay_ms(500);
  15.      }
  16. }

Tal ves le falte configurar algun otro registro para que funcione realmente, pero es aproximado. Observa que es muy parecido a lo que harias con ASM. Te manejas con los registros.
El include de xc.h luego resuelve para el PIC que tengas configurado en tu proyecto, asi que con solo incluir ese es valido para todos.

Veamos ahora lo mismo con CCS y que funcione IGUAL.

Código: C
  1. #include <16f877a.h>
  2.  
  3. #USE FAST_IO(B)
  4. // Aca los FUSES
  5.  
  6. void main(void)
  7. {
  8.      set_tris_a(0xFF);
  9.      set_tris_b(0xFE);
  10.      while(1)
  11.      {
  12.           output_high(PIN_B0);
  13.           delay_ms(500);
  14.           output_low(PIN_B0);
  15.           delay_ms(500);
  16.      }
  17. }

CCS esta preparado para abstraerte del Hardware como ya comentaron, no tocas nunca los registros, la idea es que JAMAS lo hagas.
el USE FAST_IO  (especifico de CCS) hace que los output_low/output_high/input funcionen igual que leer el bit unicamente. Sino al no poner eso CCS si usas la funcion input para leer el estado de un pin de salida por ejemplo terminas cambiando los TRIS tambien.

Ventajas de CCS... Supongamos que tenes que realizar una UART, en XC8 debes modificar todos los registros, bits a bits. en CCS usas:

Código: C
  1. #USE RS232(baud=9600,xmit=PIN_B0, rcv=PIN_B1)

Ya con eso podes usar funciones como printf, imprimir flotantes ( numeros con decimales), letras (string), enteros, etc sin hacer nada, en cambio XC8 es mucho mas complicado ya que vas a tener que hacerte las funciones vos mismo, de la misma forma que lo pensabas cuando lo hacias en ASM. Ej: Si tengo un numero de 0 a 255 (123) y lo debo pasar a ASCII, en XC8 necesito crear una funcion que me lo pase a BCD, luego sumarle '0' y poner en un array terminado en '\0' asi es considerado un string "123".
Ademas en CCS si los pines definidos pertenece a algun modulo UART, utiliza el modulo, si no lo son, entonces crea una UART por software. Lo mismo es con I2C/SPI, todo así de fácil se crea.

----------------

Por mi, considero que CCS es C, pero no funciona como cualquier compilador que siga los estándar , por ejemplo vos necesitas agregar esos USE a TODOS los archivos .c, lo cual es absurdo, pero de esa forma se maneja CCS. Para cuando necesites crear proyectos con varios archivos .c, esto lleva a malas costumbres de programacion, una cosa que nunca habia entendido es porque usan include con archivos .c cuando unicamente deberian hacerlo con los .h, y esta es una razones de ello, Y me encontre con gente que cree que esta bien porque nunca tocaron algun otro compilador C.

------------------------------------------

Finalizando:

Si tu idea es crear un proyecto simple, rapido y facil, anda por CCS, solo vas a necesitar el manual y acostumbrarte a las funciones. (Prefiero el plugin de CCS para MPLAB, ya que el IDE de CCS es MALO)
Si tu idea es algo un poco mas grande, considero XC8 por no haber otra alternativa (mejor seria con: con un mejor IDE, y optimizaciones gratis). Pero es suficiente :P
« Última modificación: 22 de Abril de 2018, 23:01:40 por KILLERJC »

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Convertir sketch a ensamblador
« Respuesta #32 en: 23 de Abril de 2018, 00:48:22 »

     TRISBbits.RB0 = 0;       // Lo mismo que hacer BCF TRISB,0 , observa que no nos importa los bancos cuando manejamos C
 

He visto la luz entre las tinieblas... cuanto he sufrido con el cambio de bancos en el PIC16!!! :cry:
Solo por esto creo que merece pasarse a c


Si tu idea es crear un proyecto simple, rapido y facil, anda por CCS, solo vas a necesitar el manual y acostumbrarte a las funciones. (Prefiero el plugin de CCS para MPLAB, ya que el IDE de CCS es MALO)
Si tu idea es algo un poco mas grande, considero XC8 por no haber otra alternativa (mejor seria con: con un mejor IDE, y optimizaciones gratis). Pero es suficiente :P


Hummmm de momento, y por lo leido creo me inclino por el XC8. Consultare el precio.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7813
Re:Convertir sketch a ensamblador
« Respuesta #33 en: 23 de Abril de 2018, 01:00:15 »
XC8 tenes la version gratuita, que lo unico malo es no tener optimizaciones. Asi que podes usarlo tranquilamente.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5416
Re:Convertir sketch a ensamblador
« Respuesta #34 en: 23 de Abril de 2018, 03:22:30 »
CCS no es C estandar y te costará portar tus programas.
Además tiene librerías para facilitarte la vida, pero no son open-source como en Arduino, por lo que te costará mucho más portar la funcionalidad de sus librerías.

Viniendo del ensamblador, donde puedes ver todo el código y trabajas a bajo nivel, CCS te va a resultar demasiado alejado a tus costumbres. Es muy mala opción para empezar, te quedarás otra vez atrapado en una mala elección.


Otra cosa respecto al C. Para hacer los programas más portables puedes utilizar definiciones:
#define TRISBbits.RB1  PORT1

Y a partir de ahí solo utilizas la expresión PORT1. Si más adelante pasas a otro microprocesador (Atmel) solo tienes que cambiar la definición y todo el programa seguirá funcionando igual. Portabilidad inmediata.
No siempre es tan sencillo, pero es muy buena costumbre hacer definiciones de todo lo que sea dependiente del microprocesador.

Un saludo.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Convertir sketch a ensamblador
« Respuesta #35 en: 23 de Abril de 2018, 21:43:18 »
Gracias de nuevo por vuestros consejos.

XC8 tenes la version gratuita

Pues ya me he descargado el XC8 y lo estoy manejando un poco mientras leo los manuales de microchip.

A primera vista:

1) Lo de no preocuparse de los bancos de memoria se agradece bastante.
2) Parece que en el c los delays no necesitan una libreria especifica, con solo escribir __delay_ms() ya tengo mi retardo.
3) Uno de los rompecabezas (para mi) del asembler son las operaciones matematicas, pero, en c parecen mas faciles.
4) En c parece que desaparecen el "call" y el "goto". Esto me tiene un poco perdido pero todo sera acostumbrarse.
5) Dentro del programa tambien se puede meter trozos en asembler con #asm y #endasm.

Acabo de empezar y tengo montones de dudas y preguntas pero ya las escribire en otra parte, no este sub-foro que realmente es de arduino jejejeje

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7813
Re:Convertir sketch a ensamblador
« Respuesta #36 en: 23 de Abril de 2018, 22:27:15 »
Pregunta todo lo que necesites.

Respecto a esto:

Citar
4) En c parece que desaparecen el "call" y el "goto". Esto me tiene un poco perdido pero todo sera acostumbrarse.

Los CALL es lo mismo que llamar a una funcion.. Ejemplo

Código: C
  1. // Aca es tu vector de Reset, tu vector de reset llama siempre a una funcion con el nombre main, como un GOTO MAIN puesto en 0x00, luego haces lo MISMO que en ASM
  2. // Configuras tus modulos, tenes un loop infinito y dentro del loop haces lo tuyo
  3. void main(void)
  4.     // Aca configuracion
  5.  
  6.     //Loop infinito, como en ASM
  7.     while(1)
  8.     {
  9.        // Lo mismo que si hubiera hecho CALL funcion1
  10.         funcion1();
  11.     }
  12.  
  13. void funcion1(void)
  14. {
  15.    __delay_ms(500);
  16.    PORTBbits.RB0 ^= 1;  // Esto es lo mismo que hacer PORTBbits.RB0 = PORTBbits.RB0 ^ 1  , XOR con 1, es decir invertimos ese bit
  17.    // Y aca hay un RETURN escodido, asi que tampoco te preocupas por el RETURN
  18. }

Respecto de los GOTO, lo tenes en C, pero no deberias usarlo, tenes muchas formas de dirigir el flujo, con if..else,for,switch,while,do..while
El unico uso valido que le encuentro al goto en C es salir de varios for anidados.

Citar
5) Dentro del programa tambien se puede meter trozos en asembler con #asm y #endasm.

Es cierto, pero no deberias utilizarlo tampoco, a no ser algun caso extremo.

Desconectado Fabri Olivari

  • PIC10
  • *
  • Mensajes: 16
Re:Convertir sketch a ensamblador
« Respuesta #37 en: 25 de Noviembre de 2019, 00:42:41 »
Hola, lo que puedes hacer si quieres cargar el codigo de arduino en un PIC, es cargarle al PIC el FLASH PINGUINO, lo que este soft te permite es programar los pics, igual que un arduino. Te paso un LINK de la instalacion, solo tenes que buscar algunos tutoriales, al verdad que es muy facil.


Mirate esos videos son muy buenos...