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.