kernel linux para microcontroladores

Imagen de danielflorin
0 puntos

se que existen algunos proyectos parecido a lo que busco pero lamentablemente de pago o gratuitos en primer medida y luego hay que pagar para comprar modulos.

cada vez que tengo que hacer algo con microcontroladores tengo que escribir rutinas , pelearme con el programador etc etc . Me gustaria escribir un programa que pueda instalar en todos mis proyectos y luego con un terminal desde el pc , configurar los puertos y escribir los programas , pensaba en un linux instalado en los microchips , pero no tengo ni idea de como funciona un kernel....la teoria la sabe todo el mundo , esta en todos los libros pero de ahi a tener una idea mas acabada para poder escribir un programa que luego sea estandar hay un abismo .

si alguien me dice donde encontrar esa informacion lo agradecere infinitamente , por supuesto si tengo resultados favorables , publicare todo todo 

Imagen de neko
+1
0
-1

Hola, yo tambien llevo cierto tiempo en este mundillo de los microcontroladores y te voy a contar lo que he ido viendo.

 

Ya que este foro es sobre linux, empezaremos por él.

Al decir microcontrolador, a que te refieres exactamente?

Por ejemplo, si usas un ARM no vas a tener ningun problema en encontrar alguna distro o compilarte tu mismo un kernel y tener programas mas o menos estandar.

 Ahora el mayor problema  para poder hacer un kernel linux sobre un microcontrolador es que no disponen de MMU (gestion de memoria). Los microprocesadores/microcontroladores que estan diseñados para que puedan tener un sistema operativo, disponen de unas instrucciones hardware (p.e. test o swap, o modos usuario/supervisor, o la mencionada MMU) que aseguren un correcto funcionamiento del sistema (ademas de simplificar el diseño del SO), estas cosas también podian realizarse por soft, pero además de que elevaria de sobremanera la carga del micro, tampoco te aseguran que el funcionamiento sea coherente y podria fallar en el momento que menos te lo esperas (Estoy escribiendo una especie de kernel para la familia del 8051, que si llego a algo razonable lo liberare, y este micro no tiene nada de lo comentado. Pues si tengo 2 o 3 tareas con baja carga de eventos/mensajes funciona de maravilla, pero en cuanto tengo 5 o 6 y muchos pasos de mensajes en el momento menos pensado, al poco de arrancar normalmente, se queda flipado y adivina por donde se ha ido... ).

 Hay por ahí una distribucion (creo que para el motorola 68000) llamada uClinux que tiene buena pinta, aunque no la he probado (no dispongo de tal micro entre mi "arsenal").

 

Has dicho "en los microchips" he de suponer que usas los PIC de Microchip? No los conozco muy bien, pero hasta lo que se no disponen de MMU por ejemplo, asi que portar un linux puede ser una tarea titanica (yo me lo pense para el 8051, por suerte inspiré profundamente y se me paso ;) ).

 

De  todas formas, por ahi tienes montones de plaquitas que soportan linux (basadas la mayoria, sino todas, en ARM) que podian ser una buena opcion.

Y tambien tienes algun otro kernel para microcontroladores, que aunque sean en su version completa de pago tienes versiones lite que para trastear vienen bien (yo he probado uno llamado Salvo para el 8051 que me gustaba, de el saque las ideas para escribir el que estoy haciendo). 

 

Si bajamos un paso en la "escala evolutiva", podemos olvidarnos de los kernels y pensar en los Frameworks. Vendria a ser utilizar una estructura definida para los programas empleando unas librerias especificas adaptadas al sistema (el micro y todos los perifericos que disponga la tarjeta).

Seria lo que has dicho de  "cada vez que tengo que hacer algo con microcontroladores tengo que escribir rutinas", pues escribes esas rutinas una sola vez, la guardas en la libreria y la usas siempre que la necesites. Una estructura que se suele emplear mucho en los sistemas empotrados es la de maquina de estados. 

Por ejemplo, como Framework te podria hablar de la placa dsTINI390 que tengo (ahora van por la dsTINI400 www.dalsemi.com, Systronix hace placas parecidas) esta se puede programar en Java y hacer lo que comentabas de pasarle los programas por un terminal (tiene un pequeño "bash") y ejecutarlos. Para hacer cosillas viene muy bien, pero para segun que resulta bastante lenta en Java (haciendo pruebas de enviar mensajes por el bus CAN lograba enviar 30 por segundo en Java frente a 500 en C). Y bueno, haces un programa que ocupa 1K y tienes que cargar con los 400K (o mas) de la maquina virtual.

 

Así que mi consejo es que a menos que tu micro sea algo asi como un ARM o le pones un kernel muy ligero o no le pongas. Según para lo que lo vayas a usar vas a perder mas en rendimiento (en cuanto a memoria empleada y tiempos de ejecucion) de lo que puedes ganar en comodidad. 

Otro hecho que te señalo a tener en cuenta, es que la mayoria de los microcontroladores tienen la memoria Harvard (memoria de datos y programa separada) en vez de von newman (memoria de datos y programa junta). Lo que le quita flexibilidad a la hora de realizar un SO interesante.

 

 "Me gustaria escribir un programa que pueda instalar en todos mis proyectos y luego con un terminal desde el pc , configurar los puertos y escribir los programas"

Esto si que te lo recomiendo, ya que por un lado dejarás de pelearte con el programador ;) y ganarás tiempo y comodidad. Lo llevan todas las tarjetas que se precien.

Este programa se suele llamar Monitor y viene a ser como la BIOS de los PC (salvando las diferencias). Lo grabas en la tarjeta y luego directamente puedes arrancar la placa, enviarle el comando para grabar y por ejemplo desde un teminal con XMODEM le envias el programa.

 

