Autor Tema: Busco consejo sobre que lenguaje conviene aprender  (Leído 15895 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #60 en: 13 de Enero de 2015, 17:59:33 »
Si bien el programa en .asm estaba bastante optimizado, creo que en C le falta mucho para estarlo, funciona, pero de seguro hay muchas cosas para mejorarle.

Con los ejemplos que dio Picuino, el codigo de enviar un dato o una instruccion lo podes hacer en ASM, de esa forma va mas rapido a tu gusto.
Luego de ahi usas funciones en C para inicializarlo, Poder mandar todo un string como hizo Picuino


--------


Por lo que tengo entendido una libreria es una coleccion de codigo cabecera y objeto de varios archivos, ya estan precompiladas, entonces al momento de hacer un proyecto y usar esa libreria no hay necesidad de volver a compilar ese programa.
Aca hay unos pasos para generar una libreria con gcc

http://www.delorie.com/djgpp/doc/ug/larger/archives.html

seria usar gcc para generar la libreria y luego agregarla al MPLAB si fuera necesario. Y tal como dice Picuino en su Post Data. habria que implementarlo de otra forma, pero puede seguir usandolo asi  :)

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #61 en: 13 de Enero de 2015, 22:39:08 »
Hola y gracias a todos por sus respuestas, ahora tengo material para experimentar un rato  :D

KILLERJC, claro que tienes razón, de hacer el envío de datos en .asm y los comandos en C (tiene muchas ventajas), y eso aré en un futuro, pero como ahora estoy practicando el C, pues lo hice todo así para practicar y sobre todo para ver si podía hacerlo  ;-)

Picuino, gracias por los consejos (ni bien tenga un rato me pondré a practicar), lo del string es muy bueno y útil, pero comprender que estoy lejísimo de aplicarlo solo por mis propios medios (aunque ahora este un poco más cerca), de seguro pondré manos a la obra.
Lo otro no entendí nada (por ahora y a vistazo rápido), pero ya me pondré con tiempo y seguro lo entenderé.

Deberán tenerme un poco de paciencia, este programa si bien lo e realizado en C, el que conoce un poco del .asm verá que el tipo de mentalidad aplicada es el .asm (es algo difícil el cambio de mentalidad). Básicamente es un código C asemblizado  :D  :D  :D

Gracias a todos por el apoyo y las enseñanzas.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #62 en: 14 de Enero de 2015, 07:20:28 »
Con respecto a hacer partes de programa en ASM, creo que en este caso no es necesario.
Si compilas este programa y miras el ASM generado, será muy parecido al que tenías antes en ensablador:

Código: C
  1. void SACAR(unsigned char DATO) {
  2.     LCD_D7 = 0;
  3.     if (DATO & 0x80) LCD_D7 = 1;
  4.     DATO <<= 1;
  5.     LCD_D6 = 0;
  6.     if (DATO & 0x80) LCD_D6 = 1;
  7.     DATO <<= 1;
  8.     LCD_D5 = 0;
  9.     if (DATO & 0x80) LCD_D5 = 1;
  10.     DATO <<= 1;
  11.     LCD_D4 = 0;
  12.     if (DATO & 0x80) LCD_D4 = 1;
  13. }

Para que sea igual que en ASM, habría que hacer la variable dato global (definirla fuera de la función) para que el compilador no utilice la pila de datos (el stack):


Código: C
  1. unsigned char lcd_dato;
  2.  
  3. void sacar(void) {
  4.     LCD_D7 = 0;
  5.     if (lcd_dato & 0x80) LCD_D7 = 1;
  6.     lcd_dato =  lcd_dato << 1;
  7.     LCD_D6 = 0;
  8.     if (lcd_dato & 0x80) LCD_D6 = 1;
  9.     lcd_dato =  lcd_dato << 1;
  10.     LCD_D5 = 0;
  11.     if (lcd_dato & 0x80) LCD_D5 = 1;
  12.     lcd_dato =  lcd_dato << 1;
  13.     LCD_D4 = 0;
  14.     if (lcd_dato & 0x80) LCD_D4 = 1;
  15. }
  16.  
  17.  
  18. void main(void) {
  19.    lcd_dato = 0x35;
  20.    lcd_sacar();
  21. }


Respecto a las dudas que tengas, si preguntas alguna en concreto seguro que te podemos responder sin enrollarnos demasiado, para que sea más sencillo.

La función de imprimir una cadena de caracteres (string) utiliza punteros y no es nada sencilla de entender a la primera. Los punteros son muy interesantes. Es lo que hace que el c sea tan eficiente. Un puntero en ASM es como utilizar el registro INDF (indirect addressing) para acceder a los datos de memoria.
Yo puse esa función para que veas que en C se pueden programar lo mismo con menos código.


Saludos.
« Última modificación: 14 de Enero de 2015, 07:23:01 por Picuino »