Embedded software development

We are professionals in embedded software development. We are happy to develop your embedded software on a turnkey basis, assist your development team or add new features to your existing software.

Contact us
Embedded software development

Embedded software

Embedded software (firmware), i.e. software for electronics, is specific: devices such as microcontrollers, sensors or IoT devices have limited computing power and specific requirements for reliability, security and energy efficiency compared to conventional IT projects.

Depending on the hardware used, we choose the appropriate technology, most often:

  • based on embedded Linux,
  • based on microcontrollers, using the FreeRTOS operating system or working without an operating system (bare-metal).

For high-speed applications we use FPGAs (VHDL), for industrial applications we choose proven PLC platforms (Siemens, Omron, Fatek, Teco/Foxtrot) or we build our own PLCs with an architecture adapted to the application.

We have practical know-how in firmware development for medical applications, industrial automation, image processing systems and other general applications.

For medical software we prepare documentation according to ČSN EN 62340 and process documentation of development (for example “V” – diagram).

Embedded Linux

Embedded Linux is an operating system based on the Linux kernel that is optimized for use in embedded systems. These systems are usually resource constrained and specialized for specific tasks, such as medical and measurement devices, networking equipment, industrial automation, navigation equipment, and more.

Embedded Linux enables the development of complex, communicating applications at reasonable cost while maintaining relatively easy portability between platforms. These applications are also significantly more flexible in terms of remote management, diagnostics and upgrade options.

We have been involved in embedded Linux development since 2013. Our applications control industrial lines, measure physiological functions of patients or control road automation.

We like to use NXP platforms (e.g. i.MX6, i.MX8), STM32MP1 and nVidia Jetson (TX2, Jetson Nano, Orin); we have also developed more applications on low cost platforms with OpenWRT, e.g. based on RT5350 or MT7688. We have also developed many applications for Raspberry Pi or Raspberry Pi Compute Module and SOM modules such as Toradex, Variscite or Compulab.

We can also develop our own processor boards for Linux control systems – typically based on STM32MP1, NXP i.MX6, i.MX8, TI Sitara. In times of chip crunch, we are also developing on lesser known but well available platforms, for example we have developed devices on Rockchip or Allwinner platforms (A64, A20, A13, Allwinner V3s and others).

In particular, we work with the Yocto/OpenEmbedded and Buildroot frameworks, which allow us to create the entire image of the device file system from the source code, thus eliminating the risk of errors when configuring individual devices. We write our own code in C/C++, Python, PHP, Lua, C# .

For graphical user interfaces we use Qt, LVGL libraries or web technologies (e.g. Electron); this is also connected with the web technology stack (JavaScript, NodeJS).

We supply firmware for embedded Linux in its entirety: customized operating system (BSP – Board Support Package, including drivers for specific hardware) and user applications.

Firmware development for microcontrollers

We develop firmware for microcontrollers every day. From small applications with dozens of lines to complex systems with dozens of interacting microcontrollers.

Most often we use ARM Cortex microcontrollers (most often STM32), PIC, Microchip resp. Atmel AVR, RP2040; we are equipped with e.g. also for PSoC, TI MSP430, Kinetis, Renesas or HCS8.

Microcontrollers with built-in wireless (RF) part and support for Wi-Fi, Bluetooth and ZigBee are also common platforms – we commonly work with ESP32, Nordic nRF or Cypress/Infineon CyBLE.

Firmware for microcontrollers is usually written in C or C++.

In the field of signal processing – DSP signal processors “we can” Texas Instruments and Microchip dsPIC. We also use CPLD gate arrays, Xilinx and Lattice FPGAs.

Apps for mobile phones and tablets

Many of the products we develop work with a mobile application: we can offer mobile application development for Android or iOS (iPhone).

Most often we work with the React Native framework, which allows you to share the same app code for both competing Android and iOS platforms, saving costs and simplifying app maintenance. We can also do native development in Kotlin/Swift.

PC software

Many of our devices communicate with a computer, and so processing the application for the computer becomes an integral part of the development work. We can deliver software for Windows and Linux, which we can create in C#, Electron, Delphi, C++ or as a web application (PHP, Python).

