Proxy MCAL: Capa de abstracción universal para microcontroladores
Proxy MCAL resuelve el problema de vincular la aplicación a un HAL específico de un proveedor. Al migrar el firmware a un nuevo microcontrolador, el HAL estándar requiere reescribir por completo los controladores de GPIO, SPI, UART y otros periféricos. Proxy MCAL proporciona una única API implementada mediante funciones de enlace para cada familia de MCU. Esto preserva la portabilidad del código sin reescribir la lógica de la aplicación.
Los desarrolladores se enfrentan a migraciones por obsolescencia de chips, escasez de suministros, sanciones o nuevos requisitos como Bluetooth 5.3. Proxy MCAL garantiza modularidad conforme a ISO-26262: arquitectura abstracta, configurabilidad, testabilidad.
Requisitos para Proxy MCAL
Proxy MCAL debe cumplir criterios estrictos para desarrolladores de nivel medio o senior:
- Completitud: getters/setters para todos los periféricos (CLOCK, GPIO, I2C, SPI, UART, ADC, DMA). Las funciones no utilizadas son weak, por lo que el enlazador las descarta.
- Aceptación: API común acordada por el equipo.
- Simplicidad: 45–55 líneas de prototipos, interfaz intuitiva, documentación mediante grep en las pruebas de módulos.
- Escalabilidad: múltiples instancias de componentes.
- Versatilidad: soporte para controladores ASIC, protocolos, RTOS.
- Portabilidad: se compila en PC con stubs weak vacíos.
- Acceso CLI: verificación de funciones vía UART en tiempo de ejecución.
- Testabilidad: pruebas de módulos como documentación.
- Configurabilidad: configs separadas como arreglos de estructuras.
Ejemplos de funciones de enlace
Única API gpio_logic_level_set(Pad_t pad, GpioLogicLevel_t logic_level) implementada de forma diferente:
Para STM32:
bool gpio_logic_level_set(Pad_t pad, GpioLogicLevel_t logic_level) {
HAL_GPIO_WritePin(Port2PortPtr(pad.port), 1 << pad.pin, (GPIO_PinState)logic_level);
return true;
}
Para NRF5340:
bool gpio_logic_level_set(Pad_t Pad, GpioLogicLevel_t logic_level) {
bool res = false;
res = gpio_is_valid_pad(Pad);
if(res) {
nrf_gpio_pin_write((uint32_t)Pad.byte, (uint32_t)logic_level);
}
return res;
}
Para Artery AT32 (ISR-safe):
bool gpio_logic_level_set(Pad_t Pad, GpioLogicLevel_t logic_level) {
Pad_t pad = {0};
(void)pad;
pad.byte = pad_num;
gpio_type* GPIOx = Port2PortPtr(Pad.port);
if(GPIOx) {
switch((uint8_t)logic_level) {
case GPIO_LVL_HI: {
GPIOx->scr = 1 << Pad.pin;
} break;
case GPIO_LVL_LOW: {
GPIOx->clr = 1 << Pad.pin;
} break;
}
}
return true;
}
Los prototipos son fijos, los cuerpos se adaptan al HAL del proveedor o registros.
Beneficios de la implementación
- Portabilidad: la aplicación Proxy MCAL se compila para cualquier MCU mediante enlaces.
- Pruebas: pruebas de módulos unificadas verifican cualquier HAL.
- Interfaz CLI: gestión centralizada de periféricos.
- Controladores ASIC: universales para dispositivos SPI/I2C en todas las plataformas.
Desventajas y mitigaciones
Sobrecarga — 10–20 ciclos por llamada. Solución: funciones inline. Riesgo de código spaghetti minimizado por la simplicidad de la API y el acoplamiento flojo.
Puntos clave
- Proxy MCAL separa la aplicación del HAL del proveedor, simplificando la migración a nuevos MCU.
- Única API con enlaces garantiza completitud y portabilidad.
- Conforme a ISO-26262: modularidad, testabilidad, configurabilidad.
- Soporta CLI y pruebas de módulos para verificación en tiempo de ejecución.
- Escala a 16+ familias de MCU sin reescribir la aplicación.
— Editorial Team
Aún no hay comentarios.