¿Es posible escribir código de ensamblaje en línea en Python para Raspberry Pi?

Otras respuestas son buenas, particularmente la nota de que rara vez se requiere trabajar en ensamblador para acceder a hardware en bruto en un Pi. Python, y otros lenguajes Pi, casi universalmente tienen bibliotecas de soporte de hardware capaces de hacer los tipos de control que usted describe sin necesidad de ensamblador. Hay paquetes Python Pi bien soportados para GPIO, SPI e I2C; estos le brindan acceso de nivel bajo a la mayoría de las interfaces de hardware de Pi y un gran conjunto de dispositivos externos.

Sin embargo, si realmente desea hacer esto con el ensamblador en línea (y está dispuesto a trabajar un poco, ya sea ensamblando a mano o portando código), aquí hay un par de puntos de partida:

(el siguiente enlace muestra la mano incrustada o el código ensamblado externamente como una matriz de bytes que luego se llama a través de un puntero de función; torpe pero funciona, al menos en Intel x86 / x64: no veo problemas conceptuales con ARM pero no lo he intentado)

Montaje en línea en Python

(el siguiente es un hilo de Stack Exchange sobre ensambladores y desensambladores escritos en Python; x86 & ARM; varios enlaces a código útil para implementar sus propias soluciones)

Python lib para ensamblar x86, x64 y exploits ARM

Finalmente, un par de enlaces a recursos para aprender el ensamblaje de ARM en Pi. Si sigue la primera ruta mencionada anteriormente, el uso de un ensamblador externo proporcionaría los “datos” (código ensamblado) para cargar en la matriz.

Ensamblador ARM en Raspberry Pi – Capítulo 1

http://www.microdigitaled.com/AR…

No necesita escribir el ensamblaje para controlar la placa GPIO de Pi: el módulo RPi.gpio (que creo que viene preinstalado si usa la distribución `noobs` en su pi) incluye control sobre GPIO. Si cree que el software El rendimiento y no los tiempos del sistema pueden ser el problema; siempre puede ejecutar programas en C; puede usar Cython para compilar programas de Python en ejecutables en C (o como módulos de extensión rápida, puede ejecutar desde Python regular para mayor flexibilidad).

Aquí hay un par de enlaces a proyectos pi + GPIO

Tutorial de Raspberry Pi GPIO: explicaciones básicas – Pi My Life Up

Raspberry Pi GPIO Pins y Python | Hacer:

Proyectos Gordons

Debido a la velocidad del reloj del pi, la relativa crudeza de GPIO y la velocidad de Python, un pi no suele ser apropiado para tiempos muy ajustados; si está pensando en milisegundos en lugar de una fracción de segundos, puede encontrar el pi listo para usar no responde lo suficiente. Para cosas de alta velocidad, podría ser mejor para un microcontrolador puro como un Arduino (que generalmente está programado en C o C ++). Si desea seguir con Python en el ámbito del microcontrolador, considere el WiPy: un microcontrolador que ejecuta Micropython como su SO (por lo que, a diferencia de un Pi, no tiene que preocuparse por las interrupciones del SO que interfieren con los tiempos).

Si todavía siente la picazón de hacerlo en conjunto, y si lo hace, es mucho más duro de lo que nunca lo seré, puede encontrar esto interesante:

Lenguaje ensamblador Raspberry Pi Raspbian [Tercera edición]

He usado una Raspberry pi. Python tiene funciones para acceder a las líneas io en la frambuesa pi. Realmente no tiene que escribir su propio lenguaje ensamblador (¿SABE el lenguaje ensamblador del procesador en esta placa y las direcciones de las cosas que desea controlar, y qué escribir en esas direcciones?) Para controlar el incorporado io en el tablero.

En Python estándar, ciertamente no es posible insertar código de ensamblaje en línea. Sin embargo, Python tiene una excelente relación con C, y puede acoger una biblioteca en C donde realiza su programación de código de ensamblaje, utilizando ensamblaje en línea.

Se puede usar el código Python para componer cadenas de código de máquina en forma alfanumérica, ponerlas en un archivo y luego, con suerte, enviar el archivo a un ensamblador / enlazador apropiado para producir el código obcect apropiado.

Pero, ¿por qué uno podría molestarse en hacer esto?

Es posible hacer preguntas totalmente irrelevantes y este es un ejemplo.

W

No es posible, pero tampoco es necesario. Puedes hacerlo directamente en Python.