Desarrollo del sistema de nivel inferior

4

Soy un desarrollador de software (que utiliza lenguajes de alto nivel como .NET, C, C ++, etc.) que trata de entender cómo funcionan las computadoras en un nivel inferior.

He hecho preguntas como las siguientes en el pasado y obtuve algunas respuestas útiles: Map Procesador para diagrama de circuito . He comprado una tabla Adruino para ayudarme.

¿Qué otro hardware compran los gurús de bajo nivel para aprender más sobre el hardware y la programación de bajo nivel? ¿Sería útil una Raspberry Pi (creo que están dirigidas a niños)? También estaba pensando en comprar una tableta.

    
pregunta w0051977

3 respuestas

8

¿Qué tan "bajo" quieres ir?

El IDE estándar de Arduino no es realmente para la programación de bajo nivel. Tiene bibliotecas listas para usar con interfaces de alto nivel, no tiene que preocuparse por la correcta inicialización de SFR, el diseño de la memoria y otros detalles.

Raspberry generalmente tiene un sistema operativo Linux en ejecución, y usted desarrolla un nivel muy alto. Es un sistema potente y flexible, por mucho no solo para niños, pero seguramente no es la mejor solución para comenzar cuando se quiere entender los niveles más bajos de una computadora.

Mi sugerencia, como ya tienes un Arduino: Estudie la hoja de datos del microcontrolador y use el IDE de Atmel estándar en lugar de ese material de desarrollo de alto nivel de Arduino. Comience a programarlo en ensamblador en lugar de C. Esto es realmente una diversión de bajo nivel :-)

Si desea un nivel aún más bajo, elija el diseño FPGA. Trate de obtener una biblioteca de SoftCore, aprenda VHDL, y puede examinar de manera práctica y muy detallada lo que sucede en una CPU.

    
respondido por el mic
4

No, Arduino o Raspberry Pi no son para programación de bajo nivel. Estos vienen con las bibliotecas y otros programas de software existentes cuyo trabajo es evitar el acceso a niveles bajos.

Para aprender realmente cómo funciona un procesador ejecutando un código de máquina, comience con un procesador simple y escriba en lenguaje ensamblador. Un pequeño paquete PIC 24 en 28 pin es un buen lugar para comenzar. Estos vienen con un oscilador interno, por lo que todo lo que necesita es conectar los pines de alimentación y conexión a tierra, las tapas de derivación y jalar el MCLR para llevar el hardware al lugar donde se ejecutará el código. El conjunto de instrucciones está muy bien documentado, y el ensamblador, el enlazador, el IDE, etc., están disponibles mediante descarga gratuita desde el sitio web de Microchip.

En realidad, inicialmente no necesitas hardware. El IDE de MPLAB viene con un simulador, que en realidad es un entorno de depuración muy agradable. Obtener un programa simple en funcionamiento en el simulador primero. Podrá realizar un solo paso a través de él y ver exactamente lo que están haciendo todos los registros. Incluso puedes darle entradas simuladas y ver qué hace con ellas. Una vez que el programa está funcionando en el simulador, puedes probarlo en un chip real.

Necesitará algún tipo de depurador / programador para obtener el programa en el hardware real. El depurador en circuito profesional es RealIce, pero he oído que el PicKit-3 es una alternativa viable de bajo costo, aunque personalmente no lo he utilizado.

    
respondido por el Olin Lathrop
2

Si ya tienes un Arduino, me quedaría con eso, va a ser mucho más comprensible que la Raspberry Pi, que es esencialmente un pequeño escritorio que ejecuta Linux en un factor de forma muy pequeño.

Mientras que con el Arduino, todo el sistema es lo suficientemente simple como para que puedan entenderlo.

No dijiste qué Arduino tienes, pero en cualquier caso, debes averiguar qué procesador ATmega está en tu tablero y luego descargar la hoja de datos para él. No descargue solo el resumen, descargue la hoja de datos completa que tendrá varios cientos de páginas. Por ejemplo, aquí está la hoja de datos para el ATmega328 , que es el microcontrolador utilizado en el Arduino Uno.

