TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: DieccoF en 23 de Septiembre de 2006, 10:02:48
-
Buenas gente, tengo una gran confucion en mi cabeza, les cuento y quiero una pregunta lo mas sincera posible
Se programar en Assembler, aprendi bien y hace tiempo que lo hago para el 16F84, e derivado a otros pics de la gama baja, media y no mas de 16F877 programando en Assembler, mas adelante derivare a los DSPic. Por un lado me encanta este lenguaje (ASM) ya se me transformo en vicio y me cuesta soltarlo, pero en el fondo siento que debo aprender a programar en C por que ya me lo han dicho varios, entonces mi pregunta es para ustedes y ojala reciba la respuesta mas sincera
Que debo hacer, SEGUIR CON EL "ASSEMBLER" O MIGRAR AL "C" ?????
Desde ya Muchas Gracias.....
-
En mi humilde opinion te aconsejaria que migres a C, es mas comodo rapido
Si no supieras ASM te diria que aprendas C y luego el ASM pero como ya programas en ASM metele al C veras que cuando te acostumbres tampoco querras cambiarlo.
un saludo
-
Hola DieccoF, como por ahora as programado en .asm en las familias bajas y medias de los PIC, solo tienes 35 instrucciones del .asm, pero por ejemplo y siguiendo tu idea para el DSPic pasan a ser casi 250 instricciones con sus derivadas, algo muy dificil de recordar de memoria, por lo tanto creo que para las familias 18F en adelante lo mejor es el C, y eso te lo digo como un fanático del asembler que soy.
Un saludo.
Atte. CARLOS.
-
Buenas gente, tengo una gran confucion en mi cabeza, les cuento y quiero una pregunta lo mas sincera posible
Se programar en Assembler, aprendi bien y hace tiempo que lo hago para el 16F84, e derivado a otros pics de la gama baja, media y no mas de 16F877 programando en Assembler, mas adelante derivare a los DSPic. Por un lado me encanta este lenguaje (ASM) ya se me transformo en vicio y me cuesta soltarlo, pero en el fondo siento que debo aprender a programar en C por que ya me lo han dicho varios, entonces mi pregunta es para ustedes y ojala reciba la respuesta mas sincera
Que debo hacer, SEGUIR CON EL "ASSEMBLER" O MIGRAR AL "C" ?????
Desde ya Muchas Gracias.....
DieccoF , estoy alineado con el pensamiento de Carlos. Pero también depende de qué quieres hacer con los PIC o con los dsPIC. Si tu interes es hacer un par de programas y nada más o bien dedicar tu vida al tema y convertirte en un desarrollador de sistemas embebidos o un "embedded developer" como le dicen los Norteamericanos.
También empecé con el assembler en los 16F, y en los 18F. Para un proyecto largo, lo más aconsejable es usar el C aunque tengo proyectos hechos en assembler en los 16F que ocupan casi 8Kwords!! Imposible que entre ese código si lo hubiera hecho en C.
Para aprender a fondo la arquitectura el único camino que hay, en mi opinión es el assembler.
Soy fan del assembler porque soy fan de conocer el micro que programo, aún así en los 18F programo casi 100% en C. Las razones son varias:
. Me ahorro tiempo en el desarrollo
. Mis códigos son más fáciles de transportar de un 18F a otro 18F.
. Me permite abstraer problemas complejos de una forma más amena cuando hay muchos condicionales en la decisión de algunas cuestiones. Por ej. un software que debe tomar decisiones en función del resultado de muchas variables, el C es más directo. En una sola línea puedes poner un código que en assembler podría ocupar 20 o 50 líneas.
. A medida que fue pasando el tiempo han ido cayendo a mis manos proyectos cada vez más complejos, con montones de cosas para controlar, estímulos que afectan el comportamiento del hardware y posibilidades de conexión con el exterior.
Podría citar otras razones pero creo que estas son las más importantes.
Conozco la arquitectura de los 18F, eso me permite saber cómo codificar en C para que el código se ejecute más rápido y por otra parte ocupe menos!. El hecho de programar en C no significa que debes olvidarte de todo y darle (esto es muy común).
Eso sirve para un proyecto pequeño o para pequeñas cosas. Cuando debes hacer un proyecto que cuenta con muchas variables y varios condicionales, es fácil que en seguida llenes tu memoria de programa si no has sido cauteloso en estas cosas. No siempre la solución está en gastar unos dólares más y comprar un pic mas grande. A veces la solución pasa por conocer mejor la arquitectura y sacarle provecho. Esto , es un punto fundamental sobre todo en proyectos del cual se harán cientos o miles de unidades donde cada centavo de dólar cuenta.
Si alguna parte del código es crítica en tiempo o espacio, la codifico en assembler sin dudarlo.
Aún trabajando con dsPIC te sugiero que le eches un vistazo profundo a la datasheet, a la arquitectura de estos microcontroladores. Es cierto que tienen muchas instrucciones pero no por eso vas a codificar un filtro en assembler toda tu vida. Al menos échale un vistazo.
Conocer al arquitectura te permite poder encontrar errores en tus programas que si no lo sabes no los verás nunca.
Habiendo pasado por los 10F, 12F, 16F y 18F, te digo que asi mismo cuando viene un nuevo proyecto a mis manos analizo bien que pic usar. No porque ahora codifico en C18 en los 18F decidiré usar un PIC18 para todos mis proyectos!
a) Si tu proyecto se hará en pequeñas unidades y se le irán agregando cosas con el tiempo y además tienes margen económico para trabajar, entonces claro un 18F gana siempre. En ese caso lo codifico en C. Además uso el C18. Este no es el compilador más fácil o el que tenga mayor cantidad de librerías pero sí es muy versátil y configurable y puedes hacer cosas que con otros no se puede.
b) Ahora bien si te llega un proyecto del que se harán miles y debes meter un complejo firmware en un pic con 2Kword de memoria de programa y escasa RAM, bueno, ese proyecto lo hago en assembler.
Como resumen, aprende C, usa C, pero conóce el assembler así podrás tener el control y el conocimiento sobre lo que estás haciendo tú y lo que está haciendo tu PIC.
Saludos
-
Por favor no postees el mismo tema en varios foros, con uno es suficiente.
Un saludo
-
puedes mezclar los 2 lenguajes(siempre que tu compilador lo permita)
- para las cosas rapidas y de precisión: el ASM
- para las cosas muy grandes y complejas: el C
Salu2
-
Agradesco eternamente sus opiniones, en especial la aclaracion de nuestro amigo de cordoba argentian, me parece bien aprender en C es la conclusion que saco, hacique a partir de ahora, comenzare a programar en ese lenguaje, lo que no significa que abandone el assembler, voy a ver como puedo llevar los dos juntos en uno mismo sin que uno le quite a otro.
Mi pregunta es, ya que de compiladores C no conozco. Cada micro tiene su propio compilador C o existe uno general uno para todos???
Si es asi por favor recomendarme que obtener para luego seguir!!!
Se puede combinar C con assembler en un mismo programa ???
Gracias...
-
Hola.
Hay varios compiladores C para PICS. Cada uno con ciertas ventajas y desventajas segun las librerias disponibles en cada uno, y las familias/modelos de PICs soportados.
Es posible creo que en todos mezclar codigo C con ASM.
Saludos.
-
El "C" es un lenguaje general de programación que sirve para cualquier micro (incluido el micro de los PC's), eso si despues cada uno tienes sus peculiaridades dependiendo de los micros. Si uno aprende "C" con unas pocas modificaciones podra programar cualquier micro. Respecto a si pueden coexistir "C" y "ASM", la respuesta es sí.
Desde "C" se puede llamar a código en "ASM".
Por estos lares el compilador que mas se utiliza es el de CCS, habiendo muchos ejemplos y programas realizados. Creo que para empezar te puedes bajar una versión demo.
Un saludo
-
Con los respetos que se merecen Maunix y Palitroque les digo que se equivocan.
C definitivamente es la opcion para cualquier programador que necesite sacar productos al mercado, es OBLIGATORIO dominar el asm, porque uno sabe lo que esta pasando a nivel Hardware en nuestra placa, pero una vez que eso es tema conocido, les dire que se debe manejar C, simplemente por una sencilla razon, NI EL MEJOR DE LOS PROGRAMADORES DE ASM QUE EXISTA PUEDE COMPETIR CONTRA EL COMPILADOR DE C. Es un echo uno puede decidir si quiere optimizar su tamaño en tamaño o en velocidad, por eso les digo que por mas bueno que seas como programador estoy mas que seguro que tal vez y con mucha suerte y experiencia podrias igualar al compilador de C.
Aclarado esto, amigo te recomiendo que si sabes ASM y no quieres perder tu tiempo programando 5000 lineas de codigo para hacer un reloj con 4 o 5 alarmas, migres definitivamente a C, ya que por lo que dices manejas el ASM, seguro en algun momento lo vas a necesitar, pero con la memoria actual de los micros, e inclusive sin disponer de tanta, C optimizara tu programa mas de lo que tu podrias hacerlo programando en ASM. Mucha suerte
:-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/
-
Binario... no discutiré contigo. Solo creo que estás confundido.
Un compilador de C genera siempre algo más de código que un ensamblador. Un compilador de C, para cualquier equipo en el mejor de los casos generará el mismo código en ASM que alguien que sepa programar en ASM.
Por supuesto, hablamos de alguien que sepa programar en assembler y no de un novato que escriba 40 veces las mismas cosas.
Por último, te invito a que investigues más del tema, no solo para un pic (donde las diferencias son aún más a favor del assembler) sino para una plataforma tipo PC donde la memoria de datos y programa, son compartidas y esto optimiza aún mas el uso de punteros y demases. Aún así, ningún compilador de C logra igualar a un buen programador en ASSEMBLER.
Si hablamos de "generar código en unas horas" C es la opción. En unas horas tienes un soft andando sin saber mucho del tema. Si hablamos de "mantenibilidad", C de nuevo es la opción
Si hablamos de generar el código más óptimo posible, Assembler es la única opción en cualquier plataforma, micro o cosa que se te ocurra elegir.
El C no genera código cualquiera, el C genera código assembler y no deja de ser un software, por ende un código en C nunca puede ser más óptimo que uno en assembler
Es como decir que 1 < 1....
Saludos
-
bueno maunix, mi intencion tampoc era discutir contigo, estamos de acuerdo los dos que el c genera codigo asm, es por ello que te recuerdo que el compilador de C es no solo optimo sino que rapido y no es lo mismo pasarse 1 mes haciendo 8000 lineas de codigo que hacer un codigo corto en c y optimizar la compilacion para un micro determinado, en esta parte el compilador de C te generara un codigo en asembly que sera optimo segun tus necesidades en ciclos de reloj o en tamaño de programa en bytes, bueno salvado el mal entendido te mando un gran abrazo colega y coprovinciano cordobes. Respeto tu trayectoria y tus conocimientos y seguramente un buen programador podria lograr realizar un codigo mas optimo que el del compilador de c, en cualquier sistema basado en micro, ya sea un receptor de BLU, un radar, un Ordenador, un pequeño termometro, lo que sea de electronica, pero aca hablamos prontamente de factor tiempo, yo soy un enamorado del asm pero veo que es mejor programar en C por el factor tiempo y el factor optimizacion, bueno te saludo nuevamente.
:-/ :-/ :-/ :-/ :-/ :-/ :-/
-
Si, por supuesto. Nadie discute que programar en ASM ahorra tiempo, solo quería aclarar el punto de que un C no es más óptimo que ASM en código generado, por las razones que expliqué anteriormente.
Eso era todo.
Yo también se de Assembler pero sin embargo en la mayoría de mis proyectos uso C.
Saludos
-
hola,estoy leyendo la discusion que teneis con asm y c,por mi parte decir que que no tengo ni idea de c,y que desde que empeze a programar ensembler del Z80.
y luego los pic;
he intentado aprender c.pero cuando veo la cantidad de comandos y el orden que hay que seguir ,me da miedo aprenderlo.aunque se que algun dia tendre que hacerlo,pero solo porque se esta estandarizando,y cada dia hay menos gente que se decante por el ensembler,gracias a la potencia y abaratamiento de circuitos integrados.
la verdad es que estoy enamorado del asm,es lo mas cercano al chip.despues del codigo de maquina.y me gusta la perfeccion,que no es el C.
supongo que algunas personas nos desenvolvemos mejor con un lenguage que con otro.
asi que cada uno se decante por sus gustos o facilidad de desenvolverse. :-),y ante la duda .el ensembler.
-
Este es un tema de nunca acabar...
Siempre algunos van a tener que "pensar" en asm incluso en binario. Esos son los que desarrollan los micros, las herramientas de desarrollo y los compiladores.
El usuario final, me refiero al desarrollador, se convertirá poco a poco en "un mero creador de aplicaciones" (citando al autor Mariano Birnios)
La programación de pics, sigue la tendencia de los lenguajes de alto nivel para pc. Varios pasos atraz aún y en forma más lenta, pero en la misma dirección, para bien o para mal.
Yo no puedo programar en asm teniendo el C. Aun sacrificando esa sensación de mayor control que asm brinda... Pero esa es una apreciación muy personal, más allá de los argumentos.
-
Opino que el C se adapta más a la mayoria de las aplicaciones que el assembler.
El C es más portable.
El C permite desarrollar aplicaciones con lógica complicada de una forma simple.
He hecho proyectos complicados, con mucho manejo de datos en Assembler y si bien es posible (por supuesto siempre lo es) es realmente muy tedioso, lleva tiempo y también cuesta mantener ese tipo de código.
Para aplicaciones de gran uso de hardware, control de algún otro hardware en tiempo real, el assembler suele ser una opción casi única pero no quita que el C le gane en todo lo demás como opción más elegante.
Saludos
-
...
he intentado aprender c.pero cuando veo la cantidad de comandos y el orden que hay que seguir ,me da miedo aprenderlo.
...
al principio el cambio es traumático ya que uno tiene que acostumbrarse a otro lenguaje, y mas aún pasarse el switche cuando toca escribir de vuelta un código en asm por X causa, pero una vez que le agarras el hilo te acabaras enamorando del C :)