# C vs ASM



## alejandro_oo (Nov 23, 2006)

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.


----------



## hawk360 (Nov 24, 2006)

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.


----------



## Turkito (Nov 24, 2006)

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.


----------



## alejandro_oo (Nov 24, 2006)

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.


----------



## hawk360 (Nov 25, 2006)

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.


----------



## alejandro_oo (Nov 25, 2006)

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,


----------



## hawk360 (Nov 26, 2006)

Del emule seguro q te puedes bajar la version de pago gratis pero eso si, estaras cometiendo un delito y todo ese rollo de la pirateria...


----------



## kepelotas (Dic 4, 2006)

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


----------



## carlosxyz (Feb 19, 2007)

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.


----------



## leo_programer (Feb 20, 2007)

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...


----------



## strakk82 (Feb 20, 2007)

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.


----------



## heli (Feb 21, 2007)

¡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.


----------



## cubeusk (Feb 22, 2007)

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


----------



## Aristides (Feb 22, 2007)

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).


----------



## cubeusk (Feb 22, 2007)

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.


----------



## macraig (Mar 21, 2008)

Mi respuesta es definitivamente C. No creo q se hubiera llegado muy lejos si todavia programaramos las computadoras en assembler...

Salu2


----------



## mabauti (Mar 21, 2008)

C para grandes programas y ASM para eficiencia de uso de memoria


----------



## WillyP (Mar 27, 2008)

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.


----------



## Javier Rambaldo (Mar 27, 2008)

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.


----------



## macraig (Mar 27, 2008)

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.


----------



## Meta (Mar 27, 2008)

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.


----------



## WillyP (Mar 27, 2008)

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.-


----------



## Meta (Mar 27, 2008)

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._


----------



## microtronic (Mar 27, 2008)

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..


----------



## eidtech (Mar 27, 2008)

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...


----------



## Meta (Mar 27, 2008)

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.


----------



## SigmaOrion (Mar 28, 2008)

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...


----------



## Meta (Mar 28, 2008)

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.


----------



## fitocondria (May 11, 2008)

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 ), , 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.


----------



## Chico3001 (Jun 26, 2008)

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 (Jun 26, 2008)

Lo que genaran es codigo binario (codigo maquina) , el ensambaldor es un nivel arriba del codigo maquina


----------



## Chico3001 (Jun 26, 2008)

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...


----------



## eidtech (Jun 26, 2008)

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.


----------



## LaloMon (Jun 27, 2008)

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


----------



## Eduardo (Jun 27, 2008)

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)


----------



## 426ivan (Jul 1, 2008)

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!


----------



## piratex (Jul 1, 2008)

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..


----------



## Javier Rambaldo (Jul 1, 2008)

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.


----------



## fitocondria (Jul 16, 2008)

*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.*


----------



## Javier Rambaldo (Jul 17, 2008)

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.


----------



## Javier Rambaldo (Jul 17, 2008)

Algo muy simple:
la común llamada a una tabla de datos en ASM, donde se utiliza  
ADD PCL,F
RETLW 11
RETLW 22
RETLW 33
etc, etc
No es posible hacerla en C. Un array de datos en C utiliza memoria RAM, y es muy costosa en los PIC!
Esto es porque el C no fue hecho para ahorrar memoria, no fue hecho para micros de 8 bits. Es por eso que todos los trucos conocidos en ASM no podran hacerlos en C.
Y si me dicen que use #asm .....para que usar un compilar C?


----------



## mcrven (Jul 17, 2008)

Amigos todos, para los que no quieren o no pueden gastar recursos comprando "C", hay una forma de obtenerlos "GRATIS" y completamente legal.

Bajen de la red cualquier imagen de una Distro de Linux - la que más rabia les produzca - y en ellas encontrarán versiones de "C" y "C++" bajo licencia GPL, completamente gratuitas, al igual que las distros. También vienen otros lenguajes de programación.

Saludos:


----------



## LaloMon (Jul 17, 2008)

Para la Programacion de PIC´s  yo utilizo el compilador PIC C Compiler... y los pic´s ..

este compilador es muy bueno porque la programacion es en C y no tiene ningun problema.. bueno al menos nunca he tenido problemas


----------