Aunque no es necesario para programar el Arduino en su versión de Sketch de C ++ (sospecho que pocos propietarios de Arduino se han tomado la molestia de descargar la hoja de datos, o incluso saben que existe una), al leerlo obtendrá una idea de lo que hay dentro El microcontrolador.

Un microcontrolador como el ATmega es mucho más que una CPU: tiene memoria flash programable, RAM, EEPROM, una gran cantidad de E / S que incluyen puertos paralelos, interfaces seriales (UARTS, SPI, I2C) y un ADC. (convertidor analógico a digital), y temporizadores. Habrá una sección separada en la hoja de datos para cada uno de estos temas.

No espere entender todo, o incluso mucho para empezar. Sin embargo, al ser un programador de lenguaje de alto nivel, es probable que esté interesado en los diversos registros internos, incluidos los 32 registros de propósito general y cómo se utilizan, los diversos modos de direccionamiento (hay varios, algunos bastante complejos) y el conjunto de instrucciones. parece.

Por ejemplo, hay un modo de direccionamiento, "direccionamiento de memoria de datos indirectos con incremento posterior", que permite implementar una referencia de C ++ como * x ++ en una sola instrucción.

Si nunca ha realizado la programación en lenguaje ensamblador, mirar los registros, el conjunto de instrucciones y los modos de direccionamiento le dará una idea de lo que está pasando dentro de ese nivel.

Luego tome mucho en todas las secciones que describen la E / S en el ATmeaga. Por ejemplo, mirar la descripción de los puertos GPIO para el ATmega le dará una mejor idea de lo que está sucediendo cuando usa las llamadas pinMode y digitalWrite / digitialRead, por ejemplo. Es posible que desee comprar algunos escudos adicionales para su Arduino para que pueda experimentar haciendo varios tipos de E / S.

Aunque comprar una tableta es una buena idea por muchas razones, no te ayudará a entender cómo funciona una computadora en absoluto.

Al igual que otros microcontroladores pequeños, por ejemplo, los PIC, es posible acceder al hardware en una placa Arduino; solo piense que es una placa de desarrollo AVR. No tienes que usar ninguna de las bibliotecas si no quieres.

Por ejemplo, para leer y escribir los puertos, puede utilizar las instrucciones:

DDRB = 0x01;    // set data direction register for port B to output
PORTB = 0x01;   // set bit 1 of PORTB

Esencialmente, ahora estás programando en C puro, no en C ++. Aquí hay más información sobre programar el Arduino en C .

Si no le gusta el IDE de Arduino, puede programar en Visual Studio o Atmel Studio IDEs.

Si realmente desea conocer el hardware, puede programar en lenguaje ensamblador usando las instrucciones en la hoja de datos que descargó anteriormente. "Programación arduino en ensamblador" de Google (sin las comillas) para muchos enlaces sobre este tema.

Aquí hay un tutorial de una hora en YouTube sobre la programación del ensamblador de la posada Arduino.

Y aquí hay un código de ejemplo: una subrutina para encender y apagar un LED en el ensamblador:

#include "avr/io.h"
#include "asmtest.h"

.global asminit
asminit:
sbi  4,5; 4 = DDRB (0x24 - 0x20). Bit 5 = pin 13
ret

.global led ; The assembly function must be declared as global
led:
cpi r24, 0x01 ; Parameter passed by caller in r24
breq turnoff
sbi 5, 5; 5 = PORTB (0x25 - 0x20). Bit 5 = pin 13
ret
turnoff:
cbi 5, 5; 5 = PORTB (0x25 - 0x20). Bit 5 = pin 13
ret

que se ensambla como un archivo .s separado. El código completo para el ejemplo de LED parpadeante de Arduino en el ensamblador, que muestra el uso de varios de los 32 registros de propósito general de Arduino, puede ser encontrado aquí .

    
respondido por el tcrosley

Lea otras preguntas en las etiquetas