Categoria: Librerie runtime

  • Segger emRun

    Panoramica

    La maggior parte delle toolchain che utilizzano GCC o LLVM si appoggia a newlib, newlib-nano o glibc.

    Sfortunatamente, queste librerie presentano svantaggi significativi rispetto alle librerie di runtime professionali per sistemi embedded.

    È qui che entra in gioco emRun. Può essere utilizzato con GCC, LLVM e altre toolchain per fornire una libreria di runtime progettata e ingegnerizzata specificamente per il mondo embedded. Scritta da zero, emRun consente un elevato grado di ottimizzazione con requisiti minimi.

    emRun è una libreria di runtime C completa che trasforma qualsiasi toolchain basata su GCC/LLVM in una scelta di sviluppo professionale. Viene utilizzata nell’IDE Embedded Studio di SEGGER e ha dimostrato il suo valore per anni.

    • Funzioni altamente ottimizzate: Evitano l’inclusione di funzioni di supporto non necessarie (es. printf).
    • I/O personalizzabile: Le funzioni di input e output formattate sono configurabili (da I/O di base a completo), riducendo l’impronta del codice finale.
    • Supporto localizzazione: Il supporto per UTF-8 e codepage viene collegato (link) solo se effettivamente utilizzato.

    In molti casi, il risparmio di memoria ROM garantito da emRun consente l’uso di microcontrollori più piccoli ed economici, portando a una riduzione dei costi significativa nella produzione di massa.

    Caratteristiche principali

    • Alte prestazioni: Routine critiche scritte in linguaggio assembly.
    • Riduzione drastica del codice: Configurabile per massima velocità o dimensioni ridotte.
    • emFloat inclusa: Include la libreria ottimizzata di SEGGER per i calcoli in virgola mobile.
    • Compatibilità: Funzioni compatibili EABI e progettate per varie toolchain.
    • Efficienza RAM: Utilizzo minimo di RAM e nessun requisito di heap.
    • Licenza chiara: Nessuna licenza “virale”, nessuna clausola di attribuzione obbligatoria.

    Licenze e Disponibilità

    emRun può essere concesso in licenza come codice sorgente a singole aziende o incluso come libreria dai fornitori di toolchain. Il codice sorgente permette di eseguire il debug passo-passo (step-through) all’interno delle funzioni della libreria.

    Architetture supportate:

    • Arm (Cortex-M e Cortex-A 32-bit)
    • RISC-V (RV32M, RV32IMAC, RV64)
    • Varianti generiche in codice “C” per qualsiasi altro sistema.

    Opzione “Buyout” per produttori di silicio

    SEGGER offre ai produttori (Silicon Vendors) l’opzione di licenziare emRun per ridistribuirlo ai propri clienti secondo i propri termini. Aziende come SiFive, Microchip, Nuclei e Haawking hanno già adottato questa soluzione.


    Ottimizzazione delle prestazioni: Velocità e Dimensioni

    La scelta della libreria di runtime può avere un impatto enorme sulla velocità dell’applicazione. Anche cercando di evitare funzioni come sprintf() o memcpy(), il compilatore genererà chiamate a funzioni di libreria per operazioni “invisibili” come divisioni, moltiplicazioni a 64-bit o calcoli in virgola mobile.

    emRun utilizza implementazioni di basso livello avanzate che possono essere calibrate per privilegiare la velocità o lo spazio occupato, sfruttando al massimo il potenziale della piattaforma target.


    Requisiti di memoria (Benchmark)

    emRun offre un risparmio significativo di memoria Flash perché riduce al minimo le dipendenze interne (ad esempio, l’I/O su file non viene collegato automaticamente con printf()).

    Esempio di Benchmark (Progetto “Hello World” con printf):

    Ambiente di TestUtilizzo ROMUtilizzo RAM
    MCUXpresso, Newlib31.888 byte2.864 byte
    MCUXpresso, Newlib-nano9.552 byte416 byte
    MCUXpresso, SEGGER emRun4.392 byte184 byte
    Embedded Studio, emRun + SEGGER Linker1.868 byte0 byte

    Verifica della libreria

    Per garantire l’affidabilità, emRun viene sottoposta a una suite di test rigorosa:

    • Oltre 450 test diversi con milioni di casi studio.
    • Verifica completa di tutte le funzioni della libreria e della virgola mobile (IEEE-754).
    • La Runtime Library Verification Test Suite è disponibile separatamente per chi desidera verificare le proprie librerie.

    emFloat: Virgola mobile ottimizzata

    Un componente chiave di emRun è emFloat, una libreria per calcoli in virgola mobile conforme a IEEE 754. Progettata per essere velocissima e compatta, offre prestazioni simili a una FPU (Floating Point Unit) hardware anche in puro software. Se una FPU è presente, emFloat ne potenzia le prestazioni per le funzioni matematiche complesse.