Embedded 低级程序员应该具备什么技能?
我是一名嵌入式软件工程师,拥有不到3年的经验。我的目标是不断地“磨锯子”。我想知道C/C++程序员是否应该精通底层编程 我想到的是熟悉硬件的架构和指令集。知道如何摆弄bits也很重要,资源管理和性能一直是我工作的一部分,还有什么别的吗Embedded 低级程序员应该具备什么技能?,embedded,low-level,Embedded,Low Level,我是一名嵌入式软件工程师,拥有不到3年的经验。我的目标是不断地“磨锯子”。我想知道C/C++程序员是否应该精通底层编程 我想到的是熟悉硬件的架构和指令集。知道如何摆弄bits也很重要,资源管理和性能一直是我工作的一部分,还有什么别的吗 编辑:我使用的是内部定制的RTOS,而不是嵌入式Linux 我会研究实际芯片的电子学。了解它们如何在内部工作(如架构)、与外围设备的接口、电气和时序特性等 基本上,从头到尾阅读几遍数据表,并深入研究您以前没有见过/使用过的任何内容 顺便问一下,您使用的是什么芯片?
编辑:我使用的是内部定制的RTOS,而不是嵌入式Linux 我会研究实际芯片的电子学。了解它们如何在内部工作(如架构)、与外围设备的接口、电气和时序特性等 基本上,从头到尾阅读几遍数据表,并深入研究您以前没有见过/使用过的任何内容
顺便问一下,您使用的是什么芯片?非常熟悉指针,这些语言的检查功能(如缓冲区溢出等)在数字电子方面做得不多。操作系统内部也可能有所帮助 了解如何在内部表示内容,特别是现成的数据结构(假设您不构建自己的数据结构)
最重要的是,要多多练习。做它给你带来的不仅仅是阅读;) 如果您还没有,我认为每个软件工程师都应该阅读实用的程序员和完整的代码。我知道这些并不特定于低级编程,但它们拥有大量适用于所有子学科的知识。特定概念,如
请进一步跟进以获得更深入的知识。与之类似,学习如何创建单元测试和自动构建 这些技能对于所有级别的软件工程师都是很好的。它们将有助于提高代码的质量,同时使重构和改进代码库变得更容易
- 位操作
- 处理器架构(缓存等)
- wcet分析
- 日程安排
例如,商业可用的工具有:或。给自己买一本书。它最初是由汽车行业的成员编写的,并试图通过应用大量(相当多!)的规则和准则,使用C编写的软件更加健壮 然后,购买(或其他静态分析工具)检查代码中的MISRA和其他规则
这些与低级和嵌入式C特别相关,因为它们处理了这类软件中许多错误的原因,比如指针、内存泄漏、整数提升(在MISRA的书中有整整一章)、endianness、,还有未定义的行为。我在这里看到了很多高级操作系统的答案,但你明确地说是低级的 一些零散的想法:
- 为测试而设计。当你解决一个问题时,每次测试只改变一件事李>
- 您需要了解总线和接口、spi、i2c、usb、以太网等。第一接口,今天、昨天和明天,uart、串行李>
- 编程flash所涉及的步骤李>
- 避免使产品易于砌砖的技巧
- 引导加载程序
- 上述接口在不同系列零件(不同芯片)上的位碰撞 供应商对io引脚、上拉和方向有不同的想法 控制等)李>
- 电路板和芯片带来的,你肯定永远不会想要的 在第一次启动时启动数万行代码程序 通电(认为led亮起,led熄灭)
- 如何在不使用太多测试设备(逻辑分析器和作用域)的情况下调试产品,同时您必须学会使用作用域进行调试,这是远远不够的 如果你不需要在实验室里有技术人员或工程师,那就更有价值了 和你在一起李>
- 你将如何在现场重新编程?你会怎么做 在允许用户输入字段时,您需要尽可能减少人为错误 升级装置?还要记住字段降级
- 你会如何阻止黑客攻击(二进制文件等)
- 高效使用闪存/rom(不要磨损一个存储组或部分,将磨损分散,或者查看闪存是否为您所用)李>
- 如何以及何时使用看门狗定时器
- 状态机对于ByTestStreams(串行和以太网)非常有用,它设计的数据包结构能够很好地流式传输,并且适合于状态机,并且具有报头和校验和或其他结构,确保您不会解释部分数据包或数据包 随机数据作为一个好的数据包
- 问得好。有些还没有被提及
了解实现低级多任务处理的各种选项。从基本的循环调度程序(非抢占式)到抢占式实时操作系统(RTO),从硬件定时器发出计时信号。了解为什么您可能需要RTOS,为什么您可能不需要。如果您使用RTOS,请了解具有PC背景的初学者可能希望创建太多的任务
了解内部调试可能是一项挑战。通常没有屏幕,所以不需要在任何地方插入“printf”调用。模拟器或JTAG接口是理想的——您可以设置断点并单步执行程序