Job Specifications
Req ID: 129670
Remote Position: No
Region: Americas
Country: Canada
State/Province: Ontario
City: Newmarket
Summary
The Engineer, Software develops, debugs, tests, deploys and supports code to be deployed in systems/products/equipment for various applications. They write, debug, maintain, and test software in various common languages and for software at various levels in the hierarchy (from Firmware to Application). Software creation follows an agreed to development process (such as Agile, Scrum, etc.) and complies with the product life cycle development (phase/gate deliverables).
The Engineer, Software works in cross functional teams with other designers, customers, manufacturing engineering and project leadership to ensure robust and high quality product development. Enhance designs with feedback from reviews in areas such as manufacturing, test, supply chain, reliability, industrial design and simulations.
Detailed Description
Performs tasks such as, but not limited to, the following:
Work independently to design and develop technical solutions without assistance in a limited number of technical fields supporting common segments/technologies. May also solve complex problems in cooperation with a team of other engineers.
Hardware Interaction: Write code directly interacting with microcontrollers/Microprocessors, SOCs, sensors, actuators, and other hardware components.
Low-Level Programming: Work extensively with C/C++ and assembly language for optimal performance and resource management.
Real-Time Operating Systems (RTOS): Develop and debug applications on constrained systems, often using RTOS for task scheduling and concurrency.
Resource Optimization: Efficiently manage memory, power, and processing cycles, critical for embedded devices.
Driver Development: Create and maintain device drivers for specific hardware peripherals (e.g., SPI, I2C, UART).
Firmware Development: Design, implement, and test firmware, often from boot-up to application logic.
Debugging & Testing: Utilize specialized tools like JTAG/SWD debuggers, oscilloscopes, and logic analyzers for hardware-level debugging.
Board Bring-Up: Participate in the initial software development phase when a new hardware board becomes available.
Protocol Implementation: Implement and work with various communication protocols (e.g., CAN, Ethernet, USB, custom wireless protocols).
Reliability & Safety: Design and test software for high reliability and, in A&D or equivalent, safety-critical operation (e.g., fail-safes, watchdog timers).
Standards & Compliances: Design and develop the software aligned with listed standards including but not limited to: RTA DO-178C & related standards.
Integrate tools and code developed by other internal groups or external customers
Debug of solutions using design of experiments, tools, and failure analysis methodologies
Liaison between the Customer, Program Manager, and the technical team
Apply a continuous improvement mindset to all aspects of the development process
Occasional travel and flexible work schedules for global site support may be required
Knowledge/Skills/Competencies
Firmware & Low-Level Programming: Experience in designing and developing firmware for embedded systems using languages like C/C++. Proficient in bare-metal programming, interrupt-driven design, and memory management for highly optimized code.
Microcontroller/Microprocessor: Working knowledge of microcontroller and microprocessor architectures (e.g., ARM Cortex, PIC, AVR) and their peripherals, including timers, ADC/DAC, PWM, and GPIO.
Real-Time Operating Systems (RTOS): Experience with RTOS concepts and implementations (e.g., FreeRTOS, RT-Thread), including task scheduling, inter-task communication, and synchronization.
Hardware-Software Integration: Proven ability to integrate software with hardware, perform board bring-up, and use electronic lab equipment (e.g., oscilloscopes, logic analyzers, and JTAG/SWD debuggers) to diagnose and resolve complex hardware-software issues.
Communication Protocols: Hands-on experience with both on-board and external communication protocols such as I2C, SPI, UART, CAN, USB, and Ethernet.
Embedded Linux/Operating Systems: Experience in developing applications for embedded Linux environments, including device driver development, kernel configuration, and file system management.
Scripting & Automation: Proficient in Python for developing build scripts, test automation frameworks, and data analysis tools to support the embedded development workflow.
Software Development Lifecycle (SDLC): Experience with the complete SDLC for embedded products, from concept and design to testing, deployment, and long-term maintenance.
Version Control: Experience with version control systems, particularly Git, for collaborative development and managing codebases.
Documentation: Strong technical writing skills to create and maintain clear, comprehensive documentation for firmware design, APIs, and test procedures.
Continuous
About the Company
Celestica enables the world's best brands. Through our unrivaled customer-centric approach, we partner with leading companies in aerospace and defense, communications, enterprise, healthtech, industrial, capital equipment, and smart energy to deliver solutions for their most complex challenges. A leader in design, manufacturing, hardware platform and supply chain solutions, Celestica brings global expertise and insight at every stage of product development - from the drawing board to full-scale production and after-market se...
Know more