Publicidad

viernes, 2 de diciembre de 2016

Ensamblador VS C

El adentrarse al mundo de los microcontroladores  para muchos no es una elección sino una obligación ya que la tira de materias de la escuela muchas veces la exige y para muchos el camino ya esta trazado es decir según la predilección del maestro y sus conocimientos nos introducirá a lenguaje ensamblador o lenguaje C.
Pero hay una pequeña parte de estudiantes que tienen la elección de aprender a programar microcontroladores según su elección ya sea porque el profesor les ha regalado ese derecho o porque simplemente te ha interesado el tema y quieres aprender a programarlos.
Un detalle que me gustaría aclarar es que cuando me refiero a la palabra “estudiante”  no quiere decir exclusivamente alguien que se esta formando en un centro de estudios ya sea facultad, bachillerato, colegio, etc. Me refiero a todo aquel que por alguna razón ha dejado la comodidad del sillón y decidio aprender un tema en especifico.

BIT

El lenguaje ensamblador  también es llamado lenguaje de bajo nivel y se le llama así porque es el lenguaje mas directo para programar un microcontrolador después de los nemónicos   generalmente  lo vamos a ver de la forma “LDAA, PORTB” es un lenguaje muy especifico y exacto .
Lenguaje C es conocido también como lenguaje de alto nivel y generalmente engloba muchas instrucciones de ensamblador y lo vamos a ver de la forma  “lcd_putc([“Hola Mundo“)” en este ejemplo se manda a desplegar en una LCD el mensaje “Hola mundo ” que en ensamblador  llevaría cuando menos 200 instrucciones.
Una de las cosas que gusta a muchos sobre el ensamblador es que tienes el control total sobre el microcontrolador que si bien es una ventaja si hace mas pesado la elaboración de un programa.
Con C la situación es más automática lo cual hace la elaboración del programa mas sencillo pero con cierta pérdida del control.
Como se que para muchos esta explicación los ha dejado como al principio vamos con una analogía.

ROBOT

Imaginemos que tenemos el control de un ser humano, el cual obedece nuestras ordenes y deseamos que de tres pasos hacia adelante (imaginemos que se encuentra de pie en un estado inicial) en ensamblador tendríamos que hacer a grandes rasgos algo asi:
→ Levanta la pierna izquierda
→ Impulsate hacia adelante
→Estira la pierna izquierda
→Levanta la pierna derecha
→Acerca la pierna derecha a la izquierda
→Estira la pierna Derecha
Este procedimiento lo tendría que repetir 3 veces para dar 3 pasos hacia adelante.
Con lenguaje C sería algo asi
→ Da un paso
→ Da un paso
→ Da un paso
En apariencia lenguaje C parece ser la mejor opción  pero veamos porque hay esa  diferencia.
Nuestro microcontrolador no entiende lenguaje C, el entiende mnemónicos que son números que generalmente vienen representados en números hexadecimales , a algunos de nosotros nos toco programar nuestro precioso microprocesador 8085 en nemónico y créanme terminas viendo números hexadecimales en todas partes, pero llego ensamblador que  si bien tenia cierto parecido con nemónico le dio mas coherencia a las líneas de programa . Los desarrolladores de lenguaje C para microcontroladores  agrupan instrucciones de ensamblador y las sintetizan a una sola instrucción, retomando el caso del cuerpo humano en ensamblador se tuvieron 6 lineasde código  el desarrollador de lenguaje C tomo esas 6 lineas de código las metio en una librería  en la cual puso una instrucción que le llamo “Da un paso”.

binarios

Todo parece indicar que no hay una buena razón para aprender ensamblador , pero… que pasa si la metodología que siguió el desarrollador de C para llevar a cabo un proceso no nos convence del todo, retomemos el ejemplo del cuerpo humano,  que pasa si sigo esta instrucciones para una persona que es alta o baja obviamente va a ver mayor o menor desplazamiento y si me importa la distancia de desplazamiento pues esas instrucciones en lenguaje C me quedan cortas pero como así esta diseñado o me acoplo con esas instrucciones o lo hago en ensamblador , a eso me refiero  con la perdida de control en lenguaje C.
Ya en términos formales cada uno de ellos tiene su fortaleza, mientras con lenguaje C la simplicidad nos ayuda a la rapidez para elaborar un programa, en ensamblador la exactitud es nuestro fuerte.
Y a todo esto ¿realmente vale la pena aprender ensamblador? Yo fui de los que aprendio primero con mnemónicos luego con ensamblador y finalmente lenguaje C, y siendo sinceros el 80% de mis programas los elaboro en lenguaje C, en diez años que llevo programando en lenguaje C me he topado con al menos 5 errores en el compilador C, errores que muchas veces me llevaron a revisar librerías de lenguaje C y modificarlas en ensamblador o acoplarlas a mis necesidades especificas y esto me ha hecho ganar proyectos y elaborarlos mas rapido, asi que a mi si me ha servido y mucho.

Human brain function represented by red and blue gears

¿A quien recomiendo aprender ensamblador? A todo el que desee aprender mas a fondo la programación de microcontroladores, pues si bien al menos en mi experiencia no ocupo mucho ensamblador el  haberlo aprendido me ayudo porque aprendi también mas sobre electrónica pues para empezar a interactuar con cualquier dispositivo llamese LCD, reloj de tiempo real (DS1307), memorias EEPROM, DAC, Buffer, etc  requieres leer y releer la hoja de datos de estos dispositivos y empezar a aventurarte a jugar con ellos con sus respectivos fallos y aciertos, y este conocimiento muchas veces hace la diferencia para ganar un puesto de trabajo, vencer en un concurso, o ganar licitaciones asi como algunos proyectos ya que te ayuda pensar diferente. Pero sí, desafortunadamente requiere mucho trabajo.  Asi que ensamblador es para todo aquel que desea mas conocimiento, le gusta la precisión, las cosas a detalle y que odia las “cajas negras”.
¿A quien recomiendo aprender lenguaje C? Tambien a todos, si bien ensamblador es exacto hay ciertas cosas que lenguaje C nos facilita, recuerdo mi primer programa en C el mentado “Hola mundo” en una LCD no podía creer que mis 200 lineas de código ensamblador fueran sustituidas por 3 lineas en lenguaje C , ese dia me sentí como su hubiera perdido el tiempo estudiando ensamblador, después me di cuenta que no fue asi pero bueno la idea es esa, simplicidad, pero no por eso poco poderoso, si no pregunten a aquellos que nos toco hacer una multiplicación o una división de números decimales o hacer un filtro pasabajos en ensamblador , ese si fue un dolor de cabeza, en lenguaje C solo escribes la formula y listo.
Como verán a estas alturas mi forma de ver estos dos lenguajes no son como rivales sino mas bien complementos,  como tal cada uno de ellos es fuerte en ciertas cosas y juntos son un arma muy poderosa.
Retomando una pregunta de uno de nuestros lectores  ¿Qué aprendo primero?
Creo que aprender primero lenguaje C es una ventaja porque nos introduce al mundo de los circuitos digitales de manera mas amigable y sencilla,  y para la mayoría eso va a ser mas que suficiente , ensamblador lo puedes aprender después cuando sientas que necesitas aprender mas cuando lenguaje C te ha empezado a hacer las cosas mas difíciles que fáciles.

No hay comentarios.:

Publicar un comentario

Publicidad