desktop

C vs ASM

Desde siempre he programado mis PICs en ASM y luego genero el correspondiente .HEX para finalmente cargarlo al PIC, pero he notado en mis googleadas en busca de información, que muchos usan C para programar y claramente noto que el código queda mucho mas sencillo y digerible que en ASM.

Y pues a eso me vienen unas preguntas:

1.- ¿Se pierde de alguna forma si se usa C en vez de ASM?
2.- ¿Qué es mejor, programar en C o ASM?
3.- ¿O más bien es cuestión de gustos y de acomodo el usar uno u otro?

Saludos a todos.
 
La desventaja de programar en C es q en general al compilar los programas son mas largos en tamaño que los ASM. Por lo tanto ocupa mas espacio en el micro y tarda mas en ejecutarse. Lo bueno es que puedes hacer mas complicados los programas al ser más sencillo programar segun q cosas. La eleccion de si utilizar ASM o C va a gustos y segun la complejidad de tu aplicacion. Si es algo muy sencillo no merece la pena utilizar C.
 
Con C lo sencillo se hace HYPER SENCILLO y lo dificil es mas facil de hacer! ahora eso si como dice el amigo arriba! el program te queda mas largo!, pero a pesar de eso vale la pena usar C, a menos que kieras estar pariendo en ASM....Te cuento pro mi experiencia personal estuve casi 4 meses tratando de hacer algo en ASM, y se me hacia muy complicado, al final cambie a C y en 15 dias, logre solucionar.
 
Hola, gracias por sus respuestas.

Entonces el único “pero” de usar C es el tamaño del código final, salvo este inconveniente, programar en C para PIC –según entiendo- supera ampliamente la programación en ASM, desde el punto de vista de la practicidad y la facilidad de programar.

Ahora pasando a los compiladores, cual se recomienda ¿?, hasta ahora todos los que me he encontrado son de paga, al parecer en este caso no hay de uso libre, como el MPLAB.

Saludos y gracias nuevamente.
 
Yo aun no me he puesto a programar en C para PIC aunq es algo q quiero empezar dentro de poco pero x lo q he visto por ahi el mejor compilador es el CCS. Lo malo q es de pago, te puedes bajar una demo de la web oficial pero no se q restricciones tiene. También ahi algun compilador de C q son gratuitos xo eso es cuestion de buscarlo y nose como deben ir.
 
Andale, ya me baje la demo del CCS C, la estoy explorando y de entrada la encuentro muy atractiva y funcional, el modo que tiene en que se exploran los registros de determinado PIC esta muy bueno, lo que no me gusta es que en 30 días se me va a acabar el gustito, o me lo compro o me quedo sin el, jejeje.

A lo mejor estoy confundido, pero alguna vez leí por acá que alguien tenía el CCS y que lo había obtenido gratis, yo creo que estoy delirando, ya que por los precios que exhiben en la página no me imagino que alguna vez fuera gratuito.

De forma paralela seguiré buscando una versión libre, aunque claramente me doy cuenta que difícilmente será tan funcional como el CCS. Cualquier información al respecto será de utilidad. Igual lo que encuentre lo comento aquí.

Saludos,
 
Personalmente yo programo en C, por facilidad y velocidad(hay aplicaciones de mas de mil líneas que sino depurar sería entre jodido e imposible), aunque tengo que añadir otro "pero" al tema: en C no tienes siempre acceso a todas las funcionalidades del pic, un ejemplo claro es: el ccs por ejemplo hace un año no te dejaba configurar los ADs como quisieras sino que te da a elegir entre unas opciones (decir que están mejorando y amplificadorando), pero (al pero) siempre esta introducir el código que te interesa en ASM que el compilador pa eso añade unas funciones mu guapax
 
Si ya estas estudiando ingenieria electronica te recomiendo ASM por que con eso programas hasta el mas minimo detalle, en C pues si se ve que en verdad es mas facil pero no tienes el control exacto de tu programa.
 
hola a todos!

