Are you struggling to create stable and scalable firmware for your connected embedded devices? If so, you’re not alone.
Many companies face the same challenges when it comes to embedded firmware development. And we are here to help.
Swedish Embedded Group specializes in helping you through the process of building firmware that not only meets your business needs, but also stands the test of time.
With our expertise, you can confidently bring your connected devices to market, knowing that they will perform flawlessly for your customers.
Problem overview
Embedded firmware development is an integral part of any electronic product. Yet you may have been facing some of the more common problems that many other product companies and startups face almost instantly:
- Limited hiring resources: Building embedded firmware often requires specialized skills and knowledge, which can be difficult to find in-house or expensive to hire externally. This can lead to limited resources, which can impact the speed and efficiency of the firmware development process. Finding good kernel developers is even harder.
- Compatibility issues: Ensuring that the embedded firmware is compatible with the hardware and operating system of the product (and any connected devices as well) can be a challenging task. Compatibility issues can lead to delays in the development process and cause issues during the testing phase.
- Security vulnerabilities: Embedded firmware is often responsible for handling sensitive data, such as passwords and financial information. If the firmware is not properly secured, it can be vulnerable to attacks and data breaches.
- Complexity: Building embedded firmware can be a complex task, especially for products with multiple functions and features. Managing the complexity of the firmware can be challenging, as it requires coordinating multiple development disciplines and integrating different components.
- Testing and debugging: Ensuring that the embedded firmware is reliable and performs as intended requires thorough testing and debugging. This can be time-consuming and costly if done incorrectly, and can lead to delays in the development process.
If you are looking for help with any of the above then you are in the right place.
Your problems don’t end at that
Your issues do not stop at that. It gets worse.
Your current problems with firmware development are just symptoms of deeper issues. You may feel that they are impossible to overcome, but that is only because you have not put in the effort to build your firmware properly from the start.
- You are constantly chasing bugs. The fact that you are constantly trying to fix strange bugs is a sign of poor software structure and a lack of verification in your firmware. Poor software architecture includes the widespread use of global data, such as extern variables and static variables in functions. This makes it difficult to control the flow of data in your software and leads to bugs that are similar to trying to hold water in a bucket with thousands of holes. It is amazing how applying simple rules and coding standards can improve firmware and make it more robust - but you need someone with experience to tell you what these rules should be.
- Retaining developer knowledge: It is not possible to prevent developer churn completely. It is unfortunate when developers leave. However, the fact that new developers struggle to understand and work with your code is a symptom of poor overall architecture and a lack of documentation. If you had automated CI processes in place that would flag the lack of documentation, it would force developers to document and fix their code before the code is even accepted. It is much cheaper to do this from the beginning rather than having to go back and fix missing documentation and tests later. However, to make this work, you need a robust CI process that actively checks that all important features and constraints that you place on the code are upheld at all times.
- Dealing with chip shortages and changing hardware. Chip shortages are unpredictable, but the fact that your software is affected by such scenarios shows that you have not put enough thought into portability. When I personally write firmware, I usually ensure that it can be run on at least two platforms, such as x86 for testing and ARM for production. It is likely that a lot of your code is never run on Posix, which limits your options for implementing verification and forces you to use the time-consuming write-flash-debug-repeat cycle when testing. Even if flashing only takes seconds, there are other limitations to running code on physical hardware that waste time during development.
To minimize the impact of these problems, you need somebody to continuously help you in improving your overall firmware architecture, including your CI pipeline and overall software design.
The longer you wait the worse it gets
If you don’t have a continuous integration (CI) system in place, the quality of your code will continue to decline over time. This is because CI helps to prevent issues from occurring in the first place.
If you allow your developers and team members to work in a poorly designed environment without proper CI, the problems with your code will only continue to grow. This is known as the accumulation of technical debt. Which is something that you want to avoid.
The solution to these issues is to implement automation. By automating the process of enforcing architectural decisions and verifying the software being built, you can ensure that important decisions are not reversed later on and that your code continues to work at all times.
Words from customers
- We started by hiring junior engineers and when we got a prototype from them based on Raspberry Pi with wires sticking out, we realized that we must have something professional. We hired Martin to do our hardware and software and when I got his first draft of the board I was instantly impressed with the quality of his work. We have been very happy with the results we got and I would definitely call Martin again when I need help with our next product.
- Thank you for the nice and educational content.
- It’s hard to keep up with you because you are so fast. I start looking at one thing you did and then the next day you have already done 2 other things. It’s a bit hard for us to follow the performance that you deliver and keep up with you.
- We were very impressed with how familiar and competent you were with the things you were introducing into our project. In particular, for lack of a better expression, how courageous you were in going through the code and flipping it around basically.
- Thank you so very much for this. It looks really good. Well done you. I have so much more to learn.
- You are very gifted at explaining things.
How Can Swedish Embedded Help?
Swedish Embedded is the perfect solution for all your firmware architecture needs.
- Consulting: Our consulting services involve direct involvement in the development of your software, ensuring that your requirements and functionality are continuously delivered to you.
- Simulation & Testing: Our simulation and testing approach focuses on top to bottom simulation and testing of your entire software stack, all while being automated and integrated into your CI process for daily verification (return on investment from day one!)
- Training: With our training, your team will learn patterns to apply every day in their development, leading to a solid overall architecture.
To get the best results, we recommend using all three of our services: consulting, simulation and testing infrastructure, and training.
Partner with Swedish Embedded and ensure your software is continuously kept in good shape every day! Schedule introductory call.
Embedded Firmware Consulting
Swedish Embedded Consulting Group AB offers a comprehensive consulting service for firmware development that delivers numerous benefits to our clients.
- Thorough systems understanding: By partnering with us, you can expect a thorough understanding of software architecture and the importance of high-quality code.
- Cross-platform expertise: Our cross-platform, tested, and reusable firmware components can help lower maintenance costs in the long term.
- Clean code: We also use modern software development practices and design patterns to build code that is easy to maintain or understand by new developers.
Additionally, we can assist in reducing the complexity of legacy code through refactoring and cleaning up of the software design.
Our team is proficient in technologies such as:
- MCUBoot: MCUBoot is an open source bootloader for microcontroller-based devices. It allows for secure and efficient booting of firmware, including over-the-air (OTA) updates. It is widely used in IoT devices and embedded systems.
- Zephyr RTOS: Zephyr RTOS is a real-time operating system designed for the Internet of Things (IoT) and embedded systems. It is lightweight, modular, and scalable, providing a reliable and secure platform for connected devices. Zephyr RTOS supports multiple architectures and offers a wide range of features and tools, including networking, device drivers, security, and real-time scheduling.
- Renode: Renode is an open-source, cross-platform framework for testing and debugging software on embedded systems. It allows developers to create virtual environments for running and testing software, simulating hardware and network conditions. Renode is widely used in the development of Internet of Things (IoT) and other connected devices.
- CMock: CMock is a unit testing framework for C and C++ code that allows developers to easily create and verify mock objects during testing. It integrates easily with Zephyr using Swedish Embedded Platform SDK, and supports a variety of mocking methods including function stubs, function spies, and function expectations. CMock helps ensure code reliability and reduces the need for manual testing.
- RobotFramework: Robot Framework is a generic test automation framework that can be used for acceptance testing and acceptance test-driven development (ATDD). It has a simple syntax, easy-to-use libraries, and supports various test libraries and frameworks. It is written in Python and can be used to automate tests on various platforms, including web, mobile, and desktop applications.
- Swedish Embedded Platform SDK: a platform that combines Zephyr RTOS kernel with advanced simulation and testing using Renode. More details about SDK here.
Here are some connectivity solutions that you can expect us to use in your project:
- Bluetooth Low Energy (BLE): for low energy sensing solution and data gathering.
- WiFi: where connectivity to conventional wireless access points is desired.
- 6LoWPAN (Internet Protocol Version 6 over Low power Wireless Personal Area Networks)
- NFC (Near Field Communication): for close communication with tags and mobile phone.
- LoRaWAN (Long Range Wide Area Network)
- Sigfox: for reliable long range, low power communications.
Additionally, connectivity support in industrial environments is very important and duplication of effort in implementing custom higher level protocols should be avoided. Therefore we prefer reusing existing and time proven protocols instead:
- LWM2M (Lightweight Machine to Machine): This protocol is designed for communication between devices in the Internet of Things (IoT) and is used for device management and data collection.
- MQTT (Message Queue Telemetry Transport): This is a lightweight messaging protocol used for communication between devices in the IoT, particularly in low-bandwidth or low-power environments.
- CANopen (Protocol for organizing Controller Area Networks): This protocol is used for communication between devices in industrial control systems, such as those used in manufacturing or transportation.
- CoAP (Constrained Application Protocol): This protocol is designed for communication between devices in the IoT, and is particularly well-suited for use in resource-constrained environments.
If you would like to discuss a project and partner up with Swedish Embedded to implement your firmware project then book a call.
You can read more about consulting here.
Simulation & Testing Infrastructure
Integrating simulation and testing into your continuous integration pipeline is the most effective way to prevent bugs in your project.
- Prevent faulty and incomplete code: By implementing constraints such as requiring valid doxygen documentation and 100% test coverage for all code, you can encourage the developer to look at the code more than once and consequently prevent faulty and incomplete code from being merged into your main repository.
- Run comprehensive verification fully in software: Using simulation, you can verify the behavior of your software in a virtual environment before conducting expensive and time-consuming hardware testing.
- Multi-layer testing approach: By implementing multi-layer testing using RobotFramework acceptance tests, integration tests, and unit tests allows for thorough verification of your software without adding unnecessary complexity.
By integrating all of these verification processes into your CI, you can ensure that your software is always in excellent shape and ready for hardware testing by regularly running tests on every code change made by your development team.
If you would like to partner up with Swedish Embedded to implement test driven CI infrastructure for your firmware then book a call.
You can read more about simulation and testing here.
On-Demand Online Training
Are you just looking to learn more about firmware development, but are not looking for professional development services?
Swedish Embedded has several options available to help you gain knowledge and skills.
- Online training: Our online training platform offers structured content on various aspects of firmware development, and we also offer a newsletter filled with insights on related topics.
- Workshops: In addition, we offer workshops that can be delivered to your team either in person or on site.
- Live Q&A: We also have a live Q&A session every Wednesday where you can get answers to any questions you may have.
Our online training is available on a monthly subscription basis. Learn more about the online training options available to you by checking out the training page.
If you’re interested in partnering with us to train your team, don’t hesitate to book a call or use the calendar below: