Embedded Software Engineer
- Design, develop, implement, and test high-performance embedded software solutions in C/C++ for Linux-based embedded systems, System-on-Chip (SoC) platforms, and Software Defined Radio (SDR) applications.
- Develop firmware and low-level software that interfaces with FPGA-based hardware, RF front-ends, DMA engines, and custom embedded hardware.
- Design and optimize high-throughput IQ data pipelines between FPGA fabric, system memory, and user-space applications with emphasis on low latency and deterministic performance.
- Develop and maintain software supporting Xilinx/AMD Zynq, Nvidia Jetson, or similar embedded computing platforms.
- Configure and optimize DMA transfers, memory management, cache coherency, and zero-copy architectures for efficient data movement.
- Develop multithreaded real-time software using C/C++, POSIX threads, synchronization primitives, and lock-free programming techniques.
- Optimize software performance using ARM NEON SIMD instructions, vectorized libraries (VOLK, Eigen), or GPU acceleration where appropriate.
- Develop and maintain Linux user-space applications and interfaces for SDR hardware using Industrial I/O (IIO), sysfs, ioctl, or custom device interfaces.
- Support Linux BSP customization and embedded Linux image development using Yocto, PetaLinux, or Buildroot.
- Collaborate with FPGA, RF, electrical, systems, and test engineers to develop integrated hardware/software solutions.
- Analyze system performance, including CPU utilization, memory usage, throughput, latency, and timing behavior to ensure sustained real-time processing.
- Participate in system architecture discussions and assist in defining software requirements and interface specifications.
- Conduct unit testing, integration testing, and performance validation of embedded software.
- Implement secure coding practices and support cyber-hardened embedded software designs.
- Create and maintain technical documentation including software design documentation, interface control documents (ICDs), test procedures, and user guides.
- Participate in Agile development activities including sprint planning, technical reviews, and code walkthroughs.
- Support integration, troubleshooting, and defect resolution for fielded systems.
- Other duties as assigned.