TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Meta en 21 de Febrero de 2008, 02:44:13
-
Muy buenas:
Me gustaría saber si alguien a probado hacer algo con un PIC 18F2550 o 18F4550 en asm. Son 77 instrucciones frente a los 35 de la gama 16F. Estoy aprendiendo a utilizar todas del 16F84A y veo que algunas del 18F son muy cómodas y se puede trabajar con menos código.
La mayoría veo que está con el C, ¿y en asm cómo les va?
Un buen saludos a todos.
-
18F tiene 31 Stack o pila. Cada vez lo veo que esta gama es más potente de lo que creía.
-
Umm!! bueno yo no lo he usado, pero tengo un amigo que si lo ha hecho y le ha ido bien!!!
A mi parecer creo que serian más largos los programas por el poco de instrucciones que tiene el 4550 frente al 877!!! jejeje para este caso me quedo con C :D
Atte: Enigma... La llanerita de Guayana :-)
-
A mi parecer creo que serian más largos los programas por el poco de instrucciones que tiene el 4550 frente al 877!!! jejeje para este caso me quedo con C :D
En realidad es al revés. El 18F4550 tiene un set de instrucciones mucho más amplio y rico que involucra las mismas que están presentes en los 16F pero con algunas mejoras y agregados. Por ende un programa en un 18F siempre te ocupará igual o menos espacio que un programa idéntico en un 16F.
Saludos
-
off topic: ¿vieron que raro lo de Meta? figura que no tiene mensajes, pero de echo tiene dos, y más, ya que lo he visto en otro foro.
-
No es raro León, hubo un problema con la cuenta y se perdió el contador de este usuario.
-
OK, Muchas gracias.
-
En realidad es al revés. El 18F4550 tiene un set de instrucciones mucho más amplio y rico que involucra las mismas que están presentes en los 16F pero con algunas mejoras y agregados. Por ende un programa en un 18F siempre te ocupará igual o menos espacio que un programa idéntico en un 16F.
Si, en ese concuerdo contigo!! pero yo me referia a que por lo menos un programa en ASM de un 18F siempre será más largo que un programa en C del mismo 18F.... y también me atreveria a decir sin arrepentirme de ello, que un programa en ASM de un 16F es todavia más largo que un programa en C de un 18F con todo y el poco de instrucciones nuevas!!!! :D A eso me referia!!!!! :lol:
Atte: Enigma... La llanerita de Guayana :-)
-
Si, en ese concuerdo contigo!! pero yo me referia a que por lo menos un programa en ASM de un 18F siempre será más largo que un programa en C del mismo 18F.... y también me atreveria a decir sin arrepentirme de ello, que un programa en ASM de un 16F es todavia más largo que un programa en C de un 18F con todo y el poco de instrucciones nuevas!!!! :D A eso me referia!!!!! :lol:
La confusión surge porque no está muy claro a que te refieres con programa largo, si te refieres a cantidad de líneas de código, es cierto y coincido contigo. El C hará con pocas instrucciones lo mismo que en assembly hay que hacer en varias (de hecho ese es el fin de los lenguajes, poder en pocas palabras definir conceptos complejos que luego se traducen en varias instrucciones).
Saludos
-
Consulta: Estoy un poco confundido. Yo tengo entendido que el C, hace más largo los programas que en assembly, hablo claro en la familia 16, pero en la familia 18 ¿pasa alreves? o sea, ¿el lenguaje C hace más corto los programas que en assembly?
-
La familia de los 18 tiene instrucciones encaminadas a la optimización del lenguaje c. Una sentencia de lenguaje c puede ser más larga al ser compilada en un 16F que en un 18F, porque el 18F tiene códigos de operación más detallados que el 16F. En los 16F no existe la multiplicación, pero en los 18F sí la hay... en lenguaje c tomará muchas más instrucciones para lograrla en 16F que en 18F.
-
Vamos a ver si soy capaz de arrojar un poco de luz a este tema.
Programadores obtusos hacen programas ineficientes. Con esto quiero decir que un programador poco ducho en la materia es capaz de hacer un mal programa en ASM, tan ineficiente como uno en C o en BASIC generado por un compilador.
Programadores hábiles hacen programas eficientes en ASM, en C o en BASIC. Pero y esto es lo importante, un programa en C o en BASIC nunca será mas eficiente que un programa eficiente escrito en ASM.
¿Por qué es esto así? Porque nada puede ser mas eficiente que algo eficiente escrito en ASM. En ASM hay una relación directa entre lo que se escribe, mnemónicos, y lo que se genera, código máquina, para enviárselo al PIC. El compilador traduce un instrucción de alto nivel a una secuencia de mnemónicos ASM que hacen lo mismo. Es lo que podemos ver en CCS C, por ejemplo, al editar el fichero .lst que genera, que no es mas que la traducción de C a ASM que ha realizado el compilador.
Por eso todo lo más que pueden hacer los compiladores en C ó BASIC es hacer lo mismo, pero no más.
Ten en cuenta que el compilador nos va a ofrecer, nos va a ayudar con el conocimiento de ASM que tenían los creadores del compilador. Y que si este conocimiento, este saber hacer, de los creadores del compilador es eficiente generará código máquina eficiente en su compilado.
Luego el tema no es si en ASM o en C salen los programas mas cortos o rápidos o eficientes, sino si tú programando en ASM eres capaz de hacer programas mas cortos o rápidos o eficientes de lo que el creador del compilador es capaz de compilar un código tuyo en C haciendo lo mismo.
Puedes ver que este párrafo anterior que te he puesto es un párrafo trampa: Tú en ASM luchando por conseguir brevedad, rapidez o eficiencia contra la unión de ti mismo escribiendo en C y la capacidad para traducir tu C a ASM de los creadores del compilador.
Por todo esto a tu pregunta se puede contestar con una sola palabra: Depende.
Depende de la brevedad, rapidez o eficiencia de quien escribe el programa en ASM, depende de la brevedad, rapidez o eficiencia de quien escribe el programa en C y depende de la brevedad, rapidez o eficiencia de quien traduce tu programa en C a ASM.
Cuando se dice que el C de los PIC18 está diseñado para ser eficiente, quieren decir que los creadores de los PIC18 y del C18, que trabajan ambos para Microchip, se han puesto de acuerdo para implementar instrucciones ASM que acerquen, que sean de fácil traducción entre ellas y el correspondiente código en C.
Fíjate en la frase que viene en el Datasheet del PIC18F4550 sobre el C: "C compiler optimized architecture with optional extended instruction set", El compilador de lenguaje C optimiza la arquitectura con el conjunto opcional de instrucciones ampliada. Esto quiere decir que tiene instrucciones ASM que "se parecen" mas a instrucciones C por lo que la conversión es mas directa.
O sea lo que te estoy diciendo, pero nada que ver con que pueda ser mejor que hacerlo "a pelo" en ASM usando tú esas mismas instrucciones.
No se si habré sabido explicarme. :mrgreen:
-
Consulta: Estoy un poco confundido. Yo tengo entendido que el C, hace más largo los programas que en assembly, hablo claro en la familia 16, pero en la familia 18 ¿pasa alreves? o sea, ¿el lenguaje C hace más corto los programas que en assembly?
A lo que apuntaba la llanerita es a otra cosa, no a código generado sino al texto que ves en tu pantalla cuando escribes.
Un programa en C podría ser algo así como
int a, b, c;
a = 20;
b = 30;
c = 10 + a*b;
Hacer eso en assembly ocuparía varias líneas... varías... a eso se refería la llanerita.
-
Maunix, pues tiene razón, yo interpreté otra cosa que tanto migsantiago, JCC40 y redpic me explicaron lo que necesitaba saber.
Les agradezco a los 4, ya la duda quedó despejada (al menos para mi) :mrgreen:
Red Pic, es verdad de que depende del programador, a lo que me refería que por ejemplo un programador muy hábil en assembly y que también sea muy hábil en C, pero también ya lo explicaste.
Un saludo :-/ :-/