嵌入式软件中的外设驱动
通过 I2C、SPI 或 UART 与传感器、显示屏、电机控制器或无线模块通信的代码,处理数据手册中描述的时序和错误情况。
当一款产品内置了微控制器,需要为这块具体芯片编写代码,而不是为服务器或浏览器编写代码时,企业就会迪拜招聘嵌入式软件工程师。这涵盖读取指纹传感器的智能门锁、通过蜂窝网络模块上报位置的车队追踪器,或者每秒读取传感器上千次的实验室设备。这类工作处于应用或网站之下,更贴近电子层面,衡量标准也不同:内存以千字节而非千兆字节计算,时序以微秒计算,电池要撑上几个月,而不是一个永不断电的插座。
一位迪拜的嵌入式软件工程师,大部分时间会花在三件事上:通过驱动与硬件对话、调度工作让重要的事情不被延误,以及把功耗控制在足够低的水平,让产品达到电池续航目标。这三者中任何一个出错,都会表现为设备卡死、电池一夜耗尽,或者在最要命的时刻错过一次传感器读数,因此本页后面的评估问题,正是围绕这几个方面展开的。
这个岗位搭建什么
这是企业为某个具体设备迪拜招聘嵌入式软件工程师时会提到的工作类型。
通过 I2C、SPI 或 UART 与传感器、显示屏、电机控制器或无线模块通信的代码,处理数据手册中描述的时序和错误情况。
在 FreeRTOS 或 Zephyr 中组织任务、队列和中断处理程序,确保读取传感器这类时间敏感的工作,不会被写入闪存这类较慢的工作阻塞。
睡眠模式、唤醒源和时钟速度切换,让电池供电设备大部分时间维持在微安级功耗,只有在真正有任务时才完全唤醒。
在主应用启动之前运行的小段代码,决定是按原样运行它,还是加载一个更新版本。
能够查看设备出问题时正在做什么的方式,因为现场故障通常无法在实验台上复现。
建立在驱动和 RTOS 之上的实际产品行为,例如决定何时发送数据或触发报警。
值得关注的技能
真正出现在生产固件中的工具。
| 技能或工具 | 合格的表现 | 为何重要 |
|---|---|---|
| C,通常也包括 C++ | 熟悉指针、内存布局和中断安全代码,而不只是应用层的 C++ | 大多数微控制器厂商的工具链和库都是用 C 编写的 |
| FreeRTOS 或 Zephyr 这类 RTOS | 从零设计过任务和队列结构,而不只是修改过现成项目 | 结构不良的 RTOS 设计会造成日后难以诊断的漏时问题 |
| 数据手册和寄存器级阅读 | 能够从芯片参考手册直接写出可用的驱动代码,而不依赖厂商示例作拐杖 | 每个微控制器系列的外设都不同,但这项技能可以迁移,即便芯片不同 |
| 使用 JTAG 或 SWD 调试 | 在真实硬件上设置断点、检查寄存器、单步执行中断处理程序 | 嵌入式漏洞往往只在实体设备上出现,模拟器里看不到 |
| 静态分析和编码规范 | 在任何安全相关的代码上使用 lint 工具或 MISRA C 这类规范,并能解释规则存在的原因 | 一旦数千台设备已经出货,固件漏洞的修复成本会很高 |
由亚马逊云科技维护的 FreeRTOS,以及 Linux 基金会旗下的Zephyr 项目,都发布了各自关于任务调度和驱动结构的文档,值得拿来与候选人在面试中的描述做对照。
合作方式
大多数嵌入式软件工作适合专属合作或限定范围项目。专属工程师适合仍在积极开发中的产品,首个版本发布后新功能和缺陷修复仍在持续。限定范围项目适合一项界定清晰的工作,例如把现有固件移植到新芯片,或为新传感器新增驱动,有一个明确的节点,代码连同文档一并交接。招聘支持适合正在组建内部硬件团队、希望帮助寻找并评估具备合适微控制器和 RTOS 背景人选的企业。顾问咨询适合已经有人写好固件、有时是已经离职的承包商所写、希望在此基础上继续搭建之前,先获得一个经验丰富的第二意见来审查其结构的团队。
候选人评估
能够区分真正芯片级经验和一般软件背景的问题。
无论您通过哪条路径完成招聘,这些核查方式同样适用,无论您自己主持面试,还是委托我们作为招聘支持的一部分来完成。
而不是照搬厂商示例。询问他们设置了哪些寄存器、为什么,以及外设表现与文档不符时发生了什么。
电池供电或对时序敏感的设备,并不总能使用串口日志,因此询问在没有的情况下他们会怎么做。
请对方描绘一下,他们会如何把一个虚构设备的工作拆分成多个任务,以及为什么某个具体任务会获得更高优先级。
交付过电池供电产品的候选人,会有一个真实的数字,以及一段关于电力究竟消耗在哪里的真实故事。
询问在中断处理程序内部可以安全做什么、不可以做什么,这个问题能很快区分出候选人的强弱。
认证
目前不存在单一、被广泛认可的嵌入式软件工作执照,因此请看重实际证据。
无论是 FreeRTOS 的维护方还是 Zephyr 项目,都没有我们能够核实的认证考试,我们也不声称自己团队持有任何此类资质。芯片厂商有时会开展自己的培训,但这类培训范围较窄,价值也不如实际出货经验。这也是在迪拜招聘嵌入式软件工程师时,更应看重证据而非证书的原因之一。
一份您能读懂的实际驱动代码、一个关于中断安全的清晰回答,以及一段关于功耗预算或现场故障的真实故事,在迪拜招聘嵌入式软件工程师时,远比一张课程结业证书更有说服力。
阿联酋相关事项
一旦设备离开实验台,就与此相关。
任何选择在迪拜招聘嵌入式软件工程师、打造联网产品的企业,都应尽早而不是拖到后期提出无线合规问题。如果嵌入式软件工程师编写的固件运行在内置任何无线模块(例如蓝牙、Wi-Fi 或蜂窝调制解调器)的设备上,成品在阿联酋销售或使用前,需要向电信和数字政府监管局完成注册,TDRA 在其官方设备核准服务页面列明了这一流程。这是一个认证和测试环节,而不是固件功能本身,但它会影响开发早期哪些模块和天线选择是安全的,因此请在设计定型之前就提出这个问题。
本页属于我们物联网、嵌入式与机器人分类,是更大的迪拜聘请开发工程师板块的一部分。如果工作主要是搭建自定义 Linux 镜像,而不是裸机或 RTOS 固件,我们的嵌入式系统开发工程师页面涵盖这方面。全新硬件早期的启动引导工作,请参阅我们的固件开发工程师页面,持续的更新、安全和认证工作,请参阅我们的固件工程师页面。如果您的设备需要在数据产生的地方就近处理数据,而不是把一切都发到云端,请参阅我们的边缘计算工程师页面;如果产品带有联网传感器并接入仪表盘,我们的物联网开发工程师页面可能更合适。
直接解答
这两个头衔在实际使用中有所重叠,不同公司的叫法也不一样。在本网站上,我们把固件工作视为一款新设备最早、最贴近芯片层面的阶段,而把嵌入式软件工程称为在此之上持续构建应用逻辑、驱动和 RTOS 任务的工作。告诉我们您要打造的是什么,我们会匹配合适的技能组合。
需要读懂数据手册和原理图,足以和硬件工程师讨论引脚功能、电压水平和时序,但通常不需要亲自设计电路板布局。在小团队里,有时同一个人两样都做,这一点值得直接询问。
只有一两项任务的简单设备,往往裸机运行就很好,完全不需要操作系统。当您有多个任务争抢处理器、需要可预测的时序,或希望联网和文件系统作为现成组件使用时,FreeRTOS 或 Zephyr 这类 RTOS 的开销才值得投入。
可以。迪拜的很多嵌入式工作,是维护或扩展一个已经上线的产品,通常从工程师先阅读现有代码和工具链开始,再动手写任何新内容。
在资源受限的微控制器上,C 仍然是默认选择,在能力更强的芯片上 C++ 也很常见。一些厂商现在支持用 Rust 编写新固件,不过目前生产环境中大多数现有嵌入式代码库仍然是 C。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。