|  | 

Segger emRun++


emRun++ è una libreria standard C++ completa, utilizzabile con qualsiasi toolchain. È stata specificamente ottimizzata per sistemi e applicazioni embedded. In quanto linguaggio di programmazione moderno, il C++ sta diventando sempre più importante nel settore embedded, offrendo agli sviluppatori opzioni sempre più vaste. Con questo obiettivo, emRun++ viene costantemente aggiornata per soddisfare i più moderni standard C++.

emRun++ è anche parte integrante dell’IDE Embedded Studio di SEGGER. Inclusa nella toolchain pronta all’uso e nella libreria runtime C di Embedded Studio, è disponibile immediatamente e possiede tutte le caratteristiche che rendono la programmazione orientata agli oggetti (OOP) veloce e semplice.

Caratteristiche principali

  • Libreria standard C++ completa.
  • Compatibilità con i comuni standard C++, incluso C++17.
  • Integrazione totale con emRun (libreria runtime C).
  • Gestione dinamica della memoria, ottimizzata per sistemi embedded.
  • Gestione delle eccezioni, incluso lo stack unwinding su tutti i target supportati.

Funzionalità C++ moderne

emRun++ implementa classi e funzioni secondo gli standard ISO. Integra il set completo di funzionalità dello standard C++17 definito dall’Organizzazione Internazionale per la Normalizzazione (ISO).

La libreria fornisce tutti i file header C++ standard insieme a wrapper per gli header della libreria runtime C. L’implementazione include il name mangling delle funzioni C standard, mappando ad esempio cos(float) e cos(double) ai rispettivi equivalenti C cosf() e cos().


Allocazione dinamica della memoria

Le moderne applicazioni C++ si affidano all’allocazione dinamica della memoria. Gli oggetti risiedono in memoria solo mentre vengono utilizzati. Gli oggetti a lunga durata vengono solitamente creati con new e distrutti con delete. Mentre il C++ si occupa di chiamare rispettivamente i costruttori e i distruttori degli oggetti, la libreria runtime C sottostante gestisce la memoria fisica.

emRun++ implementa new e delete in modo che utilizzino le routine alloc e free della libreria runtime emRun, garantendo un uso efficiente della memoria heap con il minimo sovraccarico (overhead).


Gestione delle eccezioni

Il C++ definisce l’uso delle eccezioni, a differenza del C dove la responsabilità di recuperare manualmente un errore e propagarlo ai chiamanti ricade interamente sull’utente. La gestione delle eccezioni offre un approccio sistematico e robusto per affrontare errori che non possono essere risolti localmente.

Quando viene lanciata un’eccezione in un blocco try, tutti gli oggetti costruiti all’interno del blocco devono essere distrutti e lo stack deve essere “srotolato” (stack unwinding). Per supportare ciò, emRun++ implementa lo stack unwinding specifico per ogni architettura target supportata.


Supporto di basso livello

I compilatori C++ definiscono un’interfaccia binaria dell’applicazione (ABI) che stabilisce, ad esempio, come vengono disposti gli oggetti, come funziona il name mangling o come vengono implementate le funzioni virtuali.

emRun++ implementa le funzioni di basso livello della C++ ABI alle quali il compilatore aggiunge implicitamente chiamate durante la generazione del codice. Ciò consente alla libreria C++ di essere utilizzata immediatamente con qualsiasi toolchain.


Occupazione di memoria (Memory Footprint)

I seguenti dati mostrano l’utilizzo della ROM (in byte) confrontando emRun++ con la libreria standard GNU libstdc++.

Arm (32-bit)

Progetto di testemRun++libstdc++
Empty (Vuoto)4969.244
STL_List11.19269.409
STL_Map11.46470.217

RISC-V (32-bit)

Progetto di testemRun++libstdc++
Empty (Vuoto)676858
STL_List11.86890.848
STL_Map12.38091.620

RISC-V (64-bit)

Progetto di testemRun++libstdc++
Empty (Vuoto)542888
STL_List11.41487.314
STL_Map11.75888.104


Articoli simili

  •  | 

    Segger Flasher

    La programmazione a singola unità consiste nel caricamento del software su un unico microcontrollore o processore dedicato all’interno di un sistema più ampio. La famiglia di programmatori Flasher di SEGGER per unità singole include i modelli Flasher Pro, Pro XL, Compact e Portable PLUS. Questi strumenti universali per la programmazione in-system (ISP) offrono una programmazione…

  •  | 

    Flasher Hub-12

    Fratello maggiore del Flasher Hub-4, il Flasher Hub-12 controlla fino a 24 unità Flasher Compact, che operano come canali individuali per la programmazione multipla (“gang”) parallela ad alta velocità. Ogni canale può essere configurato per programmare un dispositivo diverso o un’immagine firmware differente. Il sistema combinato Flasher Hub-12 e Flasher Compact viene configurato una sola…

  •  | 

    SEGGER embOS Ultra

    Panoramica embOS-Ultra è un sistema operativo in tempo reale (RTOS) ad alte prestazioni che sfrutta l’innovativo scheduling RTOS basato sui cicli (cycle-based). Offre massime prestazioni e una precisione al singolo ciclo di CPU con latenza minima in applicazioni mission-critical e ad alto rendimento, dove il tempismo deterministico e la scalabilità sono essenziali. La tecnologia SEGGER…

  •  |  | 

    Segger emMQTT

    Panoramica Il Message Queuing Telemetry Transport (MQTT) è un protocollo di trasporto messaggi di tipo publish/subscribe (pubblica/iscriviti) progettato per funzionare sopra il protocollo TCP/IP. È semplice, leggero e aperto. Queste caratteristiche lo rendono ideale per molteplici situazioni, inclusi gli ambienti con risorse limitate come la comunicazione Machine to Machine (M2M) e i contesti Internet of…

  •  |  | 

    exFAT per emFile

    Per chi desidera o necessita di un’implementazione exFAT® per emFile, SEGGER ha collaborato con Microsoft per rendere disponibile una licenza diretta Microsoft tramite SEGGER. exFAT per emFile è un’implementazione specializzata del file system exFAT, concepita su misura per i sistemi embedded. Il file system exFAT (Extensible File Allocation Table) è stato sviluppato da Microsoft nel…