desktop

C vs ASM

Mi punto de vista:

1- Personalmente, el C lo emplearía para proyectos demasiado grande, largo y PIC que contenga mucha RAM y Flash. El ASM para proyectos pequeños y PIC muy pero que muy pequeño que nunca se podría usar en C porque te genera el código más grande que directamente en asm.

2- Me gusta mucho el ASM, aunque en un principio lo veía y aún veo complicado, de fácil no tiene nada sobre si trabajas en proyectos grandes.

3-
Hoy en día, elegir un lenguaje más bien las personas lo hacen por gustos que por necesidades. En mi caso porque tengo sólo un libro que te enseña sólo ASM y es bueno saber ASM para programar cualquier PIC hasta los PIC32.



Lenguaje C:

Ventajas:


* Es un lenguaje de alto nivel mas cercano a la máquina.

* Puedes construir rutinas matemáticas fácilmente.

* Puede ser de ayuda al combinarlo con Ensamblador sobre todo en la gama alta.

* Se pueden crear macros con este lenguaje, para después simplificar el código en diferentes desarrollos.

* Es aceptado por la empresa fabricante Microchip, incluso ellos tienen algunos compiladores C.


Desventajas:


* Los programas al compilarlos pueden resultar un poco extensos y pesados por ello debe tenerse en cuenta la capacidad de memoria de programa del PIC a utilizar.

* Con este lenguaje tampoco se puede controlar del todo los tiempos y los registros bit a bit.





Para este lenguaje existen también varias casas que producen software y compiladores para este lenguaje entre ellas las más importantes son:


www.microchip.com con sus compiladores C18 para la gama alta y C30 para los dsPIC, ambos Como otras herramientas de esta marca, se puede incluir en el entorno gratuito MPLAB IDE, y permite a los desarrolladores, llevar a cabo su aplicación en un lenguaje de alto nivel.. No son del todo gratuitos.
www.ccsinformación.com Sus herramienta más conocidas, son la serie de compiladores para las distintas familias de microcontroladores Microchip PIC® MCU: PCW IDE, PCWH IDE y PCWHD IDE. Ofrecen la posibilidad de que el usuario pueda elegir el compilador concreto para la familia que va a utilizar, y compilar en modo linea de comandos, tanto para Microsoft Windows, como para Linux. Para los usuarios de Microsoft Windows, también existe la posibilidad de utilizar su potente entorno de desarrollo PCWHD IDE, que incluye además de los compiladores para todas las familias de PICs y dsPICs, entre otras cosas, un editor de código con reconocimiento de comandos, un depurador ICD, y un Wizard que en base a lo que el usuario le indique, generará la mayor parte del código para inicializar el microcontrolador. Además incluyen una gran cantidad de librerías muy útiles para asociar con la rutina que estamos desarrollando. Este compilador también puede integrarse con MPLAB IDE. No es gratuito.
www.htsoft.com (HI-TECH) Sus herramientas más conocidas son PICC y PICC18. No son gratuitos.

Ejemplo: rutina que hace parpadear un led en el pin cero del puerto B cada 200 milisegundos en lenguaje C empleando el software de CCS PCW IDE:


Lenguaje Ensamblador:

Ventajas:


* Es el lenguaje de bajo nivel natural de la línea PIC tanto para gama baja, media o alta.

* Con el se tiene un aprovechamiento eficiente de los recursos del PIC.

* Se pueden crear macros con este lenguaje, para después simplificar el código en diferentes desarrollos.

* Con el se pueden controlar los tiempos y los registros bit a bit.

* Excelente para manejar interrupciones simultáneas.

* Cuando se genera el archivo .hex éste es completamente optimizado.


Desventajas:

* Tiempo en desarrollo de un proyecto.

* Los programas hecho de un PIC específicos no te funcionan a otro PIC o a otro microcontroladores como AVR, Motorola, Z80, PIC32. Hay casos que entre PIC se puede con ligera modificación.

