From Guiliani – Embedded GUI made fast and easy

Revision as of 15:18, 4 February 2021 by Sascha (talk | contribs) (ROM/RAM memory usage)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Guiliani is a C++ software framework enabling the creation of visually appealing, hardware and OS platform-independent GUIs for embedded systems.

Guiliani adopts the philosophy of write once, compile for & run on many different target hardware. Once a Guiliani application has been developed, it can run natively on supported target platforms. When using Guiliani, the usual development workflow is to design the application on a PC and target a set of embedded platforms for production release.

Minimum HW requirements

Criteria Requirements
MCU 100Mhz
ROM ~700kb for Guiliani without resources
RAM ~50kb for Guiliani without resources
Compiler C++ Compiler with exception Support
Operating System no Operating System required, but many supported

Architecture overview

Guiliani is split into two layers, the Guiliani runtime engine, and a platform abstraction layer. Architecture 20.jpg


System, platform and peripherals

  • Object-oriented C++ HMI-framework optimized for embedded systems
    • Low memory consumption
    • Minimized CPU usage
  • Operation system independent (Baremetal, eLinux, FreeRTOS, embOS, ARM mbed, ...)
  • CPU independent (MCU, MPU, ARM, FPGA with NIOS, ...)
    • Support for fixed point / floating point CPUs
    • So far supported embedded platforms include: i.MX6, i.MX7, Raspberry PI, Renesas RZ/A, RZ/G, RX63N, STM32F429, ALTERA NIOS II, Intel x86,…
  • Supports software-rasterizer (TES eGML) or GPU-accelerated Graphics-API (OpenGL (ES), TES D/AVE)
  • Support for subpixel-accurate rendering
  • Support for hardware-specific capabilities (e.g. hardware graphic layers)
  • UNICODE support (UTF-8, UTF-16)
  • Prepared for thread-safe integration into existing applications

GUI features

  • Large set of pre-defined widgets
  • Easy to customize existing widgets or to integrate new widgets
  • Support for animations
  • Multi-language support (dynamically switchable at runtime)
  • Image-sets (skinning)
  • Automated layout of GUI elements
  • Rich text support
  • Smart redraw mechanism and resource-management
  • GUI can be developed independently from applications

Application development & support

  • Comprehensive and up-to-date documentation
  • Customizable trainings regarding content, location and time
  • Tutorials available
  • Integrated debugging mechanism
  • GUI design and behavior is stored in XML or binary description-files
  • Easy communication with external applications

Guiliani in detail

ROM/RAM memory usage

The following list contains values for the memory-usage of Guiliani in different configurations. of course the actual memory-usage heavily depends on the used features and resources.

All values are determined using the following configuation:

 * GNU Tools ARM Embedded 6 2017 Q2
 * debug-build with -Og
Operating System (choose one) Description ROM RAM
FreeRTOS The code-size which is contributed by the operating system heavily depends on the function which are used by the application. Guiliani only uses the standard-function for memory-allocation, timer- and task-handling and peripheral-access. 1080kB depends
ARM mbed OS The code-size which is contributed by the operating system heavily depends on the function which are used by the application. Guiliani only uses the standard-function for memory-allocation, timer- and task-handling and peripheral-access. 600kB depends
Graphics-API (choose one) Description ROM RAM (not including memory for loaded images and framebuffers)
eGML (incl. image-decoder-libraries jpeg and png-lib) eGML can be used if no GPU-accelerated hardware is present. It is a pure software-rasterizer and can decode some image-formats by default. 1080kB 15kB
D/AVE D/AVE is a FPGA-backed hardware-accelerated Graphics-API with a wide feature-set. 530kB 10kB
BLU BLU can be used on platforms with very low ROM/RAM-capabilities. it features the basic primitives (Line, Rects) and basic blits for images. 560kB 10kB
Font-API (choose one) Description ROM RAM (not including memory for loaded fonts)
FreeType Standard-library for font-rendering. Can read TTF and OTF-files. 410kB 21kB
GlyphLib Bitmap-based font-engine using special exported fonts for very small platforms. 20kB 1kB
Guiliani-Features Description ROM RAM (not including working memory)
Core-Packages (mandatory) Includes every basic thing Guiliani needs to run. Resource-Management, Eventhandling, Intelligent Redraw, Timer- and Command-Processing... 350kB 11kB
DataPool The DataPool is used to exchange values between the application and the GUI. 10kB 1kB
Streaming-Engine Enables Guiliani to read and write objects into streams. This is used for loading and saving GSE-projects. 120kB 2kB
Feature-Factory All Guiliani-controls, commands, behaviours and layouters which are available to be used in an application. Ranges from 2kB for an Image to 50 for a ComboBox. By using a tailored factory only the features of Guiliani which are used in the GSE-project are included in the final binary. 550kB
Animations Various types of animations. 40kB