Sviluppato e perfezionato per oltre due decenni, emFloat è un componente altamente ottimizzato di emRun, la libreria runtime C di SEGGER, e anche parte di SEGGER Embedded Studio.

Progettato per il plug-and-play, emFloat può sostituire una libreria a virgola mobile predefinita, offrendo prestazioni migliori con meno codice. Molto veloce e molto piccolo, offre prestazioni simili a quelle di una FPU in puro software. Dove disponibile, aumenta persino le prestazioni di una FPU per funzioni matematiche complesse.

È disponibile autonomamente, in forma di codice sorgente, per gli sviluppatori che desiderano aumentare le prestazioni o ridurre le dimensioni del codice della propria applicazione senza sostituire l’intera libreria runtime fornita con il loro toolchain.

emFloat può anche essere concesso in licenza per l’inclusione in IDE di terze parti. Un esempio è la scelta di Microchip di includere emFloat nel toolchain del compilatore Microchip XC32 V4.0.

Il benchmarking per le librerie sia a virgola mobile che runtime può essere eseguito rapidamente e facilmente utilizzando Embedded Studio, che è prontamente disponibile gratuitamente per la valutazione e l’uso non commerciale in base alla Licenza amichevole di SEGGER.

Per dettagli sul motivo per cui è importante utilizzare una libreria runtime progettata con attenzione, fare riferimento alla pagina emRun.

Caratteristiche principali

  • Dimensioni del codice ridotte, alte prestazioni
  • Plug-and-play: può facilmente sostituire la libreria a virgola mobile predefinita, offrendo prestazioni migliori con meno codice.
  • Licenza flessibile, per l’integrazione in applicazioni o toolchain utente.
  • La variante C può essere utilizzata su qualsiasi CPU a 8/16/32/64 bit.
  • Varianti ottimizzate per l’assembly codificate a mano per RISC-V e ARM
  • Completamente reentrante
  • Nessun requisito heap

Licenza

emFloat è disponibile per l’integrazione in progetti specifici da parte degli utenti finali e dei fornitori di toolchain che desiderano fornire una libreria runtime e/o a virgola mobile di livello superiore ai propri utenti.

Sono disponibili opzioni di licenza per soddisfare tutte queste esigenze, generalmente con un unico pagamento e nessun obbligo di royalty.

La libreria viene fornita in codice sorgente, con diritti opzionali per la ridistribuzione in forma di codice oggetto. Tutti i file di origine del linguaggio C e assembly consegnati sono completamente commentati.

Il software SEGGER non è coperto da una licenza open source o di attribuzione obbligatoria e può essere integrato in qualsiasi prodotto commerciale o proprietario, senza l’obbligo di divulgare la fonte combinata.

Varianti

emFloat è disponibile in una variante universale scritta in C e in varianti specifiche per diverse CPU. Le varianti specifiche includono moduli scritti in linguaggio assembly, ottimizzati per l’architettura della CPU e offrono prestazioni più elevate rispetto alla variante universale C.

Variante C universale:

La versione universale è scritta in C. Le prestazioni sono altamente ottimizzate e molto superiori alle prestazioni delle implementazioni open source comparabili, codificate in C.

CPU supportate: La variante universale può essere utilizzata su qualsiasi piattaforma, inclusi processori a 8, 16, 32 e 64 bit.

Variante ARM:

La variante ottimizzata per ARM è completamente codificata in linguaggio assembly, conforme all’AEABI. Ciò significa che è compatibile con qualsiasi toolchain conforme a (A)EABI, inclusi tutti i toolchain basati su GCC, LLVM/Clang nonché il compilatore stesso di Arm (incl. Keil) e IAR e può sostituire la libreria runtime predefinita o parti di essa.

CPU supportate: La variante ARM supporta qualsiasi CPU ARM a 32 bit, a partire dall’architettura ARM V4. Ciò include Cortex-M, Cortex-A e Cortex-R.

Variante RISC-V:

La variante RISC-V è scritta in linguaggio assembly, fornendo funzioni compatibili con l’EABI. Può essere facilmente utilizzato per sostituire la libreria runtime predefinita dei toolchain conformi a EABI.

CPU supportate: La variante RISC-V supporta RV32I e RV32E con accelerazione specifica dell’architettura. Supporta moltiplicazione e divisione più veloci con l’estensione M (moltiplica/dividi). Supporta anche la divisione veloce anche se l’estensione M manca di un’istruzione di divisione.