* Difícil detectar fallos si es muy grande el proyecto, también se complica la organización de bloques de códigos en algunos casos.



El compilador para este lenguaje es el MPLAB IDE el cual se consigue totalmente gratuito en la página de Microchip y constantemente están sacando nuevas versiones, debe aclararse que este solo funciona bajo ambiente Windows. Para Linux existe un versión alternativa llamada: Piklab la cual presenta simuladores, editores, ensambladores y soporta una gran cantidad de compiladores C para PIC.

Ejemplo: rutina que hace parpadear un led en el pin cero del puerto B cada 200 milisegundos en lenguaje Ensamblador empleando el software de Microchip MPLAB IDE:


CONCLUSIONES:

Después de haber analizado los diferentes aspectos que envuelven la programación de PICs en cuanto a los lenguajes,para trabajos profesionales se aconseja lo siguiente:


* Lo ideal es manejar el lenguaje ensamblador para los rangos de gama baja, media y alta por versatilidad y mejor aprovechamiento de recursos del PIC.

* Si usted va a comenzar con la programación de PICs debería primero dominar el lenguaje Ensamblador, no le aconsejaría el lenguaje BASIC. Una vez haya dominado el lenguaje Ensamblador para gama baja y media puede iniciarse con el lenguaje C.

* El Lenguaje C es un lenguaje de alto nivel y puede resultar útil combinándolo con el lenguaje Ensamblador ya que nos puede ahorrar tiempo de programación, depuración y simulación sobre todo en la gama alta y en los dsPIC.

* Puede emplear el Lenguaje C o el Ensamblador para crear macros que le simplifiquen desarrollos futuros.
 
Estamos hablando de pic, no de PC. Por otro lado hasta que los pics no tengan unos cuantos megas de memoria, da lo mismo usar asm o C.
Estoy de acuerdo en que es una polemica sin sentido.-
 
La verdad es que si, por lo menos se puede programar y hacer cositas con los PIC.

Una cosa curiosa. Si haces con un PIC 16F84A o 16F628A o el 16F88 un programa en ASM, por ejemplo:

Un control, como dependiendo de la entrada, obtienes unos resultados a su salida.

¿Cuántos €, pesos, plata, $, lo venderías?

Ya les diré de dónde saco esta pregunta.
 
WillyP dijo:
Estamos hablando de pic, no de PC. Por otro lado hasta que los pics no tengan unos cuantos megas de memoria, da lo mismo usar asm o C.
Estoy de acuerdo en que es una polemica sin sentido.-

pero hay calculos que se te haran perder tiempo en c ya hay micros optmizados para trabajar con el de la seria pic18 pa arriba....los calculos aritmeticos y todas esas cosas son mejor en c haci te ahorras cientos de lineas de programacionq ue te haran perder dias de sueño..
 
hay otro punto muy importante que casi no se ha tocado,

si no eres un experto en ASM, puede ser que tu codigo sea mas ineficiente que el generado por un compilador de C que realiza una optimizacion de codigo.

creo que es mas facil dominar y generar buen codigo en C que en ASM...
 
eidtech dijo:
hay otro punto muy importante que casi no se ha tocado,

si no eres un experto en ASM, puede ser que tu codigo sea mas ineficiente que el generado por un compilador de C que realiza una optimizacion de codigo.

creo que es mas facil dominar y generar buen codigo en C que en ASM...

¿Crees? Tal vez. el inexterto de asm aprende con el tiempo y si lo desea se vuelve experto mediante la práctica. No hay problema, con la práctica todo se consigue.

De todas meneras, es bueno aprender de todo un poco. Da igual con qué lenguaje hagas funcionar un PIC, AVR, Motorola, etc, lo que importa es que seamos capaz de hacer algo y que funcione.
 
