Role :- Embedded Software Engineer
Location: Lake Forest, CA — On-site
Contract – 12+ months
Job Description :
Responsibilities
· Design, develop, and maintain C/C++ software for RTOS, Real-Time Linux, and Linux-based embedded controllers for real-time sensing, communication, monitoring, and device control.
· Develop multi-threaded and real-time applications, including task scheduling, interrupts, synchronization, IPC, timers, state machines, watchdogs, and fault handling.
· Develop and integrate low-level hardware interfaces and communication protocols including GPIO, UART, SPI, I²C, CAN/CAN-FD, Ethernet, TCP/IP, and UDP.
· Develop and debug device drivers, BSP/HAL components, and hardware/software interfaces.
· Perform system-level debugging and performance analysis, including latency, jitter, CPU/memory utilization, and communication performance.
· Support networking and application interfaces including REST, MQTT, gRPC/Protobuf, and related technologies.
· Develop Python tools for test automation, diagnostics, data collection, and hardware validation.
· Participate in architecture/design reviews, code reviews, testing, integration, and system validation.
Required Qualifications
· BS/MS in Computer Engineering, Electrical Engineering, Computer Science, or related field, with 5+ years of embedded/real-time software development experience.
· Strong proficiency in C/C++ and working proficiency in Python.
· Strong foundation in computer organization and architecture, including Von Neumann/Harvard architectures, CPU operation, registers, instruction execution, buses, and memory-mapped I/O.
· Strong understanding of memory architecture, including cache, SRAM/DRAM/Flash, stack/heap, virtual/physical memory, DMA, and memory management.
· Strong knowledge of Real-Time Operating Systems, including tasks/threads, scheduling, priorities, context switching, mutexes/semaphores, queues, synchronization, priority inversion, latency, jitter, and deterministic execution.
· Strong understanding of hardware/software interrupts, ISRs, interrupt priorities, exceptions, interrupt latency, and interrupt-to-task interaction.
· Hands-on experience with embedded controllers/microprocessors/SoCs and hardware interfaces such as GPIO, UART, SPI, I²C, CAN/CAN-FD, ADC/DAC, and Ethernet.
· Experience with Embedded/Real-Time Linux, multithreading, IPC, sockets, device interfaces, and user-space/kernel-space concepts.
· Ability to read schematics, datasheets, register maps, memory maps, and timing diagrams and debug hardware/software interactions.