Design, develop and test embedded software/firmware for scientific instrumentation systems in a multi-disciplined, concurrent development team setting. Participate in product requirement definition and architecture development; follow formal design methods and code inspections for quality assurance.
Professional Qualifications
Education
Bachelor of Science in Computer Science, Computer Engineering, or an engineering discipline with a heavy emphasis on computer science is required.
Experience
Embedded: Design experience with embedded processors, utilizing data acquisition techniques in a real time, multitasking/threaded environment.
Must be proficient in at least one of the following languages: C, C++, Python or Java.
Familiar with and understanding of digital hardware, ARM based processors, memory management, GPIO, SPI, I2C, UART and other common hardware interfaces.
Familiar with and understanding of BSP/board support package, bootloaders, RTOS, embedded Linux drivers and kernel.
Demonstrated ability to translate abstract logical concepts and ideas into software/firmware architecture implementations.
Familiar with compilers, debuggers, source control (GIT), and bug tracking for code development.
General
Solid understanding of software engineering fundamentals and mathematics.
Self-starter and motivated. Enjoy challenges. Proven drive to achieve goals.
High insight, curiosity and problem-solving ability. High attention to detail.
Good interpersonal and networking skills.
Team player. Enjoys and works well with other people in a team environment.
Effective oral and written communication skills in English.
Dependable, positive attitude and good attendance.
High ethics, integrity, honesty, patience.
Position Responsibilities
Specific:
Design, develop, implement, test, debug, and document embedded software/firmware solutions for instrumentation applications.
Engage as a member of a multi-disciplined, multi-department design and development team.
Participate in product requirement definition through interactions with customers, scientists, and marketing personnel to understand and define features and functions.
Understand the hardware/software interfaces as they apply to the overall architecture.
Implement the software/firmware architecture using formal design methods and code inspections for quality assurance.
Integrate and test software/firmware to ensure that the design meets product requirements.
Document software, algorithms, and specifications
Maintain released software; troubleshoot and resolve defects.
General:
Gain a solid understanding of the scientific application/use-case being addressed with the product.
Assist with product development schedules.
Light Work-Exerting up to 20 pounds of force occasionally, and/or up to 10 pounds of force frequently, and/or a negligible amount of force constantly.
Other job-related duties as assigned.