Proxy MCAL : Couche d'abstraction universelle pour microcontrôleurs
Proxy MCAL résout le problème d'attachement de l'application à un HAL spécifique à un fournisseur. Lors de la migration du firmware vers un nouveau microcontrôleur, le HAL standard nécessite une réécriture complète des pilotes GPIO, SPI, UART et autres périphériques. Proxy MCAL fournit une API unique implémentée via des fonctions de liaison pour chaque famille de MCU. Cela préserve la portabilité du code sans réécrire la logique applicative.
Les développeurs font face à des migrations en raison de l'obsolescence des puces, des pénuries d'approvisionnement, des sanctions ou de nouvelles exigences comme Bluetooth 5.3. Proxy MCAL garantit une modularité conforme à ISO-26262 : architecture abstraite, configurabilité, testabilité.
Exigences pour Proxy MCAL
Proxy MCAL doit répondre à des critères stricts pour les développeurs de niveau intermédiaire/senior :
- Exhaustivité : accesseurs en lecture/écriture pour tous les périphériques (CLOCK, GPIO, I2C, SPI, UART, ADC, DMA). Les fonctions inutilisées sont faibles, donc l'éditeur de liens les élimine.
- Acceptation : API commune validée par l'équipe.
- Simplicité : 45–55 lignes de prototypes, interface intuitive, documentation via grep sur les tests de modules.
- Évolutivité : multiples instances de composants.
- Polyvalence : support pour pilotes ASIC, protocoles, RTOS.
- Portabilité : compilation sur PC avec souches faibles vides.
- Accès CLI : vérification des fonctions via UART en temps d'exécution.
- Testabilité : tests de modules comme documentation.
- Configurabilité : configurations séparées sous forme de tableaux de structures.
Exemples de fonctions de liaison
API unique gpio_logic_level_set(Pad_t pad, GpioLogicLevel_t logic_level) implémentée différemment :
Pour 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;
}
Pour 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;
}
Pour Artery AT32 (sûr en ISR) :
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;
}
Les prototypes sont fixes, les corps adaptés au HAL du fournisseur ou aux registres.
Avantages de l'implémentation
- Portabilité : l'application Proxy MCAL se compile pour n'importe quel MCU via les liaisons.
- Tests : tests de modules unifiés valident n'importe quel HAL.
- Interface CLI : gestion centralisée des périphériques.
- Pilotes ASIC : universels pour dispositifs SPI/I2C sur toutes les plateformes.
Inconvénients et palliatifs
Surcharge — 10–20 cycles par appel. Solution : fonctions en ligne. Risque de code spaghetti minimisé par la simplicité de l'API et le couplage lâche.
Points clés
- Proxy MCAL sépare l'application du HAL du fournisseur, simplifiant la migration vers de nouveaux MCU.
- API unique avec liaisons garantit exhaustivité et portabilité.
- Conforme à ISO-26262 : modularité, testabilité, configurabilité.
- Supporte CLI et tests de modules pour vérification en temps d'exécution.
- S'adapte à 16+ familles de MCU sans réécrire l'application.
— Editorial Team
Aucun commentaire pour le moment.