|  | 

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.

Articoli simili

  •  |  |  | 

    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…

  •  | 

    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 J-Link OB

    Il J-Link OB (dove OB sta per: on-board) è essenzialmente un J-Link in un chip singolo basato su microcontrollore che viene integrato direttamente sulla scheda di valutazione. Arricchisce il design di qualsiasi scheda target con funzionalità standard, come il supporto al debug, il caricamento nella memoria Flash e il VCOM, senza aggiungere costi extra. Il…

  •  |  | 

    emFile RAID 5

    Sebbene l’acronimo R-A-I-D derivi da Redundant Array of Independent (originariamente Inexpensive) Disks, i termini “recuperabile” e “replicabile” sono più accurati di “ridondante”. Storicamente, i dispositivi di archiviazione sono stati i dischi rigidi. Nelle applicazioni embedded, questi possono essere qualsiasi tipo di dispositivo di memoria (NAND, NOR, SD) e, date le dimensioni del sistema, l’archiviazione è…

  •  | 

    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…

  •  |  | 

    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…