Señores, si tienen razon, razon en todo a lo de c, solo hay algo en lo que no estoy de acuerdo, lo del acceso a las funcionalidades del pic, es decir, no hay cosa en c que no se pueda en ensamblador, por lo tanto, deberia de ser reciproco, sin necesidad de usar las instrucciones en asm dentro del c, pero bueno, cada quien verá como lo hace, en todo caso, para la versión gratis de ccs... yo tengo una en pcm, es decir, solo pics 16fxxxx y bueno, compatibles, no con los 18, se lo pueden bajar de aca:

http://leonardojaimes.iespana.es/descarga/software/index.html#prog

me comentan cualquier cosa, cuidensen...
 
Hola, apuntar que para aplicaciones en tiempo real es mejor usar asm porque puedes calcular el tiempo que tardan las instrucciones en ejecutarse. Por ejemplo en C igual no sabes cúantas instrucciones se deben ejecutar para calcular una multiplicación, si lo haces en ensamblador lo sabes.
 
¡Que manía tenemos todos los programadores de discutir sobre tonterías!
Programar en C o en ensamblador, pues en los dos. Si el compilador es bueno genera un código muy óptimo, igual que si lo hicieras tú mismo en ensamblador. Muchos compiladore te permiten compilar vía ensamblador, es decir, pasar el C a ASM y luego ensamblarlo. De esta forma se puede inspeccionar el ASM para mejorarlo, cambiarlo, o contar el número de microsegundos de una determinada rutina. Muchos compiladores admiten ensamblador en línea, usando la instrucción del preprocesador "#asm" se pueden poner segmentos de ensamblador en medio de un programa en C.
Es como discutir acerca de como ir al trabajo, andando o en autobús. Se vá mucho más rápido y cómodo en autobús, hasta donde te lleve, y luego terminas andando. Programar solo en ensamblador hoy en día es un atraso. Lo general se hace en C y para cosas muy, muy específicas se completa en ensamblador.
Otra cosa es la cuestión académica: hay que estudiar ensamblador aunque se use poco, porque es imprescindible para tener un conocimiento completo de como funcionan los micros.
 
Programar en ASM es mas eficaz y potente que en C. Pero C es mucho mas sencillo al ser mas abstracto. Lo mejor suele ser tirar de los dos, es decir, programar en C y luego donde creas poder o necesites optimizar el codigo irte al ASM.

Por otro lado no soy partidario de los PIC, yo soy mas de los AVR y 8051 (AT89C52) pero bueno eso ya harina de otro costal
 
cubeusk dijo:
Programar en ASM es mas eficaz y potente que en C. Pero C es mucho mas sencillo al ser mas abstracto. Lo mejor suele ser tirar de los dos, es decir, programar en C y luego donde creas poder o necesites optimizar el codigo irte al ASM.

Por otro lado no soy partidario de los PIC, yo soy mas de los AVR y 8051 (AT89C52) pero bueno eso ya harina de otro costal

Estoy de acuerdo casi en todo, yo no programo PIC, pero en cambio SX y Propeller, en el editor del SX "SX/B", lo podés programar en BASIC y luego lo abrís en ASM, por si querés editarlo, también se pueden pegar sobre el BASIC, rutinas en ASM.
El Propeller se Programa en Spin (un lenguaje bastante entendible), también se pueden pegar partes en ASM, pero la principal ventaja es que es orientado a objetos, así que si tenés un rutina para leer el mouse, lo único que debes hacer es llamarla desde el programa (debe estar en el raíz).
 
Yo para programar los 51 utilizo la demo del compilador para C de Keil (mejorado, ya sabeis ) y depuro en proteus. Y para los AVR el CodeVision que es muy bueno y muy potente (os recomiendo que lo probeis, hasta un niño podria programar con el) y depuro con AVRStudio o Proteus.
 
