|  | 

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 emApps

    Panoramica emApps è un pacchetto software rivoluzionario che porta la nota flessibilità degli smartphone nel mondo dei sistemi embedded. Come alternativa al firmware fisso, emApps introduce un livello applicativo che consente di aggiungere nuove funzionalità in qualsiasi momento senza toccare il nucleo (core) validato del sistema. Per ottenere questo risultato, emApps crea delle “app”, ovvero…

  •  |  | 

    Segger emPower OS

    emPower OS di SEGGER è un sistema operativo completo che fornisce l’ambiente ideale per qualsiasi sviluppatore impegnato nella creazione di sistemi embedded o dispositivi IoT. Può essere adattato per girare in sistemi a microcontrollore singolo con risorse limitate (senza memoria esterna) o scalato per ottenere le massime prestazioni su processori applicativi (MPU) senza sovraccarichi inutili….

  •  |  | 

    Segger emBoot Secure

    Panoramica emBoot-Secure è la soluzione di SEGGER conforme al Cyber Resilience Act (CRA) per aggiornamenti firmware sicuri e verificabili su dispositivi embedded. Questo approccio end-to-end protegge i dispositivi da modifiche non autorizzate del firmware, furto di proprietà intellettuale e clonazione. Garantisce che venga installato solo firmware autentico e approvato dal produttore, utilizzando un’architettura crittografica a…

  •  | 

    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 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 Ozone

    Ozone è un ambiente di debugg grafico stand-alone completo per applicazioni embedded. Con Ozone è possibile eseguire il debug di qualsiasi applicazione basata su Arm o RISC-V a livello di sorgente (C, C++ e Rust) e assembly. Ozone può caricare applicazioni create con quasi tutti i tipi di toolchain o ambienti di sviluppo integrati (IDE),…