Previous Job
Embedded Software Engineer
Ref No.: 17-15627
Location: San Diego, California
Position Type:Contract
3 Month Assignment, possibility for extension and potential conversion
Monday-Friday, 9:00am-6:00pm, not OT
Phone Screen and then Team Panel Interview for in Person
2-5+ YOE

Manager is looking for candidates with computer science or similar degree.
Not looking for someone with an Electrical Engineering degree.

Here are the key components that the manager is looking for, to be part of the screening process when submitting candidates:

C (level 1-5):
C++ (level 1-5):
Recent SPI driver development experience:
Recent I2C driver development experience:
PWM/temperature characterisation/UART/USB derivers:
Sensor detection/GPIO etc:
ThreadX or other low-performance RTOS (SafeRTOS, μ-velOSity etc):
serialization, low-level communication:
USB protocol (layer 2,3):
MCU (ARM4): what MCU experience in recent years:
Eclipse and Make files: what projects it was used in:

Desired skills:
Git: number of years/months
Jira: number of years/months
Jenkins: number of years/months
Confluence: number of years/months
Linux (1-5):
PC com/usb/uart and other port debugging/testing
USB (1-5):
Computer System/peripheral bus (1-5), which bus experience you have

General Job Description:

Duties and Responsibilities
• We are looking for a self-motivated embedded software engineer (Firmware) to design and develop our next generation of portable diagnostics platforms. In this position you will be responsible for the requirements, design specifications and final implementation of the code. You must be able to work as part of multidisciplinary team with minimal supervision
• The right candidate for this position will be an experienced engineer who has demonstrated success designing, documenting and implementing high quality firmware software running on different real time environments and platforms (e.g. μC, SoC).

• Duties include but are not limited to:
o Provide level of effort estimates to support planning activities.
o Gather and document software requirements and specifications.
o Participate in computing and software architecture efforts.
o Design software component(s) according to design inputs and architecture.
o Develop code to implement new functionality or change existing.
o Implement unit test to meet coverage goals.
o Trace design outputs to design inputs.
o Fix defects found during implementation process or reported by the software test team.
o Support software process definition and improvement initiatives.
o Support release process.
Required Skills and Experience
• Software knowledge
o 2-5+ years of experience as a software engineer designing and supporting development of complex embedded systems, be able to maintain code written by others without the need to rewrite everything.
 Flexible
 Software type
o Expert level programming skills in C (required) and C++ (desired) for real time environments, employing defensive programming and safety-critical programming skills.
o Experience developing code to interface with hardware and peripherals such as stepper motors, DC motors, pumps, valve, and protocols such as I2C, SPI, GPIO, UART, RS485 and USB.. writing drivers, debugging drivers = these 4 drives are key
o Experience developing software in various runtime environments with-in an RTOS (e.g. ThreadX, FreeRTOS, QNX, VxWorks and/or Linux/Ubuntu Embedded) or without (bare-metal or simple scheduler).
o Able to take complex designs from concept to implementation with minimal supervision.
o Experience estimating and planning software development projects.
o Be a proponent of formal unit testing, able to write modular testable code.
o Experience eliciting and writing software requirements and use cases.
o Strong written, verbal, interpersonal and presentation skills.
o Bachelor of Computer Science, Computer Engineering or equivalent (MS preferred).
o Willingness to travel up to 10% as needed
 safety net for any potential travel to other sites, most likely no travel
o Experience with software management tools such as GIT, and issue management systems such as JIRA.

• Preferred Hardware Knowledge
o Knowledge of microcontrollers' architectural principles and understanding of the 'building blocks' of a modern embedded processor (preferred ARM).
o Experience debugging embedded code with JTAG.
o Ability to read and review schematic, able to debug interfacing issues with hardware team. Hardware design skills are not required.