¿Por qué ARM? - Cika Electrónica SRL

Anuncio
Capítulo 3
¿Por qué ARM?
alharma o alf arma
(Del ár. alharmal )
1. f. Planta de la familia de las
Rutáceas, de unos cuatro
decímetros de altura, ramosa, con
hojas laciniadas y flores blancas,
muy olorosa, y cuyas semillas
sirven de condimento en Oriente,
y también se comen tostadas.
3.1.
¿Por qué 32-bits?
Como enunciáramos al abrir el libro, el mundo de los microprocesadores y microcontroladores ha ido evolucionando rápida y vertiginosamente,
adquiriendo características cada vez más complejas.
Desde un punto de vista constructivo, los sistemas microprocesados evolucionan siguiendo los requerimientos de su entorno de operación. En un
análisis simple, la demanda hacia sistemas de mayor ancho de palabra, como
por ejemplo 32-bits, radica en las siguientes causas, y seguramente muchas
otras más:
la necesidad de interfaces sumamente simples para usuarios con poca
alfabetización tecnológica: nadie quiere aprender a programar en assembler para poder hablar por teléfono. Estas interfaces requieren
extracto del libro “Desarrollo con Microcontroladores ARMCortex-M3”
113
3. ¿Por qué ARM?
una cantidad de código y datos mayor, que a su vez requiere de mayor
velocidad para su manejo en el mismo tiempo.
la avidez de los usuarios por consumir dibujitos y colores, como desprendimiento de la anterior. Ante dos interfaces equivalentes en todo
excepto la presencia del color, la que los tiene es más linda, y aunque
requiere más del doble de memoria y ancho de banda, es preferida.
la necesidad de procesar datos con mayor precisión. En muchos casos,
no se dispone de o no se quiere invertir en el tiempo necesario para
hacerlo en micros de 8-bits, y/o en lenguajes de bajo nivel.
la necesidad de llevar los productos al mercado en un tiempo más
corto, mueve a la utilización de lenguajes de programación de más
alto nivel; esto a su vez favorece el empleo de procesadores con más
capacidad de memoria, dado que este esquema suele utilizar mayor
cantidad de memoria en comparación a los lenguajes de bajo nivel.
la disponibilidad de sistemas operativos, multitarea, operación en tiempo real, sistemas de archivos y demás, hace más atractivos los entornos
en los cuales es más fácil hacer más cosas con menor intervención del
programador, y aún con menores conocimientos. Esto provoca una
potenciación mutua en cuanto se favorece a los micros más poderosos
y se da mayor soporte a éstos.
la migración de usuarios y programadores de computadoras al mundo
de los sistemas dedicados, hace que éstos quieran aplicar sus modelos y costumbres, con la consecuente necesidad del crecimiento de la
disponibilidad de recursos para poder satisfacerlos.
etc.
Si tuviera que elegir a ciegas entre un micro de 8-bits y uno de 32-bits, mi
elección no sería para nada fácil. La razón principal es que mi cerebro está
fuertemente condicionado por mi profesión y mi experiencia de muchos años
de desarrollo de electrónica general, hardware, y firmware en assembler
en micros de 8- y 16-bits, con lo cual me veo inmediatamente polarizado a
pensar la forma de hacer todo con ellos. No obstante, algunas aplicaciones
más comunes requieren el manejo de complejas interfaces gráficas, lo cual
no sólo es harto complicado hasta para el más obsesivo, sino que requiere
de una capacidad de memoria y velocidad de procesamiento muy difícil de
114
extracto del libro “Desarrollo con Microcontroladores ARMCortex-M3”
3.1. ¿Por qué 32-bits?
obtener en este ámbito. Mi decisión, entonces, estará basada en la complejidad del proyecto, el tiempo de desarrollo disponible, y el costo; tanto en
valor monetario como en energía de operación.
¿Pero qué opina aquél que ve el mundo no desde el hardware sino desde
el software? Seguramente alguien acostumbrado a disponer de un sistema
operativo, un API, la posibilidad de desarrollar en un lenguaje de alto
nivel, y una vasta cantidad de memoria valora mucho estos conceptos, y
prefiere desarrollar sobre un gran sistema de 32-bits, antes que perder el
pelo incrementando registros de 8-bits.
La respuesta al interrogante es más o menos obvia en ambos extremos.
Ante un controlador temporizado de muy bajo costo, con un botón,
un relé, y tal vez un LED que parpadea; siendo más barato que un
par de circuitos integrados de lógica, nadie dudaría en utilizar un
microcontrolador de 8-bits.1
Ante una aplicación con pantalla color sensible al tacto y una compleja
interfaz de usuario, pocos dudarían en emplear un hardware basado
en un procesador de aplicación, y hasta preferentemente desarrollar
sobre un sistema operativo que provea un API para resolver la parte
gráfica.
La duda parece cernirse sobre la franja media; sobre el sistema que es más
complejo que un simple control temporizado pero no requiere hacer malabares con un display color. Sin embargo, la economía nos provee de algunas
soluciones de compromiso:
El costo de un microcontrolador de 32-bits de gama baja a media es
menor que el de un micro de 8-bits de gama media a alta.
Un sistema con más recursos, que permita reducir el tiempo de desarrollo de firmware/software, tendrá un costo de desarrollo menor, al
utilizar menos tiempo de programador.2
Y si incluimos algunos detalles técnicos en la balanza:
1 Bueno, tal vez sí encontremos alguien que justifique hasta el utilizar una granja
de servidores en pos de muchas “features”. Convengamos en que se trata de una tarea
elemental sin demasiadas ambiciones.
2 El tiempo del programador está considerado uno de los costos de desarrollo más
altos, sino el más alto, en todo sistema que lo requiera. La disminución de este tiempo sin
tomar las medidas adecuadas aumenta considerablemente la probabilidad de existencia
de defectos (bugs) presentes en el código, muchos de los cuales pasan la inspección y
quedan como defectos latentes, pudiendo manifestarse luego en bochornosas y/o costosas
situaciones.
extracto del libro “Desarrollo con Microcontroladores ARMCortex-M3”
115
3. ¿Por qué ARM?
La cantidad de memoria de programa empleada para resolver aritmética de 16- y 32-bits en un micro de 32-bits con un set de instrucciones
comprimido como Thumb es igual o menor que la necesaria para resolver la misma tarea con un micro de 8- o incluso 16-bits.
La complejidad del código en assembler sigue las mismas pautas, y
un micro ortogonal de 32-bits con un set de instrucciones eficiente
permite que un compilador genere código más compacto.
Un microcontrolador de 32-bits no requiere el diseño de un hardware
complejo como un procesador de aplicación, siendo bastante similar
(si no igual) al de cualquier sistema microcontrolado.
Es decir, es altamente probable que más allá de los 16KB de código, un
micro de 32-bits sea más económico y eficiente para resolver la misma tarea
que uno de 8-bits.
En conclusión, cualquiera sea nuestra extracción, seguramente habrá
algunas razones más o menos importantes para que una u otra opción tenga
más o menos peso; hemos analizado los detalles básicos como para ayudarnos
a tomar una decisión y fijar ciertas pautas.
3.2.
¿Por qué ARM?
Muy bien, ya hemos detectado algunas de las situaciones en las cuales la
balanza se inclina para el lado de los 32-bits. ¿Por qué no, entonces, emplear
una PC industrial o cualquier otra cosa de 32- o más bits?
Si bien al gerente de tecnología y al programador en C++ pueden interesarle poco el hecho de que el procesador tenga una alta ortogonalidad, una
pipeline y un set de instrucciones altamente eficientes, ejecución condicional, pueda resolver el algoritmo de m.c.d. con menos instrucciones assembler
que líneas de código C del programa fuente, y sea capaz de armar el cubo
mágico en una sola instrucción; creemos que coincidirá en que:
un procesador con la relación MIPS/MHz que tiene ARM implica que
con un clock mucho más bajo puede realizar la misma tarea, con el
consecuente ahorro de energía, que se traduce al menos en un retorno
económico (menor gasto de dinero en energía eléctrica, ya sea en la
cuenta de la empresa prestataria o el reemplazo de baterías) y uno
ecológico (menor derroche de energía).
un procesador que puede aprovechar código tan compacto como ARM,
requerirá de menos memoria de código para realizar la tarea necesaria,
116
extracto del libro “Desarrollo con Microcontroladores ARMCortex-M3”
3.2. ¿Por qué ARM?
con el consecuente ahorro en el costo de las memorias y por ende
también en consumo eléctrico.
un procesador con la potencia y simpleza del set de instrucciones de
ARM, hace que los compiladores de lenguajes de alto nivel generen
código más compacto, reforzando el punto anterior.
un procesador simple presenta una relación performance/costo elevada.
el procesador, en su versión con MMU, soporta los sistemas operativos
más comunes, como Linux y Windows Embedded Compact.
Además, los sistemas dedicados suelen caracterizarse por:
un bajo consumo de potencia, la velocidad de operación se acomoda
a los requerimientos energéticos del sistema
un hardware minimalista, por una parte por una razón de costo, por
otra para mantener bajos niveles de consumo eléctrico
el empleo de procesadores con manejo óptimo de los recursos, y una
respuesta rápida ante interrupciones
Las características fundamentales de la arquitectura ARM, que la distinguen frente a otras como las vistas en el capítulo sobre micros, son:
una pipeline compacta, simple y eficiente, que logra una ejecución
sostenida a alta velocidad
un set de instrucciones simple y altamente eficiente, compacto y ortogonal, que hace que los compiladores de lenguajes de alto nivel generen
a su vez código más compacto, respecto a otros procesadores
set de instrucciones reducido que permite optimizar el uso de memoria
de código y performance
una excelente relación MIPS/MHz que logra una alta velocidad de
ejecución con un mínimo consumo
una arquitectura simple concebida en 32-bits, con características optimizadas para una respuesta rápida ante excepciones
instrucciones de un ciclo, minimizando la latencia
bajo costo en relación a su performance
extracto del libro “Desarrollo con Microcontroladores ARMCortex-M3”
117
3. ¿Por qué ARM?
En síntesis, si bien, como sabemos, es posible implementar cualquier sistema
con cualquier herramienta (costará más o menos y rendirá más o menos);
cuando la herramienta es óptima la relación costo/beneficio es mayor. Bajo
estas condiciones, consideramos que ante un requerimiento de mayor capacidad de memoria y procesamiento, una arquitectura como ARM es una
herramienta óptima, más cerca del mundo de los sistemas dedicados.
3.2.1.
¿... y en microcontroladores?
Bien..., lo visto en la sección anterior más o menos nos muestra dónde se
inclina la balanza para el lado “procesadores para sistemas dedicados” versus
“procesadores para computadoras de escritorio”. Pero si vamos al ambiente
de microcontroladores, hay otras opciones, y algunas también basadas en
procesadores con un altísimo rendimiento. Entonces, ¿por qué ARM en este
entorno?
En el capítulo anterior hemos visto mayormente hardware, y un pantallazo de las arquitecturas ARM sin entrar demasiado en detalles sobre las
arquitecturas específicas para microcontroladores. En capítulos siguientes
veremos que las arquitecturas ARM permiten que no sea difícil desarrollar
sino hasta más fácil, haciendo que elegir 32-bits por costo y por las razones
dadas en la sección anterior no se transformen en un dolor crónico a la hora
de plasmarlo en un proyecto. Esto limita tal vez el abanico de opciones,
pero no termina de definir por qué ARM y no un fabricante cualquiera con
similares características.
Pues bien, tal vez la diferencia fundamental en este aspecto es que ARM
nos permite cierta libertad en la elección de los demás elementos de nuestro
entorno. En la sección 8.1 en la página 205, veremos una herramienta de
desarrollo que en realidad es algo mucho más profundo, que se denomina
CMSIS. Este concepto nos permite obtener:
Independencia del fabricante del hardware
Independencia del proveedor del compilador
◦ Posibilidad de utilizar herramientas gratuitas y hasta open source
Independencia del proveedor del RTOS (en caso de utilizarlo)
3.2.1.1.
Independencia del fabricante del hardware
El core del procesador es ARM, y accedemos a él mediante funciones
standard definidas en CMSIS. Cada fabricante desarrolla los periféricos que
118
extracto del libro “Desarrollo con Microcontroladores ARMCortex-M3”
3.2. ¿Por qué ARM?
incorporará en su microcontrolador como guste, pero la interfaz de control
sigue ciertas pautas comunes. De este modo, es posible cambiar de fabricante
del microcontrolador realizando un mínimo trabajo de transporte de uno a
otro.
En un mundo ideal, CMSIS define una capa intermedia de abstracción que permite que la aplicación esté desacoplada del hardware lo
suficiente como para permitir el transporte, pero sin que esto afecte
la performance. Mayormente la abstracción se realiza mediante directivas del compilador
En el mundo real, gran parte de esto todavía es vaporware 3 , y existe
un trabajo de transporte, si bien está bastante minimizado por esta
estructura común. Dado que todo lo relacionado al core, incluyendo
el timer del sistema y las excepciones e interrupciones de los periféricos, se controla mediante CMSIS, el trabajo de transporte específico
asciende sólo a lo estrictamente relacionado con la operación de los
periféricos
De utilizarse un RTOS, éste se optimiza para el procesador, no para
el microcontrolador, y utiliza los recursos del core, por lo que no es
necesario portarlo. (ver además 3.2.1.2)
A la hora de elegir un microcontrolador, disponemos entonces no sólo de
todas las opciones de un fabricante en particular, sino de todo un abanico
de fabricantes, con jugadores de la calidad de Fujitsu, Toshiba, y otros no
tan conocidos (pero no por ello de menor calidad) como Holtek o Energy
Micro; más allá de los tradicionales gigantes como NXP, Freescale,
Texas Instruments, ST, Atmel, entre otros. La lista es muy extensa.
3.2.1.2.
Independencia del proveedor del compilador
Si bien Keil es una empresa del grupo ARM, existen otras opciones
como IAR Systems, e incluso gratuitas. Nos ocuparemos de esto en la
sección 8.2 en la página 210.
Pero no es solamente elegir otro compilador u otro entorno de desarrollo.
Al utilizar CMSIS, la forma de interactuar con el compilador a través del
código es la misma; todas las directivas y llamados a funciones intrínsecas
3 Este término se utiliza para referirse a productos tecnológicos que no existen al
momento de su lanzamiento. En algunos casos se trata de maniobras de marketing para
ganar posicionamiento, observar la respuesta y la posible demanda antes de siquiera
definir el producto; en otros casos se utilizan los datos obtenidos de la respuesta de los
usuarios potenciales para ajustar parámetros de desarrollo antes del lanzamiento “real”.
extracto del libro “Desarrollo con Microcontroladores ARMCortex-M3”
119
3. ¿Por qué ARM?
para aprovechar las ventajas del procesador, se realizan a través de la capa
de abstracción de CMSIS. Esta capa se conforma mediante directivas del
pre-procesador, por lo que no genera impacto en el código, es simplemente
una especie de “lenguaje intermedio” mediante el cual nos comunicamos de
igual forma con un compilador Keil que con un compilador IAR, usando
directivas e intrínsecas CMSIS, que a su vez se trasladan al momento de
compilación a directivas Keil o directivas IAR. Lo mismo ocurre para un
entorno gratuito como GNU o CooCox. Lo único que debemos tener presente es la configuración del compilador para utilizar CMSIS, y el empleo
de la estructura que éste requiere.
Todo esto significa que podemos utilizar cualquier herramienta profesional que deseemos, con el microcontrolador que deseemos4 . Si bien algunos
fabricantes proveen además un entorno propio, al cual embellecen y tornan
más atractivo para su solución en particular, siempre tenemos una opción
genérica y es la intención de este libro que la usemos y la aprovechemos.
3.2.1.3.
Independencia del proveedor del RTOS
Finalmente, la tercera edición de CMSIS introdujo un esquema de abstracción para unificar la forma de acceder a las funciones básicas de un
RTOS. De este modo,es posible portar una aplicación de un RTOS a otro
prácticamente sin modificaciones, dado que las funciones básicas se llaman
a través de CMSIS. Una vez más, podemos utilizar cualquier herramienta
profesional que deseemos, con el microcontrolador de nuestra elección; independientemente de las sugerencias de cualquier fabricante o proveedor en
particular.
4 dentro de ciertos límites, en algunos raros casos el microcontrolador no está soportado por alguna herramienta.
120
extracto del libro “Desarrollo con Microcontroladores ARMCortex-M3”
Descargar