CodeSpriteEmbedded software consultancy
specializing in
ARM Powered systems
HomeSite MapClientsContact
Search this site 
powered by FreeFind

Firmware Design

Firmware is the foundation of your product, yet apart from providing a stable base for your application to be built on, it contributes the least to your product's competitiveness in the marketplace. Trouble-shooting firmware issues diverts your engineers from developing the software that makes your product unique.

Real Time Operating Systems

CodeSprite has worked with various real time operating systems, including uC/OS, SuperTask, GEC's Architect multi-tasking system and LiveDevices' SSX5. In one project CodeSprite carried out extensive optimization of uC/OS while porting it to the ARM966E-S core, and corrected a subtle race-condition that can cause an idle-task stack overflow in interrupt-intensive systems.

Device Drivers

CodeSprite encourages strict isolation of software that accesses hardware from the application software. To simplify the implementation details slightly, typically device drivers written by CodeSprite contain two layers, the lowest layer performs all the finicky timing details and accesses into hardware registers. The upper layer performs the translation from the data and activities required by the hardware into a form more useful for the application programmer.

System Start-up Code

For 8-bit systems there may be very little start-up code; the system may be simple enough to allow the C compiler's start-up library code to perform all the system initialisation required. In more complex systems however, there may be a lot of set-up to do even before the C start-up library code can be run. This is a very specialised area and requires a detailed understanding of the processor architecture.

Software Efficiency Reviews

Code optimization has proven to be our most popular service. Since 1995, CodeSprite has specialized in the ARM architecture. We have analysed the ARM and Thumb compiler outputs for hundreds of thousands of lines of C code, watching the changes in generated code after every iteration of the source code.

The Golden Standard

CodeSprite can, and often does optimize software supplied as an isolated function in a source code file. We'll build the code and analyze its behaviour, then look for performance bottlenecks or opportunities to reduce code size.

Optimization Options

When requesting code optimization, the first decision is whether speed or code/data size optimization is the prime requirement. Very often the answer is "both!". That's not necessarily a problem - most optimizations implemented by CodeSprite have yielded improvements in both size and speed - particularly when aggregate savings across a number of functions in a large source code file are considered.

Hardware Factors in Software Efficiency

While it is certainly possible to create a System On Chip with the hardware developers working in isolation from the software developers, CodeSprite has seen many instances where an understanding of the ARM instruction set, and the way the C/C++ compiler uses it could have lead to a more efficient combined hardware/software platform.

Web Server Based Tools

It is rare that an new product exists in isolation; there are usually additional tools required for configuration, system diagnostics, or data capture.

Benefits of Web-based tools

The benefits that are achievable are:

Case Study: Post-mortem System State Analysis

A client required a tool to provide a stack backtrace from core-dump information while developing a new hard disk drive. It was soon recognized that the same tool could be used to extract a complete listing of all the variables that were saved in the memory dump to disk, with the values at the time the disk controller code decided to halt execution and report an error.

Free Software Downloads

The software applications and code snippets on these pages have been collected over a long period of time - some are new, some go back to the mid-nineties. All are available for use free of charge, though we do appreciate a short email postcard if you find anything fun or useful.

ARM MMU Table Generator

Mmugen is a utility program that creates MMU tables for ARM’s cached processors. The program reads a text file describing the target system’s memory map and generates a binary file containing level-one and level-two MMU page tables. This program may also be found in ARM's ADS software development toolkit, in the 'Examples' directory.

IP Address Gadgets

This is a simple gadget that allows you to display the ip address for anyone visiting your website. Use of the gadget is free, and simply requires a snippet of html to be placed on your web page:

Evolving Organisms

This was an experiment in Artificial Stupidity carried out in 1995, at a time when Artificial Intelligence was always in the popular press. I decided I didn't want to specify how the 'creatures' in the simulation interacted with their environment in any way, other than by setting up a pair of 'chromosomes'for six seed ants.

Tetravex Puzzle

A game written by Codesprite that is also available as a Google Gadget for your iGoogle home page or for integration into your own web pages.

Investment Calculator: Should I sell?...

Well, this isn't going to tell you, but it can help you explore some options. If you're sitting on a pile of shares bought way back when prices were high, sometimes it can be beneficial to sell them when there's a short rally, then buy back more when prices slip back - if you believe that the price will recover again.

Optimization Case Studies

Over the years CodeSprite has optimized many different types of code for the ARM architecture. It is important to realize that the original code we are optimizing isn't bad code - it is good, working code that we review to ensure that it uses the ARM architecture to its best advantage.

Notch Filter

The raw code supplied to CodeSprite was a notch filter written in ARM assembly language. It was fully functional, and was a distinct improvement on the equivalent code written in C. However, it took 22 microseconds out of a total interrupt-interval budget of approximately 55 microseconds.

Fonts & Graphics

A GPS product design was being adversely affected by screen redraw time. The product designers were using a graphics library supplied by the chip manufacturer, and their software engineers were fully loaded with the coding for the complex GPS calculations and a unique function-rich user interface and application code.

ARM Training

CodeSprite's ARM Training Course Instructor first taught ARM training courses while working at ARM, and has been contracted to teach ARM's Software training courses and the Software sections of ARM's Systems training courses on approximately sixteen occasions since joining CodeSprite in April 2000

CodeSprite Projects

CodeSprite has been involved in a large number of projects, and in this section we hope to provide you with some indication of the breadth of experience available and the widespread applicability of the real-time embedded skills available from CodeSprite. Dynamic DNS Service is a fully-functional Dynamic DNS resolution service for people who want to run a website from their home or office pc. The problem that SeeMyPage overcomes is that Internet Service Providers usually assign a new IP address every time a subscriber connects to the internet. This means that if visitors want to find a website on the subscriber's pc, they have to have some way of finding the current IP address.

Seijin IR Keyboard Software UART for ARM7500

A set top box email system required a low-cost method for connecting an infra-red wireless keyboard. The microcontroller used in the system did not have an available internal UART, so component cost and circuit board space were going to be adversely affected by the addition of external components.

Dynamically Updateable FLASH Functions

A GPS system needed to use parts of the program code FLASH device to store configuration and user data. RAM space was at a premium on this particular system, so very little was available for use as temporary storage when erasing and rewriting FLASH.

On-demand Overlay Loading System

In a system with restricted amounts of RAM, but ample slow-access memory, it was necessary to place some code modules in overlays, loaded as required and run from the same physical memory region.

CodeSprite's Clients

CodeSprite is pleased to include amongst its clients:

CodeSprite Contact Details

Email Address