Cloud and server applications

We run server applications communicating with devices developed by us on our own virtual servers (Linux) or on the cloud serverless solution Amazon AWS Cloud.
Our customers communicate with these server applications either via REST API or web interface.

We deliver reliable software

Tens of thousands of devices work reliably with our software every day.

How do we ensure software reliability during development?

  • Proper design and selection of technologies: we have enough experience and have burned enough times to know how to use which technology correctly.
  • During development we thoroughly test and review the code (code review). Testing allows us to identify errors and deficiencies and respond to them in a timely manner. In addition to manual, automated and stress testing, we use tools for static analysis (cppcheck) and checking compliance with code development standards (e.g. MISRA-C).
  • We pay attention to versioning and code maintainability. The team is able to work on different versions of the software (production, experimental). We are not dependent on the knowledge of one person. We use git/gitlab to trace changes.

And how do we ensure reliability in the field?

  • Our devices have sophisticated traffic monitoring – watchdog timers and traffic monitoring of all running tasks and communications.
  • Where possible, we deploy telemetry for remote monitoring and ideally remote device updates. We can monitor the status of both software and hardware online and intervene immediately in the event of an error. We use Zabbix and Grafana surveillance systems.

Resistance to file system corruption or incorrect device shutdown is ensured by journaling file systems and read-only volume mounting.

Software revision and tuning

We modify customer software, often from Arduino and Raspberry development platforms, into a professional form.

We will perform a code review or complete code rewrite, try to improve reliability and remove known bugs, add remote diagnostics, remote updates and support for production testing.

Thorough testing is a matter of course. We will also check the legality of the open source licenses used.

FAQ

Frequently Asked Questions

Are you interested in developing or manufacturing electronics for your company?

Contact us
How is software development organised?

Embedded development does not normally fall into the category of agile or classic (waterfall) development action management. We try to work with an appropriate mix of both methods: where the cost of change is high and the time to process changes is long (typically for major hardware changes), we work more with a waterfall system, i.e. with a precise specification and a minimum of iterations (“deliver a fully functional complex on the first or second try”). On the other hand, the software elements that are linked to this HW are easy to change and the magic of the agile approach, i.e. the possibility to deliver very soon a partial functionality (MVP), sufficient for the commercialization of the product, and to gradually debug it with the customer and add more features, gives us the opportunity to work faster and better adhere to customer requirements, even if they are not precisely defined in advance.

However, every project is different – we have many customers who prefer turnkey delivery to exact specifications. We are often given a very free hand – assignments like “make it better than this product” are common and we are happy to take them on.

We use gitlab software to manage development work, task management and bugtracking, and we keep internal documentation – especially the results of analysis work – in an internal wiki.

What CI/CD tools do you use?

Where appropriate, we use CI/CD tools. Our primary tool is gitlab, but we often work with customer systems such as Jira, bitbucket, Jenkins, etc.

CI/CD systems provide us with better control over code quality (static analysis, MISRA-C, etc.), documentation (Sphinx) and, last but not least, correct versioning and release of production versions.

How do you maintain the software?

We provide support for the operation of embedded software and maintenance of the system throughout its lifetime – i.e. necessary updates and modifications of functionality – through service contracts.

Maintenance is divided into:

  • updates to extend functionality,
  • Updates to maintain compatibility with the environment (e.g. other connected devices, other versions of Windows, etc.),
  • elimination of errors,
  • Continuous monitoring of security vulnerabilities, especially for critical infrastructure and medical equipment.
How long does it take to develop firmware?

The software part of electronics development is often the most time-consuming. Below are some examples.

  • Analysis and fixing of foreign code – speeding up device update to half the time – 2 weeks
  • BSP processing for embedded Linux module – 2 months
  • Microcontroller application with LTE communication with cloud, LCD display and internal scripting logic – 3 months
  • Control and web interface for controlling the medical device including necessary documentation for certification – 1 year

Contact

Are you interested in similar special custom electronics?

Do you need modern and reliable electronics? For integration into your facility or a complete new product or system? Let us know! We are happy to help you with small and complex applications.

Write us