2008-10-27 21 views
38

Mi compañía está utilizando Python para un proyecto incrustado relativamente simple. ¿Alguien más está usando Python en plataformas integradas? En general, está funcionando bien para nosotros, rápido para desarrollar aplicaciones, rápido para depurar. Me gusta la "concisión" general del lenguaje.¿Alguien que usa Python para proyectos integrados?

El único problema real que tengo en el trabajo diario es que la falta de comprobación estática frente a un compilador normal puede causar problemas al ejecutar, p. Ej. un simple gato accidental de una cadena y un int en una declaración de impresión puede derribar toda la aplicación.

Respuesta

8

En mi empleador anterior, había querido pasar tiempo jugando con la construcción de sistemas integrados en tinypy, que es una "implementación minimalista de Python en 64k de código". (Pero nunca llegué a eso y ya no tengo tiempo.)

10

Por cierto, consulte esta publicación en el blog: "Type inference for Python" para una discusión interesante de tipo de inferencia y tipado estático, incluyendo enlaces a algunas publicaciones del blog de Guido van Rossum agregando tipado estático opcional a Python.

Estoy de acuerdo con Bruce Eckel que es mejor practicar "pruebas fuertes" que confiar en la tipificación fuerte. Creo que eso se aplica igualmente bien al desarrollo integrado.

2

Tengo un servidor de Python (usando Twisted) y algunos scripts de ayuda que se ejecutan bajo XP Embedded, y ha estado funcionando muy bien.

1

¿No es el cliente EVE Online una obra maestra de Python en tiempo real y de alto rendimiento?

+1

EVE Online uso sin apilado otra implementación del lenguaje Python, es diferente entonces CPython y no tienen ninguna aplicación embebida, y todo universo de EVE está en un racimo grande. –

9

Personalmente, he trabajado en algunos de los programas que se ejecutan en el dispositivo utilizado por BusRadio. Es un ejemplo de un proyecto integrado construido en Twisted y Python. El dispositivo es un procesador integrado XScale que ejecuta una distribución debian-derived, por lo que puede no cumplir con ciertas definiciones de "incrustado", pero es bastante pequeño: cabe en el tablero de un autobús escolar.

Hubo algunos problemas interesantes con el uso de Python con bibliotecas grandes: el intérprete puede tardar bastante tiempo para iniciar y cargar todo el código de Twisted en un chip realmente lento, y algunas cosas necesitaban optimizaciones de casos especiales. Sin embargo, en ningún momento fue la naturaleza dinámica de Python un problema. El software en cuestión ciertamente no era perfecto, pero al menos cuando se utiliza Twisted, un error de programación simple no "reducirá toda la aplicación". Se registrará un rastreo y el proceso continúa.

Por lo tanto, si se encuentra en un entorno incrustado suficientemente restringido como para usar Python en primer lugar, no es diferente a desarrollar programas "regulares" (juegos, aplicaciones de escritorio, aplicaciones web). No necesita escribir estático allí, y tampoco lo necesita aquí.

+0

Destacaría cuán adecuado es usar Twisted en este escenario. – jjmontes

3

De hecho, Python se utiliza a menudo como un 'lenguaje de soporte' mientras necesita escribir algún tipo de pruebas - es decir, participé en un proyecto, cuya base de código de prueba (basada en Python) era (¿es?) Casi grande como la del producto principal. Python 'agents' trabaja en QNX, VxWorks, y la mayoría de los problemas que tenemos, era portar correctamente el hilo y las partes relacionadas con la red de nuestro código.

Puede valer la pena echar un vistazo OpenMoko project una gran cantidad de desarrollo integrado en Python se realiza allí.