## Javier Rambaldo (Jul 18, 2008)

mcrven dijo:
			
		

> Amigos todos, para los que no quieren o no pueden gastar recursos comprando "C", hay una forma de obtenerlos "GRATIS" y completamente legal.
> 
> Bajen de la red cualquier imagen de una Distro de Linux - la que más rabia les produzca - y en ellas encontrarán versiones de "C" y "C++" bajo licencia GPL, completamente gratuitas, al igual que las distros. También vienen otros lenguajes de programación.
> 
> Saludos:


Estas hablando de compilador para PC, no para micros de 8 bits...

Microsoft tiene una distribucion gratuita: 
http://www.microsoft.com/express/download/#webInstall

Borland tambien tiene el suyo:
Builder C++: http://www.codegear.com/downloads/free/cppbuilder
Turbo C++: http://cc.codegear.com/Free/turbocpp

y Dev C++ es una distro gratuita para windows:
http://www.bloodshed.net/dev/devcpp.html

y si quieren experimentar con otros ...aca tienen muchos mas...
http://www.freebyte.com/programming/cpp/


----------



## Chico3001 (Jul 18, 2008)

A mi me han recomendado el eclipse.... es GNU y se puede bajar para varias plataformas... incluyendo MAC y Windows, y ademas tiene capacidad de varios lenguajes basados en C como JavaScript

Incluso algunos fabricantes de microntroladores tambien lo usan para sus productos

http://www.eclipse.org/


----------



## Javier Rambaldo (Jul 18, 2008)

El Eclipse es un entorno de desarrollo (IDE). No es un compilador.
El elipse es de "sun" y esta especialmente diseñado para java.
Tambien se pueden poner compiladores C/C++.
Está para windows y para linux (y otros SO). 
Para arrancar no te lo recomiendo, porque es muy complicado el uso. Es mas facil e intuitivo el IDE de Borland o de MS.


----------



## MrJavo (Mar 5, 2009)

Hola a todos, 

Tendran algun programa que pase un codigo de C a assembler? Me pasaron un codigo en C para una aplicacion y lo necesito en asm que es en lo que suelo programar.... saludos y gracias!


----------



## Javier Rambaldo (Mar 5, 2009)

Es un programa para PIC?

De todas formas y para cualqueir caso, si tu compilas cualquier fuente C, el mismo compilador genera una salida en ASM. Quizás le tengas que decir al compilador que genere ese archivo, porque generalmente no tiene el habilitado este parámetro.

pero....no creo que te sirva de mucho...o mas bien, vas a tener un asm bastante complicado, porque los compiladores generan codigo asm no muy amigable. 

yo te aconsejo el compilador CCS, es el mejorcito:
http://www.ccsinformación.com


----------



## curioso207 (Jul 27, 2011)

yo la verdad no usaria el ccs porque he tenido malas experiencias con ese compilador cuando el programa comienza a crecer no te genera lineas compiladas en ciertas funciones simples como movimiento de datos ademas de que no te marca nada el compilador hasta que no checas el archivo .lst y lo vez por ti mismo yo te aconsejaria el compilador de microchip o el hitech esos no hacen tonterias si vas a programar en c aunque de antemano la arquitectura del pic no esta preparada para programarlo en c como los de freesacale que ya traen esta estructura por harware
 aun en los micros mas pequeños


----------



## snakewather (Jul 27, 2011)

Despues de MPLAb para ASM para c en Pics El CCS compiler es el mejor junto con Micro C.

Aunque CCS tiene mas poder en cuanto a librerias disponibles para USB.


----------



## neomatrix7776 (Sep 7, 2011)

saludos a todos, en mi opinion el assembler es el indicado para los microcontroladores, ya que la hoja de datos viene en assembler, si no sabes assembler simplemente no la ves.Personalmente recomiendo que se tiene que comenzar a programar en este lenguaje y una vez alcanzado un buen nivel pasar al c y luego a otros de alto nivel. si comienzas a programar primero en c y luego  quieres pasar al assembler se hace muy dificil hasta casi imposible.Tambien se tiene que recordar que la base del programa es un buen diagrama de flujo, el problema tiene que estar desarrollado, en el programa solo se busca como llegar a dicho desarrollo.gracias por su atencion.


----------

