La maggior parte dei toolchain che utilizzano GCC o LLVM utilizzano anche newlib, newlib-nano o glibc.

Sfortunatamente, queste librerie presentano notevoli svantaggi rispetto alle librerie runtime professionali per i sistemi embedded. È qui che entra in gioco emRun. Può essere utilizzato con GCC, LLVM e altri toolchain per fornire una libreria runtime progettata e ingegnerizzata per i sistemi embedded. Scritto da zero per i dispositivi embedded, emRun consente un alto grado di ottimizzazione con requisiti bassi.

emRun è una libreria runtime C completa per l’uso con qualsiasi toolchain. Converte qualsiasi toolchain basato su GCC/LLVM in una scelta di sviluppo professionale. emRun viene utilizzato nell’IDE Embedded Studio di SEGGER e ha dimostrato il suo valore per anni.

  • Funzioni altamente ottimizzate che, quando utilizzate, evitano l’inclusione di funzioni di supporto aggiuntive (ad esempio printf) che non sono necessarie
  • Le funzioni di input e output formattate sono personalizzabili da I/O di base a I/O completamente funzionale, consentendo di ridurre l’impronta del codice finale
  • Supporto completo per la localizzazione, UTF-8, pagine di codice e codec locali è collegato solo se utilizzato

In molti casi, i risparmi ROM di emRun consentono l’uso di un microcontrollore più piccolo con meno memoria on-chip. Ciò può comportare risparmi significativi sui costi, soprattutto per i dispositivi costruiti in grandi quantità per il mercato di massa.

Essendo una semplice sostituzione per librerie come newlib o newlib-nano, emRun riduce e accelera le applicazioni embedded. Sia che la preoccupazione principale con newlib sia la dimensione della flash, le prestazioni o la clausola di attribuzione della licenza virale, la libreria runtime SEGGER emRun è la soluzione.

Caratteristiche principali

  • Alte prestazioni, con routine critiche in termini di tempo scritte in linguaggio assembly
  • Riduzione significativa delle dimensioni del codice
  • Configurabile per alta velocità o dimensioni ridotte
  • Include la libreria floating-point ottimizzata di SEGGER emFloat
  • Progettato per l’uso con vari toolchain
  • Funzioni compatibili EABI
  • Utilizzo minimo della RAM
  • Nessun requisito heap
  • Nessuna licenza virale, nessuna clausola di attribuzione

Licenza

emRun può essere concesso in licenza in codice sorgente a singole società e può anche essere incluso come libreria dai fornitori di toolchain.

  • Il codice sorgente consente di eseguire il passo attraverso le funzioni della libreria
  • Molte funzioni possono essere ottimizzate con implementazioni diverse per codice ottimizzato per le dimensioni e codice ottimizzato per la velocità

emRun è disponibile anche in codice “C” generico per l’esecuzione su qualsiasi sistema. Inoltre, sono disponibili varianti ottimizzate per l’assembly per:

  • Arm (Cortex-M e Cortex-A 32-bit)
  • RISC-V (RV32M)

I port per altre CPU possono essere resi disponibili su richiesta. Si prega di contattarci per ulteriori informazioni.

Ottimizzazione delle prestazioni — velocità e dimensioni

Le prestazioni di una libreria runtime possono avere un enorme impatto sulla velocità di un’applicazione. Nonostante cerchi di evitare le funzioni della libreria (sprintf(), memcpy(), memcmp() ecc), il compilatore ti farà chiamare le funzioni della libreria, come per la divisione e la moltiplicazione, che non vedi, specialmente quando si tratta di operazioni a virgola mobile o a 64 bit, qui la scelta della libreria runtime giusta fa tutta la differenza.

emRun utilizza implementazioni avanzate altamente avanzate per tali operazioni, che possono essere ottimizzate per velocità o dimensioni. Con le varianti ottimizzate per l’assembly, le prestazioni possono essere ulteriormente ottimizzate utilizzando la piattaforma target al suo pieno potenziale.

Requisiti di memoria

emRun offre risparmi significativi nella memoria flash. Ciò è in parte dovuto al fatto che alcune funzioni sono codificate a mano in linguaggio assembly, ma principalmente a causa di una struttura che minimizza le dipendenze interne della libreria, ad esempio il file I/O non viene collegato con printf() o scanf().

emRun utilizza anche meno RAM statica grazie a una struttura progettata da zero per i sistemi embedded.

Codice benchmark:

int main(void) {
  printf("Hello World.\n");
  return 0;
}
Ecco il risultato:
Test Environment Test project: Simple “main” project with “printf()”
ROM Usage RAM Usage
MCUXpresso1, Newlib 31888 bytes 2864 bytes
MCUXpresso, Redlib 9940 bytes 728 bytes
MCUXpresso, Newlib-nano 9552 bytes 416 bytes
MCUXpresso, SEGGER RunTime Library 4392 bytes 184 bytes
Embedded Studio2, SEGGER emRun, GNU Linker 2502 bytes 0 bytes
Embedded Studio, SEGGER emRun, SEGGER Linker 1868 bytes 0 bytes
Embedded Studio, SEGGER emRun, SEGGER Linker, Host Formatting 818 bytes 8 bytes

Implementazione e configurazione

emRun può essere utilizzato con qualsiasi IDE/toolchain basato su GCC sostituendo la libreria runtime fornita con tale toolchain (solitamente newlib, newlib-nano o qualche altra variante) con emRun.

Esempi includono:

  • AC6 System Workbench for STM32 (SW4STM32)
  • Atmel Studio 7
  • Atollic TrueStudio for STM32
  • NXP MCUXpresso
  • Renesas e2 studio (per target Synergy o RZ)
  • SiLabs Simplicity Studio

In SEGGER Embedded Studio e Rowley CrossWorks, emRun è già incluso come libreria C predefinita.

Si prega di consultare la guida dell’utente per i dettagli.

Verifica della libreria

Per verificare la funzionalità di emRun, abbiamo creato e utilizzato il nostro test suite di verifica. Verifica l’intera funzionalità di tutte le funzioni della libreria, inclusa l’intera libreria a virgola mobile con tutti i casi limite.

Vengono eseguiti più di 450 test diversi con milioni di casi di test. Di seguito un estratto per un singolo test per sys_float64_add(), aggiungendo doppi a 64 bit:

Test della libreria a virgola mobile IEEE-754

Copyright (c) 2018-2019 SEGGER Microcontroller GmbH.

sys_float64_add:   0 errori (47256 test)

Totali:   0 errori (47256 test)

Se sei interessato a riprodurre i nostri risultati o desideri verificare la libreria che attualmente utilizzi o pianifichi di sviluppare la tua libreria runtime, il SEGGER Runtime Library Verification Test Suite è disponibile.