Cosas a tener de salida: - soporte para el módulo de extensión de Python/C podría comportarse de manera muy extraña dependiendo de la plataforma/OS - la mayoría de plataformas integradas ofrece versiones bastante anticuado fuera de Python - finalmente se enterará de que hay una diferencia entre el software integrado "adecuado" en el que cada bit cuenta y el software integrado "moderno" que se ejecuta en CPUs XScale de> 412Mhz con más de 128MB, y luego Python simplemente no coincide con el hardware que le gustaría target :(

3

Utilizamos Python aquí en la universidad para aplicaciones integradas basadas en la plataforma de hardware Gumstix. Aunque es más capaz que los sistemas integrados tradicionales, encontramos la combinación de pequeños factor de forma, bajo consumo de energía (ish) y la facilidad de transferencia de código entre el desarrollo en máquinas de escritorio y el hardware de destino invaluable.

Python es también un gran lenguaje para enseñar a los estudiantes, y con el Gumstix es genial obtener código trabajando en un sistema de baja potencia, en lugar del dolor de cabeza y la angustia que trae el uso de lenguajes especializados como NesC.

4

El único problema real que tengo en el día a día de trabajo es que el último de estática comprobación frente a un compilador regular puede causar problemas a ser lanzado a tiempo de ejecución, por ejemplo, un simple gato accidental de una cadena y un int en una declaración de impresión puede hacer caer la aplicación completa.

Las pruebas de unidad son su única seguridad contra estas cosas.

3

Mi equipo escribió un software integrado hecho de C++ y Python. Decidimos escribir clases básicas y rutinas computacionales pesadas en C++. Escribimos lógica en Python. Aumente las bibliotecas como pegamento. Usar boost nunca es fácil, pero los resultados son excelentes. Rápido y fácil de modificar. Usando Python para representar las necesidades personalizadas, podemos satisfacer las necesidades de los clientes en tiempo real, cambiando el código usando técnicas de inyección. ¡Algo realmente emocionante! (Bueno, soy un friki;)

Comenzamos a crear prototipos en python, pero de repente nos dimos cuenta de que era claramente demasiado lento. Así que decidimos estructurar el programa en diferentes capas computacionales, para alcanzar los requisitos de velocidad. C++ fue la mejor solución.

Para usar python y C++ juntos teníamos que mantener un control estricto al escribir.

3

Trabajé para una empresa que utilizaba Python en un producto integrado basado en Atmel AVR32 y ejecutando Linux incorporado. El firmware se desarrolló inicialmente en una PC (debido a la falta de un prototipo de hardware en funcionamiento), y luego se trasladó al hardware incrustado que se ejecuta en el intérprete de Python compilado de forma cruzada.

La capacidad de depurar y modificar el código fuente "en vivo" en el dispositivo fue una gran ventaja durante el desarrollo y ahorró mucho tiempo. Las grandes desventajas eran la velocidad y el uso de memoria del intérprete de Python.

Después de la primera versión del firmware de producción transferimos secciones críticas de código a C/C++. El esfuerzo de portabilidad fue bastante sencillo y dio como resultado una mejora de varios órdenes de magnitud en el código de velocidad crítica (como era de esperar).

Incidentemente, la mayor parte del código de prueba de diseño y producción fue escrito en Python, principalmente se ejecuta dentro de un arnés de prueba en una PC.

+1

¿Puedo saber cómo se transfiere a C? Envoltorio de extensión Ctypes o python? – foresightyj

14

Utilizamos python en un montón de embedded boards with ARM processors y 16 MB de RAM (ejecutando linux).

Funciona muy bien y es muy fácil crear código personalizado rápidamente, uno de los puntos fuertes de python.

En cuanto a la confiabilidad del código, tratamos de tener una cobertura de prueba del 100%. Escribir pruebas con Python es muy rápido y te da una maravillosa sensación de confianza. Usamos twisted trial para ejecutar las pruebas e informar sobre la cobertura, pero hay muchas otras herramientas disponibles.

En mi experiencia, las pruebas de python + son más confiables y mucho más rápidas de escribir que cualquier otra alternativa.

El único inconveniente para el trabajo integrado es que a veces Python puede ser lento y, a veces, utiliza mucha memoria (en términos relativos). Esto todavía no nos causa problemas para detener el show, y python es bastante fácil de configurar tanto en velocidad como en memoria si se convierte en un problema.

pychecker es una herramienta muy útil que también puede atrapar un montón de errores comunes.

7

Telit hace GSM/GPRS modem modules que incluyen un embedded Python interpreter.

No los he probado a mí mismo, así que no sé cómo el intérprete de Python compara o se diferencia de una aplicación de PC, tales como que incluía módulos, memoria RAM y ROM límites, la velocidad de ejecución, etc.

Sin embargo, como señaló el usuario en un comentario, parece que usan Python 1.5.x, que es una versión verdaderamente antigua, por lo que tendría problemas para tomarlos en serio. Los desarrolladores de Python no disfrutarían la degradación de una versión tan antigua sin tantas características modernas de Python. Me preocuparían los problemas de seguridad con una versión tan antigua.

+0

Es una buena forma de codificar, pero hay algunos problemas de rendimiento cuando intenta hacer más en esa plataforma. Lo bueno es que la plataforma no es cara, lo cual es muy importante. Ver mi pregunta: http: // stackoverflow.com/questions/7943919/efficient-string-to-hex-function – INS

+1

Utilicé módulos GM862-GPS de Telit. El Python es de la versión 1.5.2 si no recuerdo mal. Sin embargo, la velocidad no es tan buena. No hay soporte para interrupciones, señales o hilos, por lo que su programa debe tener un súper bucle. Por lo tanto, solo es bueno para proyectos pequeños. Como el OP señaló que, debido a que Python no tiene verificación de tipo estático, puede bloquearse debido a algunos errores tipográficos o incorrectos. Lo que hice fue poner todo dentro de un gran intento, excepto bloquear e imprimir excepciones al puerto serie o incluso a un socket TCP, así sé lo que sucede. – foresightyj

7

He estado trabajando en equipos de telecomunicaciones de microondas basados ​​en powerpc viejo y lento y 16Mb de RAM.

Pude portar el intérprete de Python 2.6.1 en VxWorks, para tener el intérprete de línea de comandos disponible directamente desde el shell de destino, o para ejecutar los scripts de python cargados en el flash de destino.

Utilizamos esos scripts para realizar el autotest en el objetivo o ejecutar procedimientos de diagnóstico. Aquí algunos detalles de todo el procedimiento: HOW TO: Port Python to VxWorks

-4

Blockquote El único problema real que tengo en el trabajo del día a día es que el último de comprobación estática frente a un compilador regular puede causar problemas para ser echada en tiempo de ejecución , p.ej un simple gato accidental de una cadena y un int en una declaración de impresión puede bajar toda la aplicación

Para mí es un gran negocio. Los problemas que puede encontrar en tiempo de compilación y solucionar el problema ahora tienen que depender del tiempo de ejecución. No saber el tipo de datos y tener que escribir funciones adicionales solo para verificar el tipo de datos es complicado. No hay necesidad de hacer eso en C. ¿Cómo declararías 'volátil' en Python?

cita en bloque Las únicas desventajas para el trabajo incorporado es que a veces pitón puede ser lento ya veces se utiliza una gran cantidad de memoria (en términos relativos).Esto todavía no nos causa problemas para detener el show, y python es bastante fácil de configurar tanto en velocidad como en memoria si se convierte en un problema.

Esto también es enorme. Para los sistemas integrados o la restricción de tiempo RTOS es muy importante.

Python no es necesario codificar rápidamente. Realmente depende del idioma con el que te sientas cómodo. Honestamente, me toma 1 día escribir la función y la orientación de objetos innecesarios que puedo hacer en 2 horas en C. Las pruebas son tan inconvenientes que tengo que escribir el código, py_compile, copiar pyc en el objetivo y luego ejecutar el programa, luego python deja de quejarse la variable no definida o escribe el error de lanzamiento o alguna pequeña cosa como esa.

Mi sugerencia es C toolchain está disponible para cualquier objetivo. C es rápido, orientado al hardware, desafiante y divertido. Quédese con C para sistemas embebidos. No es necesario instalar paquetes tontos de python solo para ejecutarlo.

3

En mi experiencia, Python se ha usado tradicionalmente en entornos de escritorio más que en el campo incrustado. Hay dos razones, relacionadas con el hecho de que Python se interpreta:

  • C/C++ idiomas tienen mayor rendimiento que Python (y esto es importante en sistemas embebidos con un microcontrolador lenta)
  • idiomas
  • C/C++ tienen tiempos de respuesta más determinísticos (y esto es importante en sistemas integrados en tiempo real que controlan algo).

Por supuesto, como los sistemas integrados serán más rápidos y el tiempo de comercialización más corto, Python será más adoptado en el sector integrado.

2

desarrollos recientes

  • MicroPython es una aplicación ligero y rápido del lenguaje de programación Python 3 que está optimizado para funcionar en un microcontrolador.
  • La Agencia Espacial Europea (ESA) es funding further development of MicroPython. Lo hace para evaluar la idoneidad del idioma para las aplicaciones basadas en el espacio, en particular para las cargas útiles.
  • WiPy 1,0 & 2,0, Lopy & SiPy son plataformas MicroPython inalámbricos vendidos por Pycom.

The WiPy 1.0

-1

estoy usando un módulo serie Gatetel GT-HE910 que incrusta el módem Telit incluyendo 3G, GPS, AD, IO y Python 2.7. Esto se usa para una aplicación de adquisición de datos remota. Python es extremadamente lento en estos módulos, pero solo necesitamos una actualización cada 15 minutos o en una condición de alarma para que funcionen bien.

http://www.gatetel.com/#!gt-series/cscb

Cuestiones relacionadas