Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola, hoy he recibido un email en el que me preguntaban si conocia algun manual de c orientado a robotica. Yo el libro que conozco que esta bastante bien es el del 16F84 de rama, pero viene todo en ensamblador. Así que si alguno sabeis algún libro en c...espero que le sirva para la gente principiante. Un saludo.
La portabilidad de código entre diferentes máquinas usando lenguajes como C o como Java es una utopía que solamente funciona hasta cierto punto.
Normalmente, una manera de aprovechar la potencia de una determinada máquina es precisamente utilizar aquellos detalles que la hacen innovadora, potente o tecnológicamente actual y si queremos hacer eso, nos encontraremos con que esos programas no funcionarán en máquinas con inferiores prestaciones. En lo básico si, pero no de manera general. Por eso, yo pienso que no hay que comerse mucho el coco con que un determinado lenguaje sea "super-portable" porque al final, ese código quedará obsoleto al igual que la máquina y probablemente sea reemplazado por otro mejor cuando el hardware acompañe. Es una simbiosis, nos guste o no y así parece que va a seguir siendo...
La portabilidad de código no es una utopia, es una realidad y es una de las principales funciones de un sistema operativo. Por ejemplo si tu cambias de tarjeta de video, no tienes que modificar las aplicaciones que corres, te basta con instalar los drivers correspondientes.
Igualmente tienes compatibilidad entre arquitecturas. Linux funciona sin problemas en más de una docena de arquitecturas diferentes... La unica razón de que no podamos hacer lo mismo con Windows es que a microsoft no le interesa comercialmente 😛
Ese mismo concepto de sistema operativo es el que yo planteo a pequeña escala en los microcontroladores, hacer capas de software que controlen a modo de drivers y los dispositivos del micro y que el resto del código mantenerlo en C estandar. Eso te permite reutilizar hasta el 95% del codigo cuando pasas de un micro a otro y nada te impide en ese 5% restante exprimir el hardware tanto como quieras.
Claro que todo tiene sus límites, esto no es mas que una método de desarrollo. Si tienes que añadir funciones para un nuevo hardware, pues las añades. El objetivo es ahorrarte trabajo reutilizando ese buen software que desarrollas de un proyecto a otro. A nivel de lenguaje C entre arquitecturas diferentes hay muchas mas similitudes que diferencias y tan solo es cuestion de sacarles partido.
Si, venga, un 95% reutilizable....
Tu crees que, por ejemplo, un juego java para un móvil se parece en algo a un juego para un PC ¿no? Ahora me puedes decir que si instalas la consola java en el pc se pueden usar los programas de otras plataformas, pero eso no es verdadera portabilidad, porque por esa regla de tres, lo mismo podríamos pensar de los programas que funcionan en equipos con programas emuladores, para los que en principio no fue programado.
Yuv, en el fondo tu idea es buena, pero en el mundo real de los microcontroladores no es demasiado práctica.
Ya te dije antes que todo tiene sus lógicos límites, y no estoy hablando de portabilidad de programas completos a cualquier cosa. Obviamente todo tiene sus diferencias, y las aplicaciones tienen que realizar funciones diferentes en cada plataforma, eso es obvio.
Lo que se trata es transladar el diseño por capas a la programación de microcontroladores. Tu cuando programas un robot, puedes abstraerte del microcontrolador, y usar librerias que te proporcionen puertos de comunicaciones, sensores, actuadores, buses... etc. Todo lo que va por encima de ellas y que es la mayor parte del software no varia. Para pasar de un hardware a otro solo tienes que reescribir un puñado de lineas y tan solo una vez para todos tus programas.
Ok yuv, entonces ahora ¡estamos de acuerdo!