|  | 

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