¿El desarrollo en procesadores ARM de diferentes proveedores difiere mucho?

7

He comenzado a desarrollar aplicaciones en la placa de evaluación XMC 2 go. Yo, más o menos, entendí la idea. Pero ¿qué pasa si trato de ir por, digamos, STM32?

Para el pin 00 de configuración XMC1100, la salida es

PORT1->IOCR0 &= ~PORT0_IOCR0_PC0_Msk;
PORT0->IOCR0 |= 0x0 << PORT0_IOCR0_PC0_Pos;

Pero no creo que stm32 tenga un registro IOCR . Entonces, ¿debería un ingeniero aprender todos estos nombres de registro diferentes?

    
pregunta ozgur

1 respuesta

10

Sí lo hace. Si bien todos los controladores Cortex M compartirán el mismo núcleo, y algunos de los periféricos centrales, todos los demás periféricos son específicos del proveedor.

Incluso el uso de CMSIS no te ayudará mucho en ese escenario, ya que solo cubrirá los elementos proporcionados por ARM, que son el núcleo y los periféricos centrales (NVIC, Systick ...)

Al final, si cambias de un proveedor a otro, tendrás que leer la hoja de datos, el manual de referencia (o usuario) y descubrir cómo funcionan las cosas. No necesariamente tiene que aprender todos los nombres de registro, ya que los proveedores ahora proporcionan bibliotecas periféricas que ponen una capa abstracta sobre el hardware.

Pero no es difícil ni desafiante, es lo que tienes que hacer, yo diría que es una de las partes más divertidas para descubrir cómo funcionan esos periféricos.

Y después de que se dio cuenta de esto, es posible que desee escribir una Capa de abstracción de hardware para evitar que su firmware sea completamente inutilizable para otro controlador. Si tiene una HAL estable, al menos puede hacer que los controladores del dispositivo y las capas de aplicación pasen al siguiente controlador y solo tendrá que implementar la HAL nuevamente.

A pesar de que los proveedores ofrecen bibliotecas periféricas, que funcionan como HAL, no hay un estándar entre los proveedores. Entonces, en el nivel más bajo, tendrá que adaptar su software, por lo que dije que es posible que usted quiera escribir una HAL (en la que pueda usar la HAL del proveedor).

Si desea implementar una HAL estable, lo más probable es que sus funciones se limiten a la funcionalidad muy básica de los periféricos comunes, por lo que cada controlador puede abstraerse. Por lo general, perderá algunas características más avanzadas de los periféricos, ya que no están disponibles en todas partes (por ejemplo, un mecanismo de detección de velocidad en baudios o tiempo muerto automático entre canales PWM). Ese será el precio a pagar. Si necesitamos esos mecanismos para nuestra aplicación, escribimos un controlador de hardware especializado para ese propósito, de modo que el resto aún pueda funcionar con la HAL común.

Usando este enfoque porté una aplicación a otros dos microcontroladores que solo implementaban la HAL, el resto podría compilarse sin un solo cambio en el software.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas