OKTET Labs


Firmware  |  Service provision process  |  Estimate provision
Services

Firmware

OKTET Labs proposes a methodoogy of embedded software/firmware development. We assume that some of following conditions take place:

  • software targeted to custom processor or execution unit with limited capabilities (command set, registers, resources)

  • it is not reasonable to develop high level language compiler due to limited applications of target processor and its limitations

  • target hardware has application-specific units, accelerators, etc.

  • size of code quite small (⇐64-96K essential commands - commands, written by engineer, not generated like unrolled loops etc.)

  • strong performance requirements; performance should be measured

  • manageable quality of software

  • software development in absence of target hardware (e.g. chip specified and its design in progress).

Examples of such applications includes:

  • communication devices (ATM controllers, Level 3 accelerators, traffic processing units in network devices, cryptographic processing)

  • mass storage subsystem (SCSI host adapters, SCSI devices firmware, mass storage devices, RAID)

  • link layers in mobile terminals (GSM, etc)

  • graphic accelerators software

In general, developed software intended to perform intensive speed data processing using quite simple algorithms and provides management interface. Non-realtime and complicated processing (e.g. network management, higher-level network protocols) not intended to be implementing in such way.

The following principles are used in our methodology:

  • Limit sources of the problem on every stage

    If tested software compiled using not working compilers and running
    on not working hardware or simulator, using incorrect test suite, finding
    the source of problem may be quite complex, and many developers should be
    involved in this process simultaneously.
  • Different developers should design code and tests (its quite traditional)

  • Common language.

    When possible, the same, flexible enough, language should be used for code
    development, testing, tools.
  • Level of assembler language programming should be improved when possible.

    Assembler should support data structure definitions and handling of
    structured data, function definition/invocation, parameter passing.
    Assembler should allow assembly-time checks, explicit or implicit (e.g.
    register usage. Assembler should support structured programming constructs
    (conditional statements, loops, switches, etc). Function inlining should
    be supported. Actually, assembler sources written as a program (in
    prepared environment); result of its execution is executable code.
  • Linking of assembler and execution environment.

    It should be possible to insert run-time checks and trace prints in
    assembler program. More general, it should be made possible to insert
    arbitrary high-level code in assembler program intended to be executed
    when control reaches appropriate place. Of course, it is better to use the
    same language as used for assembler programming and have access to the
    context defined in appropriate place of assembler code (function
    arguments, local variables, etc).
    This is quite useful for test development, protective coding,
    debugging.

Service details
Processes
Firmware Development Methodology


Search
Search OKTET Labs site:


For users
Users can login
Others may register