Embedded software development
We understand the specifics of real-time programming and resource constrained environments. Our experience in writing bare metal applications includes for various families of microcontrollers, such as ARM Cortex M and R, TI PRU and Cadence Tensilica cores.
OS & Bootloader
Our expertise in kernel-level code includes Linux, FreeBSD and FreeRTOS operating systems and multiple bootloaders, including U-Boot, Barebox and UEFI EDK2. We offer Base Support Packages (BSP) for your custom SoC and SoM designs. We work with open-source community to make embedded operating systems safer and better for everyone. We embrace the power and simplicity of UNIX.
We specialize in broad range of device driver classes, including, but not limited to PCI-Express, Ethernet, NAND, USB, SATA, SPI, I2C as well as audio and video protocols and stacks. We use techniques such as zero-copy DMA to make sure our driver code has the best possible performance.
Application layer & middleware
Our promise to deliver end-to-end solutions of course includes application and middleware pieces. We use state-of-the-art programming techniques and technologies to deliver fast, safe and reliable code. We use C, C++17 and Rust programming languages to write maintainable and readable code and concurrent lockless data structures to make sure applications created by us offer outstanding performance and scalability. On less resource restricted systems we supplement our toolkit with Python and Cython programming languages to speed up the development.
Embedded hardware development
Each and every software stack requires a solid hardware platform to run on. While we are used to programming and debugging of the embedded systems provided by a different vendor, we can also offer our own digital PCB design. Hardware systems we are designing usually utilize an ARM CPU, SOC, SOM, or an FPGA, additional pieces of a discrete digital logic, appropriate power circuit and connectors providing required external connectivity.
Debugging and profiling
We can help you make your code fast, safe and reliable. We offer software verification services that include debugging and profiling. We can also help you make your code maintainable and readable. Our static and dynamic code analysis methods help find even the most hard to find bugs.