|  | 

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 emFile

    PanoramicaemFile è un file system che consente alle applicazioni e ai sistemi embedded di archiviare dati in modo sicuro e affidabile su ogni tipo di dispositivo di memoria. Essendo indipendente rispetto all’hardware, può essere eseguito su qualsiasi target a 16, 32 o 64 bit per il quale sia disponibile un compilatore; inoltre, è supportata la…

  •  |  | 

    Segger emFloat

    Sviluppato e perfezionato per oltre due decenni, emFloat è un componente altamente ottimizzato di emRun (la libreria runtime C di SEGGER) ed è parte integrante di SEGGER Embedded Studio. Progettato per essere “plug-and-play”, emFloat può sostituire la libreria a virgola mobile predefinita, offrendo prestazioni superiori con meno codice. Estremamente veloce e compatto, garantisce prestazioni simili…

  •  | 

    Segger Embedded Studio

    Embedded Studio di SEGGER è un ambiente di sviluppo integrato (IDE) completo, progettato specificamente per la gestione, la compilazione, il test e l’implementazione di applicazioni embedded. Grazie a una vasta gamma di funzionalità, garantisce operazioni di sviluppo fluide ed efficienti. Progettato per soddisfare le esigenze degli sviluppatori che lavorano con svariati microcontrollori, Embedded Studio ottimizza…

  •  | 

    Segger Flasher ATE (gang)

    A differenza della programmazione di singoli dispositivi, la programmazione gang è un metodo altamente efficiente utilizzato nella produzione elettronica per programmare più dispositivi simultaneamente. Questo approccio è particolarmente vantaggioso in contesti in cui grandi quantità di microcontrollori o altri dispositivi programmabili devono essere configurati in modo rapido e accurato. Riducendo significativamente il tempo totale di…

  •  |  | 

    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…