10个基本嵌入式软件工程面试问题 *

最优秀的嵌入式软件工程师可以回答的最基本的问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.

现在就聘请一名顶级嵌入式软件工程师
Toptal logo是顶级自由软件开发人员的专属网络吗, designers, finance experts, product managers, and project managers in the world. 顶级公司雇佣Toptal自由职业者来完成他们最重要的项目.

Interview Questions

1.

描述在中档微控制器上使用通用实时操作系统(RTOS)的优缺点.

View answer

rtos可以显著简化复杂产品的开发, 哪一个可以转化为更快的开发周期. 它们通常支持将代码划分为任务, 实现跨任务通信机制, 并且通常包括特定于平台硬件的抽象(“驱动程序”), 这使得将固件移植到新硬件更容易. Because of all that, 它们还会带来代码大小和CPU使用方面的开销, 哪些不是所有项目都可以接受的.

2.

处理中断时有哪些常见问题?

View answer

中断处理程序几乎总是需要快速完成它们的执行——细节取决于设备和应用程序——这限制了它们代码中可以完成的事情的复杂性. Also, 执行中断处理程序代码的上下文可以, 不管是硬件原因还是软件原因, 防止在中断处理程序代码中使用:

  • Common library functions
  • Access to peripherals and devices
  • Even certain types of CPU instructions

缓解这种情况的通常方法是让中断控制器设置一个由非中断代码观察到的特殊变量, 然后可以执行任意动作

3.

在内存大小有明显限制的平台上, 静态还是动态分配内存更可取?

View answer

在内存大小为低千字节及以下的平台上,最好使用静态内存分配. This is because data overhead, CPU overhead, 在使用动态内存分配时,内存碎片可能是一个严重的问题.

申请加入Toptal的发展网络

and enjoy reliable, steady, remote 自由嵌入式软件工程师工作

Apply as a Freelancer
4.

为什么C和c++在嵌入式固件开发中仍然非常流行并得到广泛支持?

View answer

Hardware constraints, both for memory sizes and CPU speed, 限制可以在嵌入式设备上做的事情. C和c++通常开销很小,并且在提供给开发人员的抽象方面非常“接近硬件”. 这使得它们甚至适用于最小的设备.

5.

在两个设备之间可靠地实现类似ttl的串行通信需要多少条线, and why?

View answer

类似ttl的串行通信通常用于将基于微控制器的小型设备与大型计算机系统连接起来, 用于一般通信或上传固件. 这种类型的通信使用两根电线, one for each direction, called TX (transmit) and RX (receive.),但这些设备之间还需要有一个共同的电气接地水平, 因此,可靠地实现TTL串行通信的最小导线数是三根. (对公共电气接地的要求也存在于I2C和SPI中.)

6.

既然有32位和64位微控制器,为什么还在使用8位微控制器呢?

View answer

一般的原因是为工作选择合适的工具. 三个最常见的原因是向后兼容性、价格和电力消耗. 在与现有基础设施进行接口时,向后兼容性非常重要, especially in industrial environments, where in many cases, 电气和操作限制影响微控制器的选择.

一般来说,较小的微控制器(具有较窄的主寄存器)也更便宜. 但是它们可以包含非常多的外设和接口选项, 因此它们可以用于许多需要高级功能但不需要高CPU速度的情况.

较小的微控制器通常也需要更少的功率来运行, 对于物联网和电池供电设备来说,哪一点尤为重要.

7.

固件和数据嵌入在微控制器通常安全下载, tampering, or hacking?

View answer

No. 除非微控制器是专门构造的,以提供对抗固件下载和/或修改的对策, 任何上传到微控制器的代码和数据都应该被认为是相对容易下载和修改的. (这种强化的微控制器通常很昂贵.)

8.

Describe the role of a watchdog timer.

View answer

看门狗定时器是许多微控制器的一个特性——通常用特定的专用硬件实现——可以用来检查微控制器上运行的软件是否挂起.

微控制器的设计是坚固和有弹性的. 但是仍然有很多问题会影响硬件的稳定性. 在软件端也可能存在未处理的事件组合. 这两种情况都会导致微控制器“挂起”,要么是电的,要么是软件的无限循环.

看门狗定时器是一个子系统,需要软件显式地通知它一切都按预期运行, within a specific amount of time. 如果看门狗没有收到它期望的通知, it will perform some action, such as resetting the microcontroller, or even the whole device. This is usually done periodically, 看门狗定时器将执行它的动作,如果它没有收到通知后,可配置的时间量,从上次通知.