Por mi parte, yo he programado en assembler siempre y lo sigo haciendo. Sin embargo estoy empezando a meterme con el C porque no sólo es muy potente sino que he perdido mucho tiempo haciendo rutinas de funciones que ya vienen implementadas muy eficientemente en C.
También todo es un tema de equilibrio, yo soy partidario de escribir el programa en C y mezclar con assembler donde realmente se necesite, es lo que se hace en PCs y en cualquier microprocesador aunque sea de lo más sencillo. Ahorra tiempo, es más eficiente.

Slds...
 
EL C lo implmentaron para los PIC sólo por ahorrar tiempo, el ASM a parte que te cabreas, da más la tabarra y tiempo. Aún así, le estoy cogiendo el gustillo al asm desafiante.
 
Hace tiempo estaba desarrollando un compilador de C para pic, pero despues de estarlo desarrollando llegue a la conclusión de ¿para qué?.

A menos que tengas gente que te ayude a crear las librerías. De las cuales muchas nunca he usado, y si las usamos es como un copiar y pegar avanzado, si aprendieramos a usar librerias en asm en realidad vienen siendo lo mismo.

Claro hay un solo C (revolcado por muchos ), :LOL:, pero hay muchos lenguajes de ensamblador por el tipo de arquitectura y fabricantes.

Por lo tanto, si solo usaramos un tipo de microcontrolador y solo una familia excelente el asm, pero en entornos empresariales que quieres que salga lo más pronto posible el proyecto, mejor pones al departamento de sistemas a crear un c para tus productos y al departamento de programación que usa C, que realize presentaciones y ejemplos para las empresas, pero desarrollar un buen lenguaje C depende de la arquitectura que se va a emplear y siempre quedan huecos que mejorar como en todo que tiene una embergadura considerable, y esto me recuerda cuando en INTEL se decía que su C era mejor que el GNU C, pero despues el GNU C mejoró su compilador de C y creo código más eficiente. Ahí me pregunte que tan importante es la velocidad de ejecución. No sería mejor implementar un FPGA, o un dispositivo a medida.

Bueno como dicen por ahí, conocete a ti mismo y conocerás a los demás. Si conoces C sabras para que y cuando te va a servir. Si conoces ensamblador de cualquier fabricante para sus familias sabras para que y cuando te va a servir. Y cuando emplear cada uno de ellos.

Codifiquen sin estres

Recuerden que la gente que desarrolla los compiladores son personas como todos nosotros. :LOL:
 
Todos los compiladores de C generan codigo ensamblador, ya que el micro no entiende otra cosa que no sea ensamblador, pero la funcion del compilador C es hacernos la vida mas simple al darnos instrucciones que nosotros entendemos

Casi todos los compiladores traen una funcion en el menu que dice "Ver codigo maquina" o en los archivos de salida generan un archivo *.lst que es la traduccion C--->Ensamblador--->Codigo Maquina
 
mabauti dijo:
Lo que genaran es codigo binario (codigo maquina) , el ensambaldor es un nivel arriba del codigo maquina

Efectivamente... pero el archivo lst ya contiene los nmemonicos equivalentes junto con el codigo maquina binario y ademas vienen agrupados para que indiquen que instruccion en C se intento traducir...
 
mabauti dijo:
Lo que genaran es codigo binario (codigo maquina) , el ensambaldor es un nivel arriba del codigo maquina

En realidad lo que genera un compilador, es un asm... de ahi se lo pasa al "ensamblador" y luego al linker...

Una de las principales tareas del compilador es generar un muy buen asm, lo mas optimo posible.
 
como genero el archivo .asm desde el compilador de borland C o cualquier otro compilador... lo que yo ucupo es el archivo .asm para meterlo a otro programa...


Me pueden explicar porfa
 
LaloMon dijo:
como genero el archivo .asm desde el compilador de borland C...
? ? ? Llamando al compilador sin argumentos te devuelve un resumen de las opciones de compilacion.
Para generar una salida en assembler es -S

