Sr. Embedded Software EngineerCharlottesville, Va
allocortech is a small embedded software/electrical/mechanical design house that works with companies primarily looking to make large (500lb+) autonomous aircraft. Our normal business offering is to help design the avionics architecture and then either find COTS products to use, or design solutions where nothing currently fits well. We also occasionally take short term work from companies just looking for people with the skills we have (think embedded software, safety critical and high reliability design, calibration/qualification of sensors.)
We are seeking to hire an Embedded Software Engineer fluent in C++ (we use 17 internally, but knowledge of 11 is sufficient to bootstrap.) You will design, test, and document operating system level software with a level of rigor suitable for something that you really don't want crashing down on your head. Current projects involve STM32 peripheral and board bring up, managed Ethernet switch drivers and traffic management, lithium ion battery management and modelling, and framework development.
If terms like linker scripts, cross compilers, toolchains, GCC, GDB, JTAG, IPC, make, MCU, UART, interrupt handler, mutex, priority inversion, memory protection, stack, heap, and fixed-point are part of your daily vernacular, you've got about half the job down! You should also have good knowledge of hardware aspects of embedded systems design and be able to debug issues at the circuit level, particularly around the CPU.
Use of oscilloscopes, logic analyzers, multimeters, power supplies, and signal generators is a must. You will be one of very few engineers on the team, so you should be self-motivated and be comfortable in a position with high levels of accountability.
- Architect and implement the embedded software that runs the avionics and control systems of aircraft, and ensure that sensors and communication peripherals work right
- Work with the electrical engineers to bring up and debug new hardware
- Develop robust bootloaders for updating software on a distributed processor architecture
- Implement drivers in C/C++ and write test scripts to verify them across a variety of operating scenarios
- Support algorithm implementation, system integration, test, and debug
- Identify points of weakness in the software and electronics; help develop plans for improving and robustifying the product
- 4+ years of experience developing and testing embedded system software for real time applications/robotic systems
- Strong C/C++ micro controller experience, preferably including development with ARM processors
- Ability to review schematics and read data-sheets; experience supporting hardware bringup and debug
- Experience with customizing board support packages
- Experience developing and testing bootloaders
- Familiarity with U-Boot and building/customizing kernels and kernel drivers
- Familiarity with FreeRTOS
- Familiarity with Linux and the RT patchset
- Experience implementing robust drivers for basics comms protocols (UART, ethernet/lwIP, I2C, SPI, etc.)
- Familiarity with some scripting language (Python preferred)
- Experience with automated software development processes and modern tools (Git, CI, Bazel)
- Team player without an ego, passionate about aviation, and doing whatever it takes to deliver value
- Located or willing to relocate to central Virginia (Charlottesville) -- a 50/50 rotating position may be considered