Embedded 低级程序员应该具备什么技能?

Embedded 低级程序员应该具备什么技能?,embedded,low-level,Embedded,Low Level,我是一名嵌入式软件工程师,拥有不到3年的经验。我的目标是不断地“磨锯子”。我想知道C/C++程序员是否应该精通底层编程 我想到的是熟悉硬件的架构和指令集。知道如何摆弄bits也很重要,资源管理和性能一直是我工作的一部分,还有什么别的吗 编辑:我使用的是内部定制的RTOS,而不是嵌入式Linux 我会研究实际芯片的电子学。了解它们如何在内部工作(如架构)、与外围设备的接口、电气和时序特性等 基本上,从头到尾阅读几遍数据表,并深入研究您以前没有见过/使用过的任何内容 顺便问一下,您使用的是什么芯片?

我是一名嵌入式软件工程师,拥有不到3年的经验。我的目标是不断地“磨锯子”。我想知道C/C++程序员是否应该精通底层编程

我想到的是熟悉硬件的架构和指令集。知道如何摆弄bits也很重要,资源管理和性能一直是我工作的一部分,还有什么别的吗


编辑:我使用的是内部定制的RTOS,而不是嵌入式Linux

我会研究实际芯片的电子学。了解它们如何在内部工作(如架构)、与外围设备的接口、电气和时序特性等

基本上,从头到尾阅读几遍数据表,并深入研究您以前没有见过/使用过的任何内容


顺便问一下,您使用的是什么芯片?

非常熟悉指针,这些语言的检查功能(如缓冲区溢出等)在数字电子方面做得不多。操作系统内部也可能有所帮助

了解如何在内部表示内容,特别是现成的数据结构(假设您不构建自己的数据结构)


最重要的是,要多多练习。做它给你带来的不仅仅是阅读;)

如果您还没有,我认为每个软件工程师都应该阅读实用的程序员和完整的代码。我知道这些并不特定于低级编程,但它们拥有大量适用于所有子学科的知识。

特定概念,如

  • (此链接指向一篇旧而好的linuxjournal文章)
  • (嵌入式场地一般情况较好)
  • 和系统
  • (链接非常古老,这一点非常笼统和主观,但请仔细想想)
  • (关于嵌入式linux的这一IBM页面总结了我想提出的大多数其他观点)
  • 还有一件事--!或者,规划测试用例 使用我提供的参考链接作为概念,
    请进一步跟进以获得更深入的知识。

    与之类似,学习如何创建单元测试和自动构建

    这些技能对于所有级别的软件工程师都是很好的。它们将有助于提高代码的质量,同时使重构和改进代码库变得更容易

    • 位操作
    • 处理器架构(缓存等)
    • wcet分析
    • 日程安排
    编辑:我忘记提到的是基于模型的开发。 今天,控制算法通常被实现为某种自动机,然后从中生成C代码。
    例如,商业可用的工具有:或。

    给自己买一本书。它最初是由汽车行业的成员编写的,并试图通过应用大量(相当多!)的规则和准则,使用C编写的软件更加健壮

    然后,购买(或其他静态分析工具)检查代码中的MISRA和其他规则


    这些与低级和嵌入式C特别相关,因为它们处理了这类软件中许多错误的原因,比如指针、内存泄漏、整数提升(在MISRA的书中有整整一章)、endianness、,还有未定义的行为。

    我在这里看到了很多高级操作系统的答案,但你明确地说是低级的

    一些零散的想法:

    • 为测试而设计。当你解决一个问题时,每次测试只改变一件事
    • 您需要了解总线和接口、spi、i2c、usb、以太网等。第一接口,今天、昨天和明天,uart、串行
    • 编程flash所涉及的步骤
    • 避免使产品易于砌砖的技巧
    • 引导加载程序
    • 上述接口在不同系列零件(不同芯片)上的位碰撞 供应商对io引脚、上拉和方向有不同的想法 控制等)
    • 电路板和芯片带来的,你肯定永远不会想要的 在第一次启动时启动数万行代码程序 通电(认为led亮起,led熄灭)
    • 如何在不使用太多测试设备(逻辑分析器和作用域)的情况下调试产品,同时您必须学会使用作用域进行调试,这是远远不够的 如果你不需要在实验室里有技术人员或工程师,那就更有价值了 和你在一起
    • 你将如何在现场重新编程?你会怎么做 在允许用户输入字段时,您需要尽可能减少人为错误 升级装置?还要记住字段降级
    • 你会如何阻止黑客攻击(二进制文件等)
    • 高效使用闪存/rom(不要磨损一个存储组或部分,将磨损分散,或者查看闪存是否为您所用)
    • 如何以及何时使用看门狗定时器
    • 状态机对于ByTestStreams(串行和以太网)非常有用,它设计的数据包结构能够很好地流式传输,并且适合于状态机,并且具有报头和校验和或其他结构,确保您不会解释部分数据包或数据包 随机数据作为一个好的数据包

      • 问得好。有些还没有被提及

        了解实现低级多任务处理的各种选项。从基本的循环调度程序(非抢占式)到抢占式实时操作系统(RTO),从硬件定时器发出计时信号。了解为什么您可能需要RTOS,为什么您可能不需要。如果您使用RTOS,请了解具有PC背景的初学者可能希望创建太多的任务

        了解内部调试可能是一项挑战。通常没有屏幕,所以不需要在任何地方插入“printf”调用。模拟器或JTAG接口是理想的——您可以设置断点并单步执行程序