Pero ¿Qué es mejor? ¿Programar un MCU ó MPU en lenguaje
ensamblador? o bien, programarlo en lenguaje C. Pienso que esto es totalmente
relativo. En este tipo de cuestiones no hay absolutos. Para esto, me permito
comentarles que mi lenguaje favorito es el lenguaje ensamblador, este lenguaje
fue el primero que aprendí, con el que más tiempo tengo de experiencia y es el
que más me gusta, y la razón por la me gusta tanto no es porque sea un lenguaje
que por el único hecho de escuchar su nombre impone respeto, sino por su
simpleza. En mi opinión muy personal, el lenguaje ensamblador es un lenguaje
cubierto por infinidad de mitos. Para empezar, el ensamblador no es un lenguaje
difícil, al contrario; es el lenguaje más simple que existe, el más fácil. Es
el lenguaje que posee las instrucciones menos poderosas que pueden existir,
todas destinadas a un mínimo de ciclos de reloj posibles. El problema con el
lenguaje ensamblador radica en que para dominarlo, hay que saber electrónica,
aquí no hay de otra.
Ahora, en cuanto al lenguaje C, puedo decir que es el
lenguaje de programación por excelencia. El lenguaje C marcó una revolución en
cuanto a la programación y es el padre de toda la informática que vivimos hoy
en día.
Programar firmware en ensamblador tiene sus ventajas, pero la
única ventaja que encuentro realmente de peso para programar todo un firmware
en ensamblador es porque en todos los ambientes de desarrollo que conozco, es
gratuito. Yo en lo personal desde hace muchos años me he dedicado al desarrollo
de hardware y por ende, de firmware, y comercializo mis sistemas e incluso
tengo patentes. A todo esto, me ha apoyado mucho el lenguaje ensamblador porque
para poderlo utilizar, no necesito comprar una licencia y si quiero registrar
mi sistema, no necesito demostrar que compré la licencia de un compilador de
algún lenguaje de alto nivel como es el C.
Ahora, esto cambia radicalmente en la industria, las empresas
dedicadas al desarrollo de hardware, poseen licencias de compiladores en
lenguajes de alto nivel. Por lo menos en todas las empresas en las que he
trabajado desarrollando firmware, tanto nacionales como extranjeras, el
lenguaje oficial para el desarrollo de firmware es el lenguaje C. Y pienso que
esto está bien, ya que dentro de las ventajas de programar firmware en un
lenguaje de alto nivel como es el C, es que es mucho más rápido en cuanto a
desarrollo y la dificultad es la misma, incluso yo siempre he pensado que
programar firmware en C es bastante más difícil que programarlo en ensamblador
ya que tienes que cuidar mucho los detalles y tener mucha atención en cuanto al
consumo de recursos. Pero a final de cuentas, el firmware desarrollado en un
lenguaje de alto nivel es dinámico, ágil y rápido (en cuanto a tiempos de desarrollo).
Lo cual es lo que le interesa a la industria, por lo menos a empresas de
desarrollo grandes y serias. A una empresa no le interesa que su desarrollador
lo programe en ensamblador, o en un lenguaje de alto nivel, lo que le interesa
a una empresa son los tiempos y los resultados. Los resultados son iguales
programando en ensamblador o en un lenguaje de alto nivel, pero los tiempos…. Para
nada.
El lenguaje ensamblador fue muy popular en los
microcontroladores cuando estos eran los recién llegados dentro de la industria
del control digital. En esos tiempos, la arquitectura de los microcontroladores
era diferente a las arquitecturas que se manejan hoy en día, las capacidades de
los microcontroladores eran muy limitadas y por lo tanto, el lenguaje
ensamblador era más que adecuado para este tipo de arquitecturas.
En nuestros días, las arquitecturas de los microcontroladores
y microprocesadores son lo suficientemente robustas y poderosas, como para
tolerar lenguajes de alto nivel sin ningún problema, es más, no conozco alguna
empresa dentro de la industria del diseño de microcontroladores que no
recomiende utilizar el lenguaje C para las gamas más poderosas de sus
dispositivos. Empresas enormes de fabricación de circuitos integrados muchas
veces desarrollan microcontroladores y microprocesadores con arquitecturas
diseñadas específicamente para ser programadas en lenguajes de alto nivel como
lo es el C. Sinceramente no es concebible que se programe un microcontrolador
RENESAS de doble núcleo en ensamblador, eso sería una total pérdida de tiempo y
capacidades.
En fin, todo esto es relativo a la magnitud de tu proyecto,
si únicamente estas acostumbrado a programar microcontroladores de 8 bits para
mover un par de servomotores, controlar unos diodos LED, una pantallita LCD,
dos motorreductores y mandar esta información a una computadora; o bien,
prender y apagar 5 relevadores, 3 triacs, recibir información por bluetooth y
convertir 3 ó 4 señales analógicas a información digital (que también tiene
mérito por supuesto); pues… pienso que el lenguaje ensamblador es más que
adecuado y entiendo que por eso el lenguaje ensamblador sea lo único para ti.
Pero… qué sucede cuando hay que procesar grandes cantidades de
datos y los elementos que conviven con tu microcontrolador o en su caso
microprocesador están mucho más allá del dominio del mismo microcontrolador o
microprocesador. Cuando tu microcontrolador o microprocesador convive no solo
con motores DC o con interruptores o con pantallas o con sensores. Sino cuando
tu dispositivo convive con servidores informáticos, con bases de datos alojadas
en servidores remotos, con un ambiente web, con protocolos de comunicación tales
como http, ftp, tcp o udp. Cuando tu micro realiza almacenamiento masivo de
datos en dispositivos flash y se requiere de un FAT32 o incluso, cuando tu
microcontrolador funciona como un servidor web, o despacha una página web al
resto del mundo a través de su conectividad a internet.
Existen muchos microcontroladores y microprocesadores basados
en arquitecturas especializadas para lenguajes de alto nivel, como lo es la
arquitectura ARM, todos los microcontroladores y microprocesadores que he
utilizado con esta arquitectura se programan en C, o alguna versión de C,
llegando incluso a la programación con objetos como lo es C++ y C#. Otro
ejemplo de esto son los DSP’s de Texas Instruments líder, en el ramo del
Tratamiento Digital de Señales, siendo estos, los más poderosos que visto en
cuanto al ramo DSP y se programan en C.
Como conclusión puedo decir que programar un microcontrolador
de 8 bits en C no llegaría a ser lo más adecuado desde mi punto de vista. Ya
que la arquitectura de un microcontrolador de 8 bits es pequeña aunque poderosa.
Pero no veo la necesidad de que sea programado en alto nivel, en cambio un
microcontrolador de 32bits ó un DSP ó tal vez un microprocesador de
arquitectura ARM requieren una programación más adecuada a su arquitectura, y ésta
sería utilizando un lenguaje de alto nivel.
Muchas personas son partidarias de que el único lenguaje
válido para el desarrollo de firmware es el lenguaje ensamblador. Sin embargo
eso refleja mucho las limitaciones que tiene su conocimiento y su dominio del
área. Hoy en día existen muchos dispositivos poderosos que pueden ser
utilizados con variadas herramientas de desarrollo muy adecuadas para su
calibre. Mencionan mucho el famoso dispositivo ARDUINO, el cual yo considero una
herramienta didáctica muy eficiente, tal vez desde mi punto de vista, utilizar
un IDE tan grande y un lenguaje de alto nivel para un microcontrolador de 8
bits se me hace algo exagerado para ser aplicado a nivel profesional pero
finalmente el objetivo de todo esto es lograr un desarrollo funcional,
eficiente y que pueda ser comercializado a un precio accesible. Yo en lo
personal no utilizo ARDUINO para aplicaciones de 8bits, porque soy partidario
de que utilizar un microcontrolador barato y programarlo en ensamblador te da
una ventaja en cuanto a costo, lo cual ayuda a poder comercializar un hardware
como comentaba anteriormente, funcional, eficiente y a un precio accesible.
Pero, si esto lo logras utilizando un ARDUINO, programándolo en PHP o Pyton o Basic.
No le veo ningún problema, incluso tal vez hasta se tendría más mérito porque
igualar en costo un hardware desarrollado con un microcontrolador que te cuesta
50 pesos a un hardware desarrollado con un ARDUINO por ejemplo que te cuesta
200 pesos pues, requiere de mucho ingenio y habilidad.
Por último, haciendo referencia a las mismas publicaciones
que he visto por ahí en internet, veo que incluso incluyen comentarios que
atacan con la idea de que si programas en C es porque es más fácil y que lo
único es el ensamblador y que el hecho de programar en C un microcontrolador o
un ARDUINO no te hace ser ingeniero. Bueno, entonces ¿qué te hace ser
ingeniero? Yo programo en ensamblador desde que estaba en la preparatoria y no
únicamente microcontroladores. Y eso no me hacía ingeniero, ¿o sí? Creo que el
ser ingeniero se trata precisamente de aplicar el ingenio para resolver
problemas de manera funcional. Eso y el título, claro está.
En fin, a todas esas personas que atacan de esa manera las
diversas herramientas de desarrollo ajenas al lenguaje ensamblador, sepan que reflejan
una formación académica dolorosa debido al gran trabajo que les costó aprender
lo que saben a causa de sus inadecuadas capacidades y únicamente hacen más que evidente su poco
dominio en el área, su inadaptación frente a las nuevas tecnologías y su
desesperación frente a la amenaza de que sus desarrollos pueden ser fácilmente
reemplazados por tecnologías “fáciles”.
Los dejo con un link con otra opinión interesante:
http://youtu.be/iHFm-kVTXW8
Muchas gracias por su tiempo.
Saludos cordiales a todos.