Hola a todos, creo personalmente que el ensamblador no es nada dificil y complicado si se conocen y entienden las intrucciones del microcontrolador y los bloques internos del pic. Ayuda muchisimo tener conocimiento de electrónica digital, de lo contrario ahí si se complica programar en ensamblador. El C permite programar un micro con exito aunque no se tenga conocimiento de electrónica y pienso que es una de las razones por las que se hizo tan popular ultimamente. Ademas de tener una serie de librerias que solo se copian se compilan y listo. Personalmente prefiero el ensamblador, pero hay cosas muy interesantes en C, por ejemplo la facilidad que brinda programar con estructuras. Por otro lado el C y me refiero al C18 que es el que estoy usando, permite mezclar ensamblador y C invocandolo de forma externa y de esta forma se puede compilar todo un programa escrito en ensamblador junto con C.
 
No estamos hablando de computadoras... solo de PIC!
Les parece difícil 35 instrucciones?
Para pics de hasta 4k basta con asembler. Sobre todo si ya tienes muchas macros y librerías hechas y funcionando.

Lo bueno de los PICs es que puedes hacer grandes cosas en poco tamaño y bajo costo, pero si usas C puedes excederte en tamaño y seguramente te excedereas en tiempo de ejecución.
 
WillyP dijo:
Hola a todos, creo personalmente que el ensamblador no es nada dificil y complicado si se conocen y entienden las intrucciones del microcontrolador y los bloques internos del pic. Ayuda muchisimo tener conocimiento de electrónica digital, de lo contrario ahí si se complica programar en ensamblador. El C permite programar un micro con exito aunque no se tenga conocimiento de electrónica y pienso que es una de las razones por las que se hizo tan popular ultimamente. Ademas de tener una serie de librerias que solo se copian se compilan y listo. Personalmente prefiero el ensamblador, pero hay cosas muy interesantes en C, por ejemplo la facilidad que brinda programar con estructuras. Por otro lado el C y me refiero al C18 que es el que estoy usando, permite mezclar ensamblador y C invocandolo de forma externa y de esta forma se puede compilar todo un programa escrito en ensamblador junto con C.

Este comentario te lo discuto. Para programar en C se necesitan los mismos conocimientos de electronica q necesitas para programar en assembler. Es decir muy pocos.

Todo compilador en C que sea ESTANDARD te permite mezclar codigo en assembler. Es la razon por la que es POPULAR C, (Que por cierto ya es popular desde los 70). En otras palabras, C no es popular por ser un lenguaje facil, sino por que es uno de los pocos lenguajes de alto nivel que te permite descender hasta "Tocar" el hardware subyacente (es decir programar en assembler).

Si tengo que programar un artefacto, digamos el control de una tostadora, en donde debo no solo programar el protocolo de comunicacion con el computador, sino tambien el manejo de los sensores, el control del display LCD, la senal PWM para control de temperatura, la interrupcion del boton de panico, el control PID del expulsor para que el pan no salte al ser expulsado, agradezco poder tener librerias que se encargan de lo basico y asi poder dedicarme a lo que en realidad me interesa, tener el prototipo funcionando rapido para q entre en produccion, y luego poder ir haciendo las optimizaciones en el codigo (usando assembler en las secciones que lo merezcan por velocidad) en las futuras revisiones. Pero claro, si mi proyecto se limita a hacer parpadear un LED, o a lo mucho mostrar un mensaje en un Display, caramba se lo puede hacer en assembler lo suficientemente rapido.

Javier Rambaldo dijo:
No estamos hablando de computadoras... solo de PIC!
Les parece difícil 35 instrucciones?
Para pics de hasta 4k basta con asembler. Sobre todo si ya tienes muchas macros y librerías hechas y funcionando.

Lo bueno de los PICs es que puedes hacer grandes cosas en poco tamaño y bajo costo, pero si usas C puedes excederte en tamaño y seguramente te excedereas en tiempo de ejecución.

No son solo pics. Si no te has dado cuenta, evolucionan con velocidad vertiginosa. Tal vez en unos anios, la arquitectura de 8 bits sea algo q solo encuentres en el museo, y el micro menos sofisticado que encuentres sea de 16 o 32 bits.

No obstante, tienes razon. Con tan poca memoria para programa, tal vez C no se justifiq.

Salu2.
 
Atrás
Arriba