As a Senior Embedded Software Engineer, you will architect, implement and maintain hardware-agnostic and OS-agnostic on-board software frameworks. You will work with the AI team to enable hardware integration on any bus in less than a day instead of months, with a focus on robustness, security and performance on Linux and real-time operating systems.
## Responsibilities
- Platform & Abstraction: Design and develop hardware-agnostic HAL and middleware stack in C/C++, supporting ARM Cortex-A/R/M, RISC-V, etc. Create OS-agnostic abstraction layers for Linux (Yocto/Ubuntu) and RTOS (FreeRTOS, Zephyr, RTEMS) with minimal code divergence.
- Driver & Protocol Implementation: Implementation and maintenance of bus protocol drivers (I2C, SPI, UART) with multi-bus and multi-instance support for redundancy. Define and maintain clear software-to-hardware interface contracts (ICDs/datasheet-driven).
- Architecture & Best Practices: Application of OOP principles in C++ and structured design in C for modular, testable components. Adherence to MISRA C/C++ and CERT Secure Coding guidelines; integration of static analysis, code reviews and Git-based CI pipelines.
- Automation & Testing: Development of Python scripts for automating on-board software configuration, build, flashing and validation across multiple target boards. Build and maintain hardware-in-the-loop and software-in-the-loop test frameworks.
- Collaboration & Mentorship: Collaboration with Software Lead, AI Engineer and Backend team. Mentoring of junior engineers and knowledge sharing on cross-platform strategies.