Quiero aprender C. Quiero aprender sobre ARM. ¿Debo comenzar con un kit Arduino o algo así como un Sistema de Desarrollo?

Los lenguajes de programación de alto nivel como C ocultan los detalles de la arquitectura del conjunto de instrucciones del procesador subyacente, por lo que al aprender C no aprenderá mucho, si es que algo, acerca de una ISA como ARM. Sí, en C en particular es posible combinar C con lenguaje ensamblador, pero normalmente no tendrá mucho contacto con los niveles inferiores.

Los Arduinos se basan en microcontroladores ATmega (no ARM *); Si bien es posible programarlo en C, algunos de los modelos no le permitirán el máximo poder del lenguaje C.

Los procesadores ARM se utilizan principalmente en dispositivos móviles como teléfonos inteligentes y tabletas. Para programarlos, normalmente no usas C directa (aunque es posible): se espera que utilices marcos completos, en iOS tienes Objective-C (que _does_ tiene una parte “C”) y en Android el lenguaje estándar es java

Sin embargo, hay un dispositivo que es una computadora completa (puede reproducir videos Full HD a través de HDMI), se puede programar en C, así como en casi cualquier otro lenguaje de alto nivel, pero también le permite escribir ARM Lenguaje ensamblador: La Raspberry Pi.

Será un exceso excesivo para un controlador LED, pero tiene algunos puertos GPIO (los Arduinos generalmente son más adecuados para la electrónica digital de nivel inferior). Es lo suficientemente pequeño como para ser llevado por un marco de robot.

Existen varios sistemas operativos para él, en su mayoría basados ​​en el kernel de Linux, pero en realidad es realista trabajar en su propio sistema operativo desde cero.

Si necesita mejores tiempos de compilación en el Pi, puede compilar de forma bastante sencilla en una máquina más potente basada en x86, como una computadora de escritorio o portátil con Windows, Linux o MacOS.

* Edición: hay un Arduino que se basa en la arquitectura ARM, el Arduino Due. Verifiqué la Lista de tableros Arduino y los sistemas compatibles antes de escribir mi respuesta, pero fue fácil perderme

El Arduino sería un buen ambiente para aprender ambos, aunque usted usará bibliotecas C creadas para Arduino en lugar de las bibliotecas estándar. Por lo tanto, si comienza a escribir aplicaciones C para Linux, Windows u OS X, necesitará aprender un poco más en ese momento.

Tenga en cuenta que el hardware Arduino tiene recursos muy limitados, lo que lo hace más desafiante. Lo más probable es que escribas esta aplicación realmente bonita para Arduino, solo para descubrir que es 5 bytes demasiado grande para caber en la memoria. O su aplicación está asignando memoria y, de repente, se agota, pero no puede advertirle sobre esto porque no hay pantalla ni altavoz para enviar esa señal. ¡Tendrá que hacer su propia captura de errores y las excepciones son desconocidas para el Arduino!

Arduino – La referencia será tu mejor amigo una vez que comiences.

Además, los retoques con el hardware pueden ser un desafío. Por ejemplo, puede tener cuatro pantallas LED de 7 segmentos que desea usar para mostrar los números entre 0 y 9999. Cada pantalla tiene 8 pines, uno para cada segmento y otro para conexión a tierra. En total, necesitarías 28 pines en tu tablero para poder abordarlos todos. Desafortunadamente, solo tiene 13 pines digitales y 5 analógicos disponibles, por lo que deberá saber qué hardware necesitará (y comprarlo) para poder usar estas pantallas con menos pines. Lo que generalmente significa que necesita aprender protocolos de comunicación para varios CI y otras cosas.

Así que sí, será un reto interesante, como pasatiempo. Pero si quieres un trabajo, Arduino podría no ser lo mejor para empezar. Y tampoco lo es C.

Vea la respuesta de Nicolai Czempin a “Quiero aprender C.” Quiero aprender sobre ARM. ¿Debo comenzar con un kit Arduino o algo así como un Sistema de Desarrollo?

Un mejor dispositivo para aprender ARM en la Raspberry PI.

Supongo que has comprado un Arduino Due o Zero, porque de lo contrario estarías trabajando en la plataforma AVR, que no es lo que quieres. Supongo que también estás pensando en el metal desde aquí, porque de lo contrario, te iría mejor con una Raspberry Pi o un BeagleBone. Hay una buena cantidad de información sobre piratería a bajo nivel en las plataformas ARM de Arduino que debería poder comenzar; Probablemente también debería obtener una copia del manual de referencia de la arquitectura ARM, que no estoy seguro de que deba vincular, pero que puede encontrar en formato PDF en Google. (Querrá las partes que tratan específicamente con los núcleos Cortex-M).