Ej: BCC32 -S programa.cpp (lo mismo para 16bits o prog.c)
 
En el CCS podés poner

#asm

y aqui todas las instrucciones en ASM que quieras, finalizando con:

#endasm

y listo. Así se pueden mezclar ambos mundos sin problemas.
No querrás realizar una multiplicación de por ejemplo: 8*9 en assembler de pic.
En lo haces muy fácil y sin problemas, y para manejar los ADs como te dicen más arriba basta con utilizar el ASM.

Saludos!
 
Lamentablemente el C tiene esas falencias de compilar un codigo NO muy optimo en comparacion con el generado ensamblando.
Pero la rapidez y la facilidad con la que se hacen complicados programas en C me han hecho optar por el.

el CCS (compilador de C para micros) Full.... busquenlo en mi web..
 
Estoy de acuerdo con piratex (...que nombre!...), y a veces la compilación no solo es mala en optimización, sino que errada.
No se si el CCS tiene errores, pero el compilador MikroC si los tiene!
Por ejemplo, este simple código:
if(cont++ >10) {
cont = 0;
}
Si ven el ASM que genera el mikroC, nunca se incrementa el contador!

Por eso no hay como el assembler, que será mas lento y tedioso pero es eficiente y hace lo que yo quiero.
 
Claro todo esto para arquitectura de 8 bits.
Yo programo en C++, y en C para pc.

Pero desde que comence a hacerlo para microcontroladores, siempre quede decepcionado. Y para que al final no sean compatibles los C de los fabricantes de compiladores de C. No he entrado ya últimamente a postear porque me atore en un problema, en el cual la sintaxis y la logica estaban bien de acuerdo a las reglas de C. Sin embargo no hacia su trabajo la madre esa.

Lo desensamble solo para corroborrar que el buey no estaba manejando el apuntador como un apuntador sino como una variable más común que corriente, y leyendo durante una semana en los manuales en un ejemplo nada que ver con apuntadores aparecio la respuesta, VOLATILE era la solución a mis plegarias. Sin la cual el compilador tomaba el contenido de mi apuntador y lo pasaba a un registro y trabajaba con ese registro no con la dirección de ahi en lo sucesivo. Que poca.

Y cuando utilizo volatile en la declaración de mi apuntador, asunto resuelto. Que poca. Casi me revolcaba y me salía espuma por la boca, sino fuera por la felicidad de que el programa estaba funcionando.

En conclusión, quieres C standard en tu microcontrolador, utiliza un micro con mucha memoria o usas c para chingaderillas(por chingaderillas me refiero a cosas que haría uno en una pc). por ejemplo si utlizas printf ya se indigesta el microcontrolador, a menos que sean versiones recortadas. Prefiero mezclar C y ensamblador en proyectos grandes que solo utilizar C. C es bueno para unas cosas pero para otras es mejor utilizar ensamblador, y si hablamos que se les esta ocurriendo meter ahora java (jajajajajajajaja) tiene * en el cerebro, y lo digo por los celulares que son cada vez más lentos con la porque... hay otras cosas mejores que usar y disponibles. Claro todo esto para arquitectura de 8 bits.
 
Estoy de acuerdo con fitocondria, he visto muchas falencias en los compiladores C para PIC micros. Yo hace 15 años que programo en C++ para PC y nunca he visto esto!
No le tengan miedo al ASM. Utilicen MACROS y subrutinas. Reutilicen código que ya saben que funciona. En microchip hay rutinas ASM para todo! Solo hay que pegar las macros en nuestro código y listo.
426ivan dice: "No querrás realizar una multiplicación de por ejemplo: 8*9 en assembler de pic. "
Por supuesto que sí, si tengo la rutina ya hecha, me la da microchip que es el fabricante! Igual que usar punto flotante, divisiones con 32 bits, etc, etc.
 
Atrás
Arriba