Embedded Software Engineer Interview Questions UK: 8 Real Questions and What Interviewers Want
Applying for a Embedded Software Engineer job in the UK? Here is what you are likely to be asked. These questions come from our Embedded Software Engineer question bank of 16 questions, written for UK employers at mid-level level.
Eight Embedded Software Engineer interview questions, and what the interviewer is thinking
1. What does the volatile keyword do in C, and when would you use it in embedded code?
Why they ask: It is a classic embedded question that exposes real understanding of compilers and hardware.
2. How do you write a safe and efficient interrupt service routine?
Why they ask: ISR design is central to reliable firmware and a frequent source of bugs.
3. Explain how you would use a real-time operating system such as FreeRTOS, and when would you choose one over a bare-metal super-loop?
Why they ask: RTOS knowledge is a standard requirement for many embedded roles.
4. Describe the differences between SPI, I2C and UART, and how you decide which to use.
Why they ask: Peripheral communication protocols are daily work for embedded engineers.
5. How do you manage memory in a resource-constrained embedded system, and how do you avoid stack overflows and fragmentation?
Why they ask: Limited RAM and flash make memory discipline essential.
6. Your device works on the bench but crashes randomly in the field after several days. How do you investigate?
Why they ask: It tests structured diagnosis of hard-to-reproduce embedded faults.
7. Tell me about a time you debugged a hardware and software interaction problem.
Why they ask: They want evidence of practical bench skills and perseverance.
8. Why do you want to work in embedded software, and what interests you about it?
Why they ask: They look for genuine motivation for a niche and demanding discipline.
A sample answer to question 1
What does the volatile keyword do in C, and when would you use it in embedded code?
volatile tells the compiler that a variable's value can change outside the normal program flow, so it must read from or write to memory every time rather than caching it in a register or optimising accesses away. I use it for memory-mapped peripheral registers, for variables modified in an interrupt service routine and read in the main loop, and for shared flags in simple bare-metal systems. For example, a status register polled in a while loop would otherwise be hoisted out of the loop by an optimising compiler, creating an infinite loop. It's important to understand its limits: volatile doesn't make an operation atomic, so a 32-bit counter shared with an ISR on an 8-bit or 16-bit core can still be torn mid-read, and it doesn't provide memory ordering between cores. For those cases I disable interrupts briefly, use atomic operations, or use RTOS primitives. I also avoid marking things volatile unnecessarily, as it hurts optimisation.
Common mistake to avoid: Claiming volatile makes code thread-safe; overusing it everywhere
Want the rest?
Full model answers, key points and common mistakes for all 16 questions are on the Embedded Software Engineer interview questions page. The first five are free, no sign-up needed.

Comments