# Mbed

Mbed est une plate-forme de développement et un système d'exploitation pour les appareils connectés à Internet (appareils Internet des objets ) basés sur des microcontrôleurs ARM Cortex-M 32 bits. Le projet a été développé en collaboration par Arm et ses partenaires technologiques. Depuis juillet 2024, Mbed n'est plus activement développé par Arm.
La version complète est un système d'exploitation en temps réel (RTOS) tandis que les appareils aux ressources plus limitées peuvent choisir d'utiliser un sous-ensemble non RTOS.

## Environnement de développement

La plateforme offre un environnement de développement qui comprend :
* Mbed OS : le système d'exploitation principal qui offre des API standardisées et prend en charge les langages de programmation C/C++.
* Mbed Studio : un IDE (environnement de développement intégré) qui fournit des outils de débogage et des éditeurs de code.
* Mbed CLI : Outils de ligne de commande.

## Développement de logiciels
### Applications

Le principal moyen de développer des applications Mbed est d'utiliser l'IDE Arm Online « Keil Studio Cloud », un IDE en ligne qui utilise des services cloud pour créer et compiler des applications mbed. Les applications peuvent également être développées avec d'autres environnements de développement tels que Keil μVision, IAR Embedded Workbench, Arduino IDE et Eclipse avec les outils GCC ARM Embedded.
Mbed OS fournit la plate-forme logicielle Mbed C/C++ et des outils pour créer un micrologiciel de microcontrôleur qui s'exécute sur des appareils IoT. Il se compose des bibliothèques de base qui fournissent les pilotes périphériques du microcontrôleur, la mise en réseau, le RTOS et l'environnement d'exécution, les outils de création et les scripts de test et de débogage. Ces connexions peuvent être sécurisées par des bibliothèques SSL/TLS compatibles telles que Mbed TLS ou wolfSSL, qui prennent en charge mbed-rtos.
Une base de données de composants fournit des bibliothèques de pilotes pour les composants et les services qui peuvent être connectés aux microcontrôleurs pour créer un produit final.
Mbed OS, le RTOS, est basé sur Keil RTX5$^,$$^,$.

## Historique des versions majeures

| Series | Status | First Release | Last Release | Description |
| Mbed 2 ("mbedlib" or "mbed SDK") | Deprecated, but still supported by Keil Studio Cloud | February 2013 | r163 (Feb 2019) | The original release series of Mbed. Initially it ran on the Mbed NXP LPC1768 board, but support was soon added for other boards from a number of manufacturers. It did not contain a real-time OS and relied on community libraries for many common features such as networking and threading. |
| Mbed OS 3 | Abandoned | 15.09 (September 2015) | 16.03 (March 2016) | Mbed 3.0 was a significant rewrite of the original Mbed codebase to add features key for Internet of Things (IoT) functionality, such as wireless networking and TLS encryption$^,$. However, it relied on writing event-driven programs and did not support traditional multithreading, limiting its adoption. Mbed 3.0 introduced a new build system called Yotta. This allowed Mbed to be broken down into a large number of individual modules, each with their own repository. However, Yotta was not used by Mbed after the Mbed 3.x release series. |
| Mbed OS 5.x | Deprecated, but still supported by Keil Studio Cloud | 5.1.0 (August 2016) | 5.15.9 (May 2022) | Mbed OS 5 combined functionality from the original Mbed 2 codebase, the mbed-rtos project, and Mbed OS 3.0 into a single codebase which could support a wide range of use cases, from basic microcontroller functionality to wireless communications and advanced IoT features. Mbed OS 5 once again used a new custom build system, "Mbed CLI". However, it returned to a monolithic repository structure, with all drivers and first-party functionality integrated in a single Git repository. |
| Mbed OS 6.x | Abandoned | 6.0.0 (June 2020) | 6.17.0 (Feb 2023) | Mbed OS 6 was a more incremental change from Mbed OS 5. It reorganized and cleaned up the codebase in a number of ways, such as deprecating old APIs and reshuffling the directory structure to group together code more logically. It also pared down the list of supported boards, focusing effort on a smaller number of target devices with which ARM had an active relationship with the manufacturer. Mbed OS 6 still supports the Mbed CLI build system, but later versions also added support for a new build system, "Mbed CLI 2". This build system uses modified CMake scripts to compile Mbed, with a Python wrapper on top for users to interact with. In order to support their ARM Clang compiler in this build system, ARM contributed a port of CMake to ARM Clang. On July the 9th 2024 it was announced that The Mbed platform and OS will reach end of life in July 2026 ... and Arm has already halted active maintenance and CI on the Mbed OS codebase. You should not expect to see any fixes or improvements before July 2026. After July 2026, the codebase will be archived in GitHub. |

