We provide embedded system software development and testing services across a wide variety of application domains. Even if you don’t see your precise needs covered in these pages, please contact us and find out how we may be able to help you.

Requirements Definition

The first stage in the process of developing an embedded system is understanding what the system is supposed to do. System requirements must be carefully defined and analyzed to ensure that no requirements are contradictory or lead to an infeasible system concept.

System Design

Given a sufficient set of system requirements, the design process begins. Much of this task involves choosing among potentially many viable approaches for building a system that satisfies the requirements. Each design decision must factor in both the immediate effects of each choice and the long term ramifications for system sustainment.

System Simulation

When working with a system that does not yet exist in an operable form, it is often beneficial to develop simulations of the entire system or selected components. These simulations can be used to refine the design and evaluate alternatives. Simulations can enable progress on some aspects of system development (such as software development) before a hardware implementation exists. Simulation development and validation requires a careful engineering approach to ensure the simulation is an adequate representation of the real system.

Hardware and Software Development

This task results in the implementation of the system design. To ensure the development progress remains on track for success, there must be ongoing testing to ensure the implementation satisfies the requirements and reflects the planned design.


Testing must take place at multiple levels throughout the development process. Software should be tested at the unit level as part of daily development activity. As software components are merged into functional capabilities, tests must be designed to evaluate the higher level of integration. It must be possible to conduct testing in an automated manner throughout the development and sustainment cycle. Where appropriate, bench test systems should be developed and used on a regular basis to ensure newly implemented capabilities are functioning properly and the existing capability undergo regression testing.


We have experience with Freescale 68K, HCS12 and S12X CPUs, ARM7 CPUs, assembly language, embedded C and C++, C# and .NET on the desktop interacting with embedded systems, Java, μC/OS-II real-time kernel, MATLAB, Simulink, Real-Time Workshop, CodeWarrior (Classic and Eclipse variants), Android app development, Controller Area Network (CAN), RS-232, RS-422, RS-485, analog I/O, digital I/O, timers, TCP/IP, USB, digital filter design, Kalman filter design, test-driven development, extensive testing of embedded software prior to installation on target system, web server-based integration of embedded systems, PLC devices (AutomationDirect CLICK and DirectLogic devices), debugging of complex hardware/software integration problems, touchscreen scripting, SQL databases (SQL Server, MySql, PostgreSQL, Firebird), NUnit testing framework, static code analysis, generation of real-time code from state machine diagrams, control system analysis and design, navigation system analysis and design, a development process scalable to customer requirements (from sequential design and development to iterative, agile (Scrum, XP) design and implementation), Ruby and Rails development.

As a standard practice we provide customer access to online project tracking and issue tracking tools.