We can undertake software development for both embedded and non-embedded targets. This includes:
- “Bare Metal” embedded – no operating system – simple code runs directly on the target such as a microcontroller coded in C/C++ (GCC, Keil, XC8/16/32 and others) and assembler. Also including microkernels and multi-tasking/finite state machine implementations. Also VHDL for FPGA.
- Embedded OS Platform – operating system (including real time) – kernel drivers and userspace code such as embedded Linux platforms with GCC. Also embedded MicroPython.
- Bootloaders with remote firmware update capability – such as U-Boot
- User Apps for Desktop PC – for high performance client/server and UI applications with Linux and Windows in C, C#, C++, Java, Qt, Python, GCC, with a variety of software technology
- Mobile & Tablet – Android and iPhone apps with hardware integration and drivers.
- Cloud and Web Platforms – for distributed apps & processing across the Internet & Cloud systems, with databases, integration with content management systems, digital mapping, encryption and variable resource elastic computing.
- Internet of Things – for operation, volume data processing and control of sensors in our everyday lives.
- Secure Embedded & InfoSec – protection of information on embedded devices with strong hardware & software encryption with digital signatures on embedded data and communications.
For more details on the technical aspects please visit our pages on Software Development.
We can start from scratch, use off the shelf code or libraries or build on previous code supplied by our customers. We alternatively can use Open Source Software (OSS) code where appropriate and agreed with our customers as we have significant Open Source expertise.
Debug, Verification & Testing
Our many years developing software for a variety of target applications – from aerospace to consumer electronics – gives us an in-depth understanding of how to get the most from software and improve its reliability. We are able to carry out a variety of debug & testing related activities including:
- Code Reviews so we can help make any existing code more robust, modular, portable and extendable.
- Bug Triage & Analysis so we can prioritise existing problems and build up a picture of problem areas of code.
- Documentation automatically generated direct from code on rebuilds, this provides a valuable insight to the design of the software and allows trouble free maintenance.
- Specialist Analysis – code coverage, decision tree analysis, code complexity evaluation
- Safety Critical Software Engineering (e.g. for DO-178 and IEC 61508)
- Hardware/CPU Emulators & In-Circuit Debug for embedded targets where we need to get an even more low level viewpoint on operation of firmware in a controlled stepping, line-by-line way.
- Custom Integration Testbed & Fixtures for live system tests with a hybrid of simulated external hardware events in addition to actual hardware events from connected equipment where desirable.
- Virtualisation & Simulation when it is possible to to test in a pure software environment to ensure we have test repeatability and monitor code behaviour in detail during accelerated testing.
- Embedded Information Security & Encryption verification testing to ensure that embedded devices are secure and resilient against attack from reverse engineering and connection to public networks such as the Internet.