Job Title: Embedded Software Engineer
Job Description
We are seeking a highly motivated Embedded Software Engineer to develop robust, efficient, and scalable software solutions for embedded control systems used in residential and power products. In this role, you work closely with hardware engineers, software engineers, and product teams to design and deliver high-quality embedded software, contribute to new product development and sustaining engineering, and help shape architectures and processes in a connected IoT and cloud-based environment.
Responsibilities
- Design, develop, and maintain embedded software for microcontroller-based systems using C and C++ on real-time operating systems such as QNX, RTX, ZephyrOS, and similar platforms.
- Collaborate with cross-functional hardware, software, and product teams to define software requirements, system architecture, and interface specifications.
- Own elements of embedded software development using layered architectures and embedded operating systems, ensuring scalability, maintainability, and performance.
- Plan and oversee unit testing, integration testing, regression testing, and system validation to ensure software reliability and quality.
- Design software for test, including board bring-up and end-of-line production test strategies and implementations.
- Develop networking implementations and application code for wireless processors supporting Wi-Fi, Bluetooth, ISM, and other communication technologies.
- Implement and support industry-standard communications protocols such as RS-485 (Modbus), SAE J1939 CAN, Ethernet, and USB within embedded systems.
- Perform and participate in code reviews, release processes, and workflow walkthroughs to drive continuous improvement of development practices.
- Support hardware troubleshooting during product development and testing, working closely with circuit and hardware design teams in a co-design environment.
- Document software design, architecture, interfaces, and implementation details in a clear and organized manner.
- Use industry-standard diagnostic tools, including emulators, debuggers, oscilloscopes, and custom diagnostic software, to debug and verify controller software at the unit level.
- Technically lead the breakdown of software scopes of work, and contribute to developing project timelines and budgets for embedded software initiatives.
- Mentor and guide less experienced team members in core embedded software development practices, tools, and methodologies.
- Contribute to both sustaining engineering activities and new product development efforts within an IoT and cloud-connected environment.
- Communicate effectively with diverse audiences to explain technical concepts, project status, and design decisions.
Essential Skills
- Bachelor of Science degree in Electrical and Computer Engineering or Computer Engineering is required; a Master’s degree is preferred.
- At least 6 years of professional work experience in embedded software development
- Strong embedded systems knowledge and experience working closely with hardware and circuits in a co-design environment.
- Demonstrated experience owning elements of embedded software development using layered architectures and embedded operating systems.
- Proficiency in C and C++ programming languages, including syntax, generally accepted code structure, and object-oriented programming concepts.
- Hands-on experience with industry-standard communications protocols such as RS-485 (Modbus), SAE J1939 CAN, Ethernet, and USB.
- Experience designing software for test, including unit testing, regression testing, board bring-up, and end-of-line production testing.
- Practical experience with real-time operating systems (RTOS), including platforms such as QNX, RTX, ZephyrOS, or similar.
- Ability to work effectively in an IoT and cloud-connected environment and understand networking and connectivity considerations for embedded devices.
- Strong engineering with the ability to analyze complex systems, troubleshoot issues, and propose robust solutions.
- Experience participating in or leading release processes, code reviews, and structured development workflows.
- Primarily strong C programming skills, with the ability to prioritize C over C++ where appropriate for embedded applications.
Additional Skills & Qualifications
- Master’s degree in Electrical and Computer Engineering, Computer Engineering, or a related field is preferred.
- Familiarity with CAN analysis tools such as Vector CANalyzer, CANape, and CANoe.
- Familiarity with debuggers and emulators for ARM-based processors and other embed