Embedded firmware consulting is the fastest way for you to resolve issues and gain guidance on your path towards developing high quality software for your embedded products.
When you become a consulting client, you embark on a journey of investing into a platform that helps you to stay agile by providing you the means to develop highly portable and verifiable embedded applications.
There are several benefits of becoming a Swedish Embedded Group client and partner:
- Simplifies your application development: by providing you with a robust kernel and libraries that adhere to the highest coding standards.
- Assists you in overcoming embedded firmware challenges: by working with you to identify and mitigate current and future issues with your software architecture. When done in time, you can avoid many challenges altogether.
- Provides independent, unbiased code and infrastructure review: so that your team can develop better embedded firmware.
- Helps you design robust and portable system architecture: by taking advantage of proven sorftware design patterns that make common problems easier to identify in time.
- System level consulting: embedded systems are complex and a consultant is absolutely required to understand everything from application level down to the interrupt and hardware interaction level. We cover the whole range top to bottom.
- Involvement in design decision making of the platform: taking into account you as a client, we develop our platform and SDK in direct response to your requirements and challenges. In a highly democratic fashion you are able to influence design decisions each step of the way.
- Weekly Q & A calls: so that you (and your team) can gain in depth understanding of how to build bigger and better software.
It is easy to get stuck and overwhelmed with the amount of data required to fully understand what needs to be done to build your firmware application on time. We are here to assist you with source code and know-how precisely in the area of embedded firmware development.
Partner with Swedish Embedded Consulting Group to make sure that you and your team are on the right track.
Simplify your firmware application development
By providing you with a complete toolbox of software libraries, utilities, device drivers and simulation support, we are able to considerably simplify your firmware development.
You no longer have to worry about the following:
- Device driver support: we maintain our platform to always stay up to date with latest device support and develop extra drivers for you.
- Simulation of your latest hardware: we can work with you (included in application development package) to develop highly customized simulation scenarios that will help your developers write software for your products before your product has been manufactured.
Together with Swedish Embedded Group you can get assistance with topics such as:
- RTOS: writing software for complex hardware devices often means that having full control over executing of the software is very important. RTOS makes it possible for us to implement a clean software architecture where complexity is split up into smaller easily understandable chunks.
- Control systems: control systems design on embedded systems requires thorough understanding of mathematics combined with understanding of realtime systems in order to implement efficient and fast algorithms on the available hardware. By utilizing control theory we can develop mathematically correct control algorithms for your embedded hardware device and make them run with high level of precision.
- Communication protocols: modern IoT systems rely on several standard protocols including CANOpen, LwM2M, Profinet and others to communicate with other embedded systems in the deployment environment. By using standard protocols and open source protocol stacks we can make your device communicate with other devices in the field.
- Hardware simulation: starting from a PCB working with instruction set simulation to simulate and verify your embedded firmware.
Overcome and eliminate your firmware challenges
Due to the nature of firmware development that places it very close to physical hardware, it is often hard to debug software problems and timing issues.
Through the use of several tools in the Swedish Embedded Platform SDK software debugging can be simplified considerably.
- Cross platform compilation: some software bugs can be identified merely by cross compiling a program to run on 64 bit linux. Good C code should work exactly the same and by looking at the differences in behavior, we can identify problem areas quickly.
- Unit and integration testing: our platform SDK contains integration with two powerful open source unit testing frameworks (CMock and Unity) which enable us to write unit tests for ANY piece of code inside your firmware code base. We are not limited to only testing higher level algorithms - we can help you test it all down to the lowest level device drivers.
- Debugging and tracing: many timing issues can be solved with debugging and tracing. However it is not always clear exactly how to trace and what to trace (and how to do it without negatively impacting application behavior). Using our tools we can build and simulate your firmware on variety of platforms and extract much more detailed information about what is going on inside your code.
- Automated simulation: this involves simulating your firmware. Simulation enables you to test scenarios involving multiple devices and to automate this testing process. Multi-device simulation has traditionally been hard to implement due to complicated coding skills being required. Swedish Embedded Platform SDK integrates simulation and testing into the main build process so that it becomes part of the normal development workflow.
Independent code and infrastructure review
Even the best developers can easily miss potential problems with their code. This is not due to not being attentive, it is simply due to being "too close" to ones own code.
Independent review solves this issue by having somebody from outside come in and review merge/pull requests of your team, giving valuable feedback, finding bugs and suggesting improvements. It also helps you with:
- Designing better architecture: an architecture that does its function well AND has been documented in a clear fashion is a good architecture.
- Use of design patterns improves code quality: some of these design patterns may not even be familiar to your programmers but they are very useful.
- Better workflow and infrastructure: to make reviews possible, it is necessary to have infrastructure in place for effective code review. If you don’t have it then you probably don’t have code reviews right now either. Which means you are letting many issues accumulate into a massive technical debt each and every day.
The less familiar the person who is doing the review is with your code, the more bugs they will find.
Achieve robust and portable system architecture
Portability is an increasingly important factor in firmware development because the market for hardware components can change extremely fast (as we have seen during 2020). This means that at any given time you may find yourself having to adopt your software to a completely new hardware.
If you do not address portability each and every day through automatic cross compilation and simulation, you are very likely to find yourself in a situation where you must quickly redo a lot of code. If this happens, you will find that it will be very difficult to avoid making mistakes and your project will very likely become delayed because of this.
We help you achieve portability for your embedded firmware in several ways:
- Native posix unit and integration testing: by mandating that majority of firmware code must be buildable for posix (which is absolutely necessary for unit tests anyway), we ensure that dependencies of your code are kept to a minimum. Native compilation does not guarantee clean code, but it does ensure that programmers run into hard blocks when they try to use obscure processor specific constructs and libraries - and this is a good thing.
- Extensive board support: it is no secret that we draw a lot of our lowest level hardware support from the Zephyr RTOS open source ecosystem. Zephyr hardware support is not always 100% perfect and very often drivers must be fixed and extended - but Zephyr is also a massive project with support for 400+ hardware configurations and numerous architectures - so the fact that some features may be missing is always expected. The upside is that you avoid having to write software support for 400+ boards yourself - and this is a good thing. By using existing board support it is possible to cross compile your application for many different boards - which makes prototyping and debugging very easy.
- Single board and multi-board simulation support: modern connected IoT systems rarely exist in a vacuum. Often multiple boards need to communicate with each other. This complexity leads to test scenarios that are unique to embedded systems. Traditional simulation tools have been very good at simulating one CPU - but simulation multiple boards including all peripherals has traditionally been hard. Swedish Embedded Platform SDK once again solves this problem by leveraging open source technologies - but what we also do is integrate simulation into the build process itself and define templates and patterns for quickly prototyping your firmware. This makes it possible for us to easily define multiboard setups running different binary applications and test these complex user interaction scenarios in a fully automated way leading to better software quality and better developer experience for your team.
System level consulting
Building an SDK like the Swedish Embedded Platform SDK is not an effort in duplicating what has already been done. Meaning that a lot of system components are used and reused to make the development experience as smooth as possible.
A consultant can not just focus on one layer and expect good results. A firmware consultant that is only good at application development will quickly discover that lack of understanding of kernel level code will become a bottleneck and a pain. Thus we we cover the whole range of technologies from top to bottom:
- Zephyr RTOS Consulting: linux has revolutionized the way we build modern web services. Open source ecosystem of reusable libraries and tools has been instrumental to this. To develop high quality embedded systems it is good to take what is already available and adopt it to a specific application. Zephyr RTOS, being fully embraced by the Linux foundation is a fantastic alternative to the linux kernel on resource constrained devices (32KB FLASH). Open source nature of these tools means that development often proceeds with a blazing speed that is never achievable by any single entity on their own. Keeping up to these changes can be a challenges. Getting technical help when you need it is absolutely essential.
- Renode simulation consulting: renode is another very powerful platform used by Swedish Embedded Platform SDK which takes care of emulation. Renode provides the infrastructure necessary for defining hardware configurations and interacting with the simulation which itself runs on a highly optimized emulator (based on QEMU). This in itself is a massive piece of infrastructure with support for over 50 hardware configurations and ability to define any combination of peripherals quite easily. Understanding how to leverage this to your best advantage is of utmost importance. We provide you with knowledge and experience in integrating these systems efficiently into your workflow. Swedish Embedded SDK provides a baseline for this integration.
- Swedish Embedded Platform SDK: the platform SDK itself provides a platform for integrating many different tools and allows us to deliver progressively better service to you as a consulting client. It ensures that we never need to solve the same problems twice. Meaning that you get a lot of development work done for you free of charge. However the most valuable work is the work that directly affects your product performance and for this it is necessary to do work directly related to your products. This is what a large portion of our consulting is about - helping you extract value out of what we already have and make any necessary changes to make this process of extracting value faster.
Involvement in design and decision making process
Suppose you need to have support added for new hardware. This support requires wide reaching changes to other parts of the system. These changes also affect other existing use cases outside of your company that you haven’t even thought about - but which may be relevant to you in the future.
By being a client with us you are directly involved in the process of this decision making. This ensures that design decisions are always made while taking your use cases into account and you can always influence these decisions (provided you do so constructively).
Consider the opposite scenario: you are using open source software and you are not a consulting client. Design decisions are being made without prioritizing your use cases. Now you are forced to chase latest and greatest source code and port your changes over and over again to enable your product to take advantage of latest features. This is an unworkable alternative.
Weekly Q & A calls
Back in the early days of Swedish Embedded, I used to conduct free public workshops. These workshops were wildly successful and I had no trouble filling these zoom calls with 50+ people.
I stopped doing these calls because it was prohibitively expensive. I had to spend several hours preparing the material ahead of the call, iron out slides, prepare the presentation and I got absolutely nothing in return for it.
The model for doing these calls was simply broken at the time.
The new model is to include these calls for you as part of the consulting service. Making them part of the consulting services also makes them far easier to justify in terms of effort required to make them worthwhile.
Thus, as a consulting client you get access to two weekly 1h calls for the duration of your subscription.