## Développement matériel
### Cartes de démonstration

Il existe différentes cartes de démonstration matérielles pour la plate-forme Mbed, la première étant la carte microcontrôleur Mbed originale. La carte microcontrôleur Mbed (commercialisée sous le nom de « mbed NXP LPC1768 ») est une carte de démonstration basée sur un microcontrôleur NXP, doté d'un cœur ARM Cortex M3, fonctionnant à 96 MHz, avec 512 ko flash, 32 KB RAM, ainsi que plusieurs interfaces, notamment Ethernet, périphérique USB, CAN, SPI, I2C et autres E/S. Le microcontrôleur Mbed a reçu le premier prix dans la catégorie Logiciels/Outils embarqués des EDN Innovation Awards annuels en 2010.
Différentes versions de la carte ont été publiées, avec les microcontrôleurs NXP LPC2368 ( ARM7TDMI-S ), NXP LPC1768 ( Cortex-M3 ), NXP LPC11U24 ( Cortex-M0 ) .

### HDK

Le kit de développement matériel Mbed (HDK) est conçu pour les OEM et fournit des informations pour créer du matériel personnalisé prenant en charge le système d'exploitation Mbed. Il s'agit d'un micrologiciel d'interface et de schémas qui peuvent être utilisés pour créer facilement des cartes de développement, des modules OEM et des produits reprogrammables adaptés à la production.

## Développement de projet

Le projet est développé par Arm en collaboration avec d'autres grandes entreprises technologiques et la communauté des développeurs Mbed. Le développement et les contributions se produisent à différents niveaux :
* Plateforme principale – La plateforme logicielle principale, développée par les principaux contributeurs et les sociétés partenaires et gérée et maintenue par l’équipe Mbed. Cette plateforme principale est développée sous la licence Apache 2.0 via un accord de contributeur . Cela inclut tous les composants logiciels génériques de base fournis par la plate-forme, ainsi que les ports HAL qui permettent à Mbed de fonctionner de manière transparente sur différents microcontrôleurs de fabricants et les ports de chaîne d'outils qui permettent le développement à l'aide de différentes chaînes d'outils intégrées.
* Base de données de composants – Composants de bibliothèque, développés par des entreprises et la communauté au sens large, pour fournir un support pour les composants périphériques, les capteurs, les radios, les protocoles et les API de services cloud nécessaires à la création d'appareils finaux. Ceux-ci sont fournis sous la licence Apache 2.0 (encouragée) ou d'autres licences choisies par les créateurs, et pris en charge par ces entreprises individuelles et les membres de la communauté des développeurs

## Outils de développement

Mbed OS prend en charge et a pris en charge un certain nombre d'outils de développement différents.

### Compilateur en ligne Mbed (obsolète depuis 2022)

