|  | 

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 a quelle di una FPU (Floating Point Unit) tramite puro software. Laddove presente una FPU hardware, emFloat ne potenzia ulteriormente le prestazioni per le funzioni matematiche complesse.

È disponibile come modulo stand-alone in formato codice sorgente per gli sviluppatori che desiderano aumentare le prestazioni o ridurre le dimensioni del codice senza sostituire l’intera libreria runtime del proprio toolchain. emFloat è stato scelto anche da terze parti, come Microchip, per essere incluso nei loro compilatori (es. Microchip XC32 V4.0).


Caratteristiche principali

  • Codice compatto, prestazioni elevate: Sostituisce la libreria standard migliorando l’efficienza.
  • Plug-and-play: Integrazione immediata nei progetti esistenti.
  • Licenza flessibile: Per applicazioni utente o fornitori di toolchain.
  • Variante C universale: Utilizzabile su qualsiasi CPU a 8/16/32/64 bit.
  • Varianti ottimizzate in Assembly: Versioni scritte a mano per RISC-V e ARM.
  • Completamente rientrante: Supporta ambienti multi-tasking.
  • Nessun utilizzo di Heap: Non richiede allocazione dinamica della memoria.

Varianti del prodotto

emFloat è disponibile in una variante universale in C e in versioni specifiche per architettura che includono moduli in assembly per massimizzare la velocità:

  1. Variante Universale C: Scritta in C altamente ottimizzato, offre prestazioni superiori alle implementazioni open-source comparabili. Supporta processori da 8 a 64 bit.
  2. Variante Arm: Codificata interamente in Assembly e conforme allo standard AEABI. È compatibile con toolchain GCC, LLVM/Clang, Arm Compiler (Keil) e IAR. Supporta qualsiasi CPU ARM a 32 bit (Cortex-M, A, R).
  3. Variante RISC-V: Scritta in assembly e compatibile con l’EABI. Supporta architetture RV32I e RV32E, con accelerazione specifica per l’estensione M (moltiplicazione/divisione) e istruzioni compatte (estensione C).

Implementazione e Design

emFloat si divide in due parti principali:

  1. Funzioni Aritmetiche: Implementano le operazioni base (addizione, sottrazione, moltiplicazione, divisione, conversioni) emulando il comportamento di una FPU.
  2. Funzioni Matematiche: Utilizzano i più moderni ed efficienti algoritmi per il calcolo di funzioni complesse (seno, logaritmo, ecc.), avvantaggiando il sistema sia in presenza che in assenza di FPU hardware.

Ottimizzazione specifica per architettura:

Nelle varianti Assembly, emFloat sfrutta le peculiarità di ogni processore. Ad esempio, per la divisione a singola precisione:

  • Utilizza istruzioni di divisione hardware se disponibili.
  • In assenza di divisione ma in presenza di moltiplicazione, usa l’approssimazione reciproca iniziale raffinata tramite iterazioni di Newton-Raphson.
  • In assenza di entrambe, utilizza un algoritmo di divisione “non-restoring”.

Integrazione e Utilizzo

emFloat fornisce tutte le API standard delle librerie C (tramite math.h) e le funzioni EABI chiamate implicitamente dal compilatore. Può essere usato in due modi:

  • Uso integrato: Si chiama la funzione standard (es. sin(x)). Il linker utilizzerà la versione di emFloat invece di quella standard.
  • Uso “Side-by-side”: Si chiamano esplicitamente le funzioni SEGGER (es. SEGGER_sin(x)), mantenendo la libreria standard del toolchain per il resto del progetto.

Opzioni di configurazione

La libreria può essere configurata per privilegiare la dimensione del codice o la velocità di esecuzione su una scala da -2 a +2:

  • -2: Massima riduzione del codice a scapito della velocità.
  • 0: Bilanciato.
  • +2: Massima velocità a scapito della dimensione.Indipendentemente dalla modalità, la precisione dei calcoli rimane identica.

Benchmark di confronto (Dimensione ROM)

Di seguito è riportato il confronto della memoria Flash occupata chiamando una selezione di funzioni matematiche (sin, cos, tan, ecc.) su diverse piattaforme.

Confronto su Arm (ARMv7M, Software FP)

LibreriaUtilizzo ROM (Flash)
SEGGER emFloat10.628 byte
IAR17.656 byte
AC6 MicroLib18.668 byte
GNU (GCC)33.809 byte

Confronto su RISC-V (RV32IMC)

LibreriaUtilizzo ROM (Flash)
SEGGER emFloat12.644 byte
GNU (GCC)47.176 byte

Licenze

emFloat è disponibile per l’integrazione in progetti specifici o per i fornitori di toolchain.

  • Pagamento unico: Solitamente senza royalty.
  • Codice sorgente: Fornito con commenti completi.
  • Commerciale: Può essere integrato in prodotti proprietari senza l’obbligo di divulgare il codice sorgente combinato (a differenza delle licenze open-source).
  • Opzione Buyout per produttori di silicio: Possibilità di redistribuire emFloat ai propri clienti sotto i propri termini.

Articoli simili

  •  |  | 

    Segger J-Trace

    Panoramica Lo J-Trace di SEGGER è una sonda di tracciamento (trace probe) professionale di tipo streaming che offre la migliore esperienza di analisi possibile, vantando un elenco esteso di funzionalità in grado di soddisfare ogni esigenza di debug degli sviluppatori embedded. Grazie allo streaming trace illimitato, al Live Code Profiling e alla Live Code Coverage,…

  •  | 

    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 emUSB-C PD

    emUSB-C PD trasforma il cavo in una connessione intelligente, consentendo il rilevamento del tipo di dispositivo collegato, delle capacità di alimentazione, del software USB Host/Device e molto altro. Con la libreria emUSB-C PD di SEGGER, le applicazioni embedded possono gestire facilmente una porta USB-C su qualsiasi dispositivo dotato di un controller USB PD. emUSB-C PD…

  •  |  | 

    SEGGER emFTP

    FTP significa File Transfer Protocol (Protocollo di Trasferimento File). È il meccanismo di base per spostare file tra macchine su reti basate su TCP/IP, come Internet. L’FTP è un protocollo client/server, il che significa che una macchina (il client) avvia il trasferimento contattando un’altra macchina (il server) ed effettuando delle richieste. Il server deve essere…

  •  |  |  | 

    Segger emSSL

    emSSL offre un supporto completo per i più recenti protocolli TLS, fornendo funzionalità avanzate senza i vincoli delle licenze open-source o dell’obbligo di attribuzione. Può essere integrato senza problemi in prodotti gratuiti, commerciali o proprietari senza la necessità di divulgare il codice sorgente combinato. Fornito come codice sorgente in ANSI C, emSSL garantisce la massima…

  •  |  |  | 

    Segger emUSB Host

    Panoramica Il software emUSB-Host consente alle periferiche USB di funzionare con i dispositivi embedded. Fornisce funzionalità complete di host USB, inclusi il supporto per hub esterni e driver di classe (opzionali). Il software è conforme alle specifiche standard stabilite dall’USB Implementors Forum e supporta tutte le modalità di trasferimento (control, bulk, interrupt e isochronous) a…