Qt for MCUs 2.3 released
Since the first release of Qt for MCUs, your feedback and requests are driving the development of Qt for MCUs. Today, we are happy to announce the release of version 2.3, which includes several of the most requested features and improvements. This new version adds the Loader QML type to Qt Quick Ultralite, support for partial framebuffers to reduce the memory requirements of your applications, support for building applications using MinGW on Windows, and much more!
The complete list of changes in this version is in the changelog in the online documentation. Continue reading for more details on the content of this release.
By default, all QML components declared in a Qt Quick Ultralite UI are statically allocated in memory, except for a few cases like the Repeater or ListView types, which can allocate their delegates dynamically. Static memory allocation has advantages, for example, better runtime performance and a lower likelihood for memory-related bugs, but also disadvantages because allocated data might not always be required during the lifetime of an application, wasting memory. When developing GUIs, static component allocation can be inefficient when there are many screens, but only one of them is visible at a time. The more there are application screens, the more memory will be wasted.
The new Loader QML type in Qt Quick Ultralite ensures full control over the allocation of a QML component, by allowing to delay its creation until required. This can help reduce the overall RAM footprint of an application and also its device startup time in some cases.
While this new type is directly modeled after and compatible with its counterpart in big Qt, it has some limitations that are documented here. If you're not familiar with this type, you can also learn more about it in this new Qt for MCUs example.
Next up is a new feature that can reduce your application's overall memory requirement substantially.
Frame buffers are required for any graphical application, it is a reserved area in RAM that contains all the pixels to be transferred to the display. At any time, it contains a full image of the last rendering done by the graphics engine. Qt Quick Ultralite typically uses a single or a double framebuffer, into which it only renders the pixels that actually change whenever the UI is updated. Once all drawing operations are completed, the full frame buffer needs to be transferred to the display. These buffers need to be large enough to accommodate all pixels on the display, which often means they amount to most of the RAM requirements in a typical microcontroller-based graphical application. As an example, a 16-bit display with a resolution of 480x272 would require 260 KB or 520 KB of RAM, for single or double buffering respectively.
To help reduce these RAM requirements—to free memory for the rest of the application, or simply when there just is not enough RAM to hold a full frame buffer—we added a new feature enabling the update of the display in batches, based on one or several smaller partial frame buffers.
This can reduce memory usage significantly, compared to single or double buffered graphics. For example, for a 480x272 display, one can now use as little as 1 KB for the frame buffer! However, this comes with restrictions and limitations. To use partial frame buffers, you must use a display that has built-in memory, typically those with DSI, SPI, or parallel connections. Additionally, it can cause tearing effects if animations cover a large portion of the display.
Some of our reference platforms now support this feature that you can enable in the platform sources. To dig deeper into the topic and learn how it can be implemented in your own platform ports, head over to this page.
These are just the main highlights of Qt for MCUs 2.3. Many more features and improvements have been included in this release, such as support for MinGW to build applications on Windows, several memory footprint reductions, improvements to the standalone code generation tools, and an improved Qt Creator plugin for the recently released version 9.0. Check out the release changelog to see the complete feature list.
The next feature update is planned for March 2023 with version 2.4. Highlights for this release will include a new feature to playback image sequences of complex 2D and 3D animations, a software vector graphics renderer to use Qt Quick Shapes on any microcontroller, font data compression, and an ever lighter Qt Quick Ultralite engine.
Get Qt for MCUs 2.3 today!
If you’re an existing Qt for MCUs developer, you can download Qt for MCUs 2.3 from the Qt Maintenance Tool, located at the root of your Qt for MCUs installation directory. If you're looking to dive in for the first time, click here to get started. Either way, we hope you enjoy the new features and improvements, and as always, we would love to hear your feedback and feature requests in the comments or by contacting us using this form.
Subscribe to our newsletter
Try Qt 6.6 Now!
Download the latest release here: www.qt.io/download.
Qt 6.6. is a feature release with focus on improving UX capabilities including responsive UI technology and the Qt Graph module.
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.