We wish to put a junior on the path to becoming a good system-level software engineer, to be able to develop reliable firmware for any microcontroller architectures (we use AVR and multiple different ARM Cortex-M chips) and interface with a plethora of electronic components / equipment (e.g., temperature sensors, motors, industrial protocols, serial / wireless communication modules etc.).
You will be under the mentorship of a skilled embedded senior with over 7 years of experience of programming MCUs, while also having a Teaching Assistant position at U.P.B. (Automatică și Calculatoare).
- Develop firmware for various (mostly, custom-made) microcontroller-based boards;
- Read technical datasheets for various components and write peripheral device drivers (e.g., chip-to-chip communication, flash memory, multiplexers, sensors etc.);
- Learn many electronics interfacing protocols (UART, I2C, SPI, OneWire, RS485 etc.);
- Develop custom MCU bootloaders that safely do remote equipment upgrades;
- Learn to do speed / space optimizations, as expected in an embedded software setting;
- Maintain multiple board revisions and make customizations in a modular (organized) fashion;
- Debug low-level hardware problems using JTAG / multimeters / oscilloscopes / logic analyzers;
- Test and test again before going into production ;)
- Understand how most electronic systems work!
- Finished or currently enrolled in a relevant degree program in computer science or a related field;
- Moderate C programming skills (at least: have a good understanding of types, pointers, structs, bitwise operators, libc functions + some basic C preprocessor knowledge);
- Command line experience with compilers & build tools (i.e., IDE agnostic); GCC, compilation flags, linker, makefiles / cmake;
- Be knowledgeable of computer architecture concepts such as registers, instructions, memory organization etc.;
- Basic programming experience with some MCU platform (Arduino / AVR or any ARM Cortex-M based architecture will do);
- Basic gdb debugging experience;
- Medium Python language skills;
- Basic Linux skills;
- Basic electronics knowledge (e.g., but not limited to: Kirchhoff's laws, understand what a resistor / capacitor / transistor does, what is a logic level etc.);
- Organizational skills (e.g., writing documentation & unit tests);
- Experience with VCSes (git / mercurial / svn);
- Optional: experience with embedded communication protocols (SPI, I2C, UART, RS485) is a plus!
- Optional: experience with reading technical datasheets!
- Any RTOS experience is a plus!