Firmware Development

We Love Hardware

Details

    Languages :
    C, C++, Python
    Architecture :
    x86, AVR, Arm, Xtensa

Firmware Development

Firmware development can be challenging in many ways, an MCU that doesn’t follow its documentation, a non-standard I2C device or a memory chip that does behaves erratically in certain environments, while these problems should not affect the firmware in too many ways, the noise they create during the software development can be reduced significantly.

Cross Platform - Cross Architecture

While its not considered a requirement for most firmware developments, We’ve seen the results in the field. Writing software with a thin hardware abstraction layer enables execution of the logic and state machines on the developer’s desktop, enabling them to write efficient and simple code which can be simulated on the desktop, reducing the amount of hardware required for development and providing higher quality and better use of the developers’ time.

We strive to write cross platform and cross architecture code.

Unit Testing

Unit testing is considered somewhat of an art by those who don’t follow it, but TDD made unit testing into a methodological and consistent practice while providing a certain comfort that the software does what its supposed to do, unit testing doesn’t test what the software should not do unless the tests are thorough enough to make sure all software behaves as designed.

We truely believe in unit testing, which is made possible on many environments, it should be possible to run the tests on both the developers’ desktop and the MCU and if TDD is done right, will pinpoint the problem and unexpected behavior.

We write unit tests for our code. We wouldn’t have it any other way.

Static Analysis

Static code analysis can provide important insights into potential problems and can help prevent some of these problems. Static code analysis can monitor a standard style, detect architecture incompatibilities and even some security weaknesses.

Once we set up our build environment, our code is going though Static Code Analysis. We wouldn’t have it any other way.

Continuos Integration

Continous integration is important for a number of reasons, making sure the code everyone in the team still builds in the end of a commit, making sure that the code is tested on the server and MCU, going through Static Code Analysis to detect potential problems and security risks, Memory Leaks Analysis, Coverage is checked and documentation is generated. If at any point its not possible or a problem is detected, the code will be blocked until the problems are fixed.

We won’t write software any other way, its too important to write maintainable and testable code.