Bueno, pues ya me despido, me parece que no me he centrado mucho en cuanto a lo que buscabas, pero al menos espero haberte aclarado algunas cosillas. De todas formas, aunque parezca que te estoy desanimando, todo lo contrario!!! Yo estoy en ello dia a dia y a pesar de las dificultades lo encuentro mas gratificante que la programación sobre PC.

 

Un saludo 

+1
0
-1
Imagen de danielflorin
+1
0
-1

antes que nada , gracias por responder

es ciertisimo lo de la memoria , solo un micro de microchip (que yo recuerde o haya visto , cosa que es muy imprecisa) era microprocesador/microcontrolador , pero no estaba en version flash...asi que nada , por lo que lo intentare con algun micro mas nuevo.

lo de la carga de tareas , por supuesto que habra que tenerlo en cuenta , pero hablamos de micros de 12 bits a 20 y hasta 40mhz de velocidad y 16 mega de eeprom......recuerdo (aqui viene el rollo del viejo ) haber administrado sistemas con unix corriendo a 16 mhz con los 8086 y soportando hasta 8 terminales , obviamente que el manejo de memoria del 8086 ya era superior a los microcontroladores actuales...bueno , un saludo y si te va bien podemos seguir posteando lo que consigamos

 

+1
0
-1
Imagen de neko
+1
0
-1

Hola de nuevo!

 

He estado mirando un poco (más) sobre el tema  y he visto que el uClinux que te comenté si que esta para chips sin MMU, pero aún así todos los ports que he visto son para micros de 32 bits (http://www.uclinux.org/index.html). Así que aun se podia pensar en portar este a un micro mas pequeño (pero manejar datos de 32bits en un micro de 8 es casi un suicidio).

 

También he visto que Salvo, el otro SO que te comente, está para los PICs, echale un ojo que ya te digo que a mi me pareció muy majo (http://www.pumpkininc.com/).

 

Has oido hablar del sdcc (compilador GNU que es para pequeños microcontroladores y que funciona en linux)? 

 

Y bueno, ahora es cuando me pongo en plan teórico/instructivo/pedante:

 - Todos los microcontroladores son microprocesadores. Un microcontrolador no es mas que un microprocesador con la periferia incluida dentro del mismo chip.

 - Aunque sea un PIC12 sigue siendo un micro de 8 bits (http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=74) . Los bits se miden por el tamaño de los datos que puede manejar de vez (podria decirse por el tamaño de los registros de uso general).

 - No te fies tanto de los MHz que de los MIPS. Depende mucho de la estructura de los micros como manejan el reloj. Te pongo 4 ejemplos de la familia del 51 a 12MHz:

80C51 - 1MIPS

80C320 - 2MIPS

uPSD3312 - 3MIPS

80C390 - 6MIPS (doblando la velocidad del cristal internamente) 

 

Y para terminar, la curiosidad histórico-cientifica,  yo lo ejecutaba sobre un 8088 a 4MHz (eso si, sin terminales colgando) y lo unico que me acuerdo es que ocupaba 80 disquetes!!!

 

Un saludo 

+1
0
-1
Imagen de danielflorin
+1
0
-1

gracias por los datos , mirare a ver como es el tema de pumpkinic , por lo pronto me baje understanding linux kernel y me compre via amazon (me dio verguenza bajarmelo tambien) building embedded linux systems. , si no entiendo las cosas basicas no voy a poder avanzar.....supongo que haciendo una analogia con DOS (lo estudie a fondo)  debere dotar al pic de un  interprete de comandos  (bash) y funciones de las que se puedan colgar los programas para manejar las I/O , el sistema de archivos y el manejo de los recursos internos del micro....y el compilador C para poder hacer funcionar el pic desde una terminal.

Por suerte ya tengo una placa con un 16f877 , sensores de todo tipo y un lcd para visualizar , asi que solo tengo que ponerme a escribir codigo 

+1
0
-1
Imagen de danielflorin
+1
0
-1

como duele el pumpkinic!!! , 650 euros para los pics y alrededor de 1000 para los dsp ....me bajare los manuales y los estudiare nada mas

+1
0
-1
Imagen de toopazo
+1
0
-1

Hola, me acabo de crear una cuenta solo para responderles.
Resulta que soy estudiante de ing eléctrica, y en un proyecto para lanzar un Cubesat al espacio estamos usando microcontroladores (un pic24) y para programarlo usamos también Salvo.
Específicamente hemos trabajado harto con las configuraciones de los periféricos. Y ahora nos centraremos en crear las rutinas que comandarán el satélite (Bateria+paneles solares, TxRx y payloads).
Y en ese contexto me surgió las dudas de conocer otros RTOS para microcontroladores, además en un curso de la U hice un mini S.O. lo escribí en C, y básicamente es una maquina de estado que maneja el llamado a tareas (funciones que contienen las rutinas) dependiendo de flags de Semaforos y/o Delays.

Bueno, la verdad he escuchado que existen otros RTOS que son gratuitos también, como el FreeRTOS, a ver si te sirve.
Saludos

+1
0
-1
Imagen de Ligator
+1
0
-1

"Me gustaria escribir un programa que pueda instalar en todos mis proyectos y luego con un terminal desde el pc , configurar los puertos y escribir los programas,..."

Esto se puede hacer instalándole un programa bootloader a tu micro (sea cual sea), y cada vez que necesites reprogramarlo otra vez, puedes hacerlo a través del puerto serial o USB, cuidando de no sobre-escribir en la parte de la memoria de código donde se aloja tu programa boot.

+1
0
-1