|  | 

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

  •  |  | 

    emFile RAID 1

    RAID 1 – Teoria del funzionamento Il RAID 1 utilizza il “mirroring” per consentire il recupero dei dati. Una copia di tutti i dati presenti sulla partizione master viene mantenuta su una partizione separata chiamata mirror. Il master e il mirror possono risiedere sullo stesso dispositivo di memorizzazione o su dispositivi separati. In caso di…

  •  |  |  | 

    Segger emVNC

    emVNC-Server (Virtual Network Computing) consente di visualizzare il display e gestire un sistema embedded tramite USB (utilizzando emUSB-Device di SEGGER), TCP/IP o qualsiasi altro livello di trasporto di tipo socket. emVNC è stato progettato specificamente per i sistemi embedded. Fornisce sia il modulo server per il sistema target, sia l’applicazione client per i computer. L’applicazione…

  •  |  |  | 

    Segger emSecure

    emSecure è una suite di firme digitali per sistemi embedded progettata per proteggere prodotti e asset vitali, offrendo una protezione totale contro l’hacking. Basata su algoritmi di crittografia asimmetrica a doppia chiave, la suite garantisce che le firme non possano essere forgiate tramite il reverse engineering del firmware. Inoltre, emSecure può rendere impossibile la creazione…

  •  | 

    Segger emCompress

    La riduzione delle dimensioni dei dati per l’archiviazione e il trasferimento è estremamente preziosa nei sistemi embedded. Ridurre l’ingombro dell’archiviazione minimizza la complessità e i costi dei sistemi, mantenendo bassi i requisiti di memoria. Ridurre le dimensioni del trasferimento permette di superare i limiti della larghezza di banda disponibile per l’invio e la ricezione dei…

  •  |  | 

    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…