Software Engineering

Our expertise brings needed skills to your project

Problems we solve

We can help! Our expertise brings needed skills to your project, so you can deliver on-time, on-budget, and exceed expectations.

Embedded Systems

Developing Embedded Systems software (firmware) since 1989
... designing the microcontroller-based hardware much of the time too.

Our understanding of:
• microprocessors
peripheral interfaces
real-time design
interrupt/signal handlers
leads to fast, resource-efficient embedded code.
Experience with Linux and Real-Time Operating Systems such as QNX and µCOS-II, and custom cyclic and event-driven schedulers.

Languages

Software Development in:

• C / C++
• Assembly (NXP, Renesas, Microchip, others)
• Perl
• HTML / CSS / PHP
• Visual Basic for Applications
Software Designed using:
• Unified Modeling Language (UML)
• Active State Charts
• State Transition Diagrams
• Real-Time Scheduling Algorithms
⚬ Rate Monotonic Analysis (RMA)
⚬ Major / Minor Loop Cyclic

Slew-to-Cue Interface Front Panel

Support Services

In addition to programming, we support client Software Development in many ways, including:

• Process Development
• Code Inspection and Facilitation
• Prototype Development
• Tool Evaluation
⚬ Microprocessors
⚬ Compiler Suites
⚬ Real-time Operating Systems
⚬ In-circuit Emulators / Debuggers

Circular Queue

Critical Analyses

“Industry Standard” testing cannot find some of the most critical defects: Race conditions, Re-entrancy clashes, Deadlocks, Timing problems, Stack Overflows, etc. These can be particularly problematic in Real-time Embedded Systems, whether or not they use an RTOS.

We perform Critical Analyses on your code to uncover the defects which testing misses:
Timing/Schedulability – will every task and interrupt always finish in time?
Deadlock – how long could tasks block to wait for a shared resource?
Stack Depth – can the stack overflow (or underflow) under worst-case conditions?
Reentrancy – can a function/method be invoked safely by different priority tasks when necessary?
Shared Resources / Race Conditions – are results affected by who calls the routine first?