Software Development Services
intelligent software inside|
Our main activity is writing embedded software (firmware)
for small to medium sized microcontrollers. We also write PC software, but mainly
this consists of software build tools, simulation tools, test tools and
Our smallest projects have been for tiny 8 bit microcontrollers with very
limited memory and peripherals, and our largest projects have scaled up to
32 bit processors running within a real time operating system.
Most of the time, our projects split up into a series of iterations of 4 main phases.
DESIGN - a good design leads to a reliable implementation,
and we believe that the architecture of software is the most important part of the design.
Our software is designed as a set of layers, and the application basically becomes a script
running on top of a set of common services. Even on very tiny systems, we have techniques
to structure the code in this way such that it is easy to read, and easy to change.
IMPLEMENTATION - most projects are split into a number of
small discrete phases with a deliverable of some kind at the end of each phase.
RAM and FLASH utilisation are always a major concern, and we have a number of small-footprint
coding techniques (with supporting tools) to make everything fit, such that the program is
still very easy to read and maintain. We build our own tiny debug facilities into all code,
which makes debugging and testing much easier and more predictable.
TEST - testing is a mindset rather than a phase, and testing
continues throughout the whole project from the early prototypes through to final deliverables.
Our debug agents built into the code allow us to unit test, regression test, and system test
using a single consistent interface, and our PC logging and diagnostics tools allow both
online and offline analysis of captured logs, making fault diagnosis much more predictable.
TRANSFER - Customers always know when the time is right on the
project to transfer ownership of the code and the design. A range of techniques are used,
including the design of bespoke training courses, the generation of documentation packs
to your requirements, or defined periods of coaching and mentoring of your
engineers so they take ownership of the code and can continue to develop
and change it as your needs change.
You will notice the absence of a specification phase - typically most of this
work tends to be done by the customer, and they come to us with a reasonably
clear idea of what they are trying to achieve. However, see also our
feasibility study services.