9.

基于uart的最重要的特点是什么 RS-232-like and TTL-like)串行通信,I2C通信和SPI通信?

View answer

简单的基于UART的串行通信(有或没有UART硬件)是实现要求最低的通信协议, but comes with severe limitations:

  • 它只能连接两个设备.
  • 它是异步的,这意味着设备之间没有明确的时钟速率协议.
  • 它最常用于慢比特率(高达115,200 bps)。.

I2C可以在同一电气总线上连接多达127个设备, 每个设备都是可单独寻址的. One of the devices, a master device, 产生一个时钟信号由所有其他共享, called slave devices. 只有一条数据线,所以所有的通信都是单向的. (它通常用于与PCB上的传感器通信, 哪些通常使用简单的请求-响应协议.)

The SPI bus is designed for fast, 与复杂设备的双向通信, 这可能涉及诸如批量传输大量数据的情况. With SPI, 所有设备共享数据和时钟线, 但也有单独的寻址线,使通信与特定设备.

10.

讨论嵌入式设备之间无线通信的几个选项.

View answer

On the high end of cost and complexity, 无线通信可以使用wifi标准之一来实现. 这些提供了很大的带宽,可以与许多其他设备互操作,并且可以是远程的. 但wifi标准也相当复杂,需要专用硬件.

蓝牙是在不同类型的硬件之间进行短距离接口的合理选择, i.e., those of up to 15 yards (~14 meters). 它还需要专门的硬件,但这些硬件通常便宜且易于使用. 使用蓝牙进行通信的设备通常会模拟它们之间的串行线.

也有定制的基于无线电的通信设备和协议,它们与WiFi和蓝牙在相同的频率上工作(大约2.4ghz),但使用的是与标准协议不兼容的更简单的协议. 它们通常比蓝牙便宜,而且更容易实现.

也有收发器工作在低频率,如433兆赫. 虽然它们在10码(约9米)的短距离内提供非常低的比特率,但它们非常便宜且易于实现. 如果需要更大的距离,小比特率是可以接受的, which is often the case in IoT devices, solutions like LoRa, SigFox, and NB-IoT can be used.

Finally, 红外通信在很短的距离(几码)也可以是一个有效的选择.

面试不仅仅是棘手的技术问题, so these are intended merely as a guide. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.

Why Toptal

Tired of interviewing candidates? 不知道该问什么才能让你得到一份好工作?

让Toptal为你找到最合适的人.

现在就聘请一名顶级嵌入式软件工程师

我们的嵌入式软件工程师专属网络

想找一份嵌入式软件工程师的工作?

Let Toptal find the right job for you.

Apply as an Embedded Software Engineer

Job Opportunities From Our Network

Submit an interview question

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, at the sole discretion of Toptal, LLC.

* All fields are required

招聘嵌入式软件工程师?

Looking for Embedded Software Engineers? 看看Toptal的嵌入式软件工程师.

David Marín

Freelance Embedded Software Engineer
SpainToptal Member Since July 2, 2015

David是一名开源和开放数据爱好者,拥有超过23年的专业开发经验. He has acquired various skills, 包括网页编程(PHP和JavaScript), C, C++ (under Linux and Windows), and systems management. Of these skills, David擅长web编程,并拥有基于Symfony php的后端全栈经验, jQuery front ends, and WordPress/WooCommerce-based sites.

Show More

Federico Albanese

Freelance Embedded Software Engineer
ArgentinaToptal Member Since January 9, 2019

Federico是一名开发人员和数据科学家,曾在Facebook工作, 他在哪里做了机器学习模型预测. 他是Python专家和大学讲师. His Ph.D. research pertains to machine learning. 他可以在这个过程中不断学习和实现最先进的算法,每天都成为一名更好的数据科学家.

Show More

Szabolcs Dombi

Freelance Embedded Software Engineer
RomaniaToptal Member Since July 1, 2019

Szabolcs is an experienced Python, C, and C++ developer, 谁使用Python C API来构建Python扩展, 以及将Python嵌入到其他应用程序. 他的业余项目是为Python构建的高性能渲染库. Szabolcs凭借其优雅而成功的编程技巧赢得了几次比赛, and finds simplicity, maintainability, 在做设计决策时,性能很重要.

Show More

Toptal Connects the Top 3% of Freelance Talent All Over The World.

Join the Toptal community.

Learn more