Les applications pour la plateforme Mbed peuvent être développées à l'aide de l'IDE en ligne Mbed, un éditeur de code et un compilateur en ligne gratuit. Seul un navigateur Web doit être installé sur le PC local, puisque les projets ont été compilés sur le cloud, c'est-à-dire sur un serveur distant, à l'aide du compilateur ARMCC C/C++. L'IDE Mbed fournit des espaces de travail privés avec la possibilité d'importer, d'exporter et de partager du code avec le contrôle de version Mercurial distribué, et peut également être utilisé pour la génération de documentation de code.
Le compilateur en ligne Mbed n'incluait aucune fonctionnalité de débogage et reposait sur un cycle de développement où les utilisateurs téléchargeaient leur code compilé sous forme de fichier .bin, puis le copiaient manuellement sur une carte Mbed (qui apparaît comme une clé USB).
Mbed Online Compiler a été fermé le 1er mars 2023 et remplacé par Keil Studio Cloud.

### Interface de ligne de commande MBed

Pour répondre au besoin de développement hors ligne du système d'exploitation Mbed, ARM a mis à disposition l'interface de ligne de commande Mbed. Il s'agit d'un package Python qui permet de créer, d'importer et de compiler des programmes Mbed OS à partir de la ligne de commande. Il s'intègre également aux référentiels Git externes et au référentiel de bibliothèques de Mbed, offrant des commandes pour télécharger et mettre à jour les bibliothèques à partir de sources distantes.
En interne, Mbed CLI se compose de deux bases de code différentes. Le package pip mbed-cli, offrant la commande mbed, agit comme une interface qui accepte les commandes de l'utilisateur et est capable de télécharger le système d'exploitation et les bibliothèques Mbed. Afin de compiler Mbed et les logiciels l'utilisant, le frontend mbed-cli appelle les scripts de l'outil de construction à l'intérieur du référentiel mbed-os. Ces scripts sont responsables de déterminer les options de compilation correctes et d'exécuter le compilateur et l'éditeur de liens.
Après des années de développement, la maintenance des scripts complexes des outils de construction était devenue un fardeau important pour les développeurs du système d'exploitation Mbed. Cela les a conduits à geler le code de l'outil de construction et à travailler à la création de Mbed CLI 2 à la place.

### Studio Mbed

Mbed Studio est un IDE de bureau conçu spécifiquement pour fonctionner avec Mbed OS. Lancé pour la première fois en février 2019, Mbed Studio offrait une expérience d'édition plus complète que le compilateur en ligne, notamment une fonctionnalité de saisie semi-automatique de code intelligente et une prise en charge du débogage. Comme le compilateur en ligne, il contient un support intégré pour la création de nouveaux projets Mbed et la déclaration de dépendances sur les bibliothèques des référentiels Git et du référentiel de bibliothèques de Mbed.
Pour son compilateur C/C++, Mbed Studio utilise Arm Compiler 6, spécialement sous licence ARM pour inclusion dans l'IDE. Pour la fonctionnalité de débogage, Mbed Studio utilise le logiciel de pont de débogage pyOCD et ne peut déboguer que les appareils pris en charge par pyOCD. L'IDE lui-même est basé sur Eclipse Theia et a été conçu pour être facilement adapté à l'exécution dans un navigateur Web - un projet qui a ensuite vu le jour sous le nom de Keil Studio Cloud. Mbed Studio prenait initialement en charge les plates-formes hôtes Windows et Mac, et a ensuite été porté pour fonctionner sur Ubuntu Linux avec sa version 1.0 en juin 2020.

### Studio Cloud Keil

Semblable à Mbed Online Compiler, Keil Studio Cloud permet le développement d'applications Mbed OS sans installation d'outils de développement sur la machine locale. Cependant, il prend en charge de nombreuses fonctionnalités supplémentaires, telles que la fonctionnalité améliorée de saisie semi-automatique du code et le contrôle de version intégré à l'aide de Git. Contrairement au compilateur en ligne, Keil Studio Cloud est capable de télécharger et de déboguer les cartes Mbed prises en charge directement depuis le navigateur à l'aide de la fonctionnalité WebUSB . Cela permet une expérience de création et de débogage en un seul clic, comparable à celle offerte par les IDE de bureau. Cependant, cette fonctionnalité ne prend pas en charge toutes les cartes Mbed ou sondes de débogage.