Interel - Embedded System Programmer - Firmware Design & Implementation (2-5 yrs)
Position Summary :
We are looking for an embedded system engineer to join our growing product development team. As an expert in embedded solutions, you will be working on both hardware and software.
You will be solving challenging problems and developing innovative solutions. Sound technical knowledge and a creative approach to problem solving are a must to qualify for this job.
- Design, prototype and verify systems for various embedded applications
- Develop and maintain firmware for embedded platforms
- Create and manage documentation for active projects
- Interact with clients and help with the development of customized embedded solutions
- Test and debug embedded software and applications
- Develop hardware and software specifications
- Participate in code and design reviews
- Provide technical assistance to clients and sales team
- Develop tools and techniques for testing and verification
- Capable of supporting product development planning, in addition to firmware design, implementation, and documentation.
- Working knowledge and understanding of Agile software development
- Bachelor's degree in electrical engineering or computer science
- Minimum two years of experience in embedded software or hardware development
- Sound knowledge of VHDL, C, C++ especially focused on embedded development
- Experience with version control systems like GIT
- Excellent knowledge of network interfaces and network protocols
- High degree of familiarity with logic analyzers, digital storage oscilloscope etc.
- Good verbal and written communication skills
Qualifications and/or Experience :
- Ability to read and understand schematics and digital and small signal analog electronics
- Ability to perform at least basic electronics debugging/troubleshooting.
- Experience in reading and understanding datasheets to produce driver code for a given device based on the information contained in its documentation
- A good understanding of microprocessor internals (mostly the registers).
- An excellent knowledge of what interrupts are and how they work in code
- An understanding of memory regions, and their uses (heap, stack, IVT, code).
- An understanding of the different kinds of memory (RAM, ROM, Flash, NVRAM), the differences between them and how they are read, written, accessed.
- A good understanding of DMA (Direct Memory Access), and how to implement it for systems which have DMA capability
- Experience with hexadecimal numbers, hexadecimal math and a very good understanding of Boolean logical operations
- Experience with multi-tasking systems and how to debug them
- Ability to use a debugger to perform at least simple operations such as setting breakpoints, single stepping mode, examining variable values, examining memory, examining registers - and understanding then when to enable and disable interrupts if performing single stepping using a debugger
- How to develop and debug code for peripherals such as UARTs, A/D & D/A converters, timers, PWM generation from a timer, real-time clocks, etc.
- How to develop and debug code for communications using RS-485 (and its variants), SPI, I2C, and parallel data ports.
Software design :
- Experience on embedded application design based on its requirements, example choosing between using a foreground loop with interrupts vs. using a multi-tasking kernel
- Developing code to run under an RTOS (Real Time Operating System), and how to use semaphores, mutexes, queues, inter-task communications
- How to develop and debug code with stacks, queues, linked-lists, and other common data constructs.