低级程序员应具备哪些技能?

时间:2009-07-07 12:04:35

标签: embedded low-level

我是一名嵌入式软件工程师,拥有不到3年的经验。我的目标是不断“磨锯”。我想知道C / C ++程序员应该熟练掌握低级编程的具体内容。

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

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

9 个答案:

答案 0 :(得分:13)

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

一些分散的想法:

  • 设计测试。当您解决问题时,每次测试一次只能改变一件事。
  • 你需要了解总线和接口,spi,i2c,usb,以太网等。第一个接口,今天,昨天和明天,uart,serial。
  • 编程闪存所涉及的步骤。
  • 努力避免使产品易于砌砖。
  • 一般的Bootloaders。
  • 在各种系列零件(不同芯片上)上面的所述接口进行比特攻击 供应商对io引脚,上拉,方向有不同的看法 控制等)。
  • 董事会和芯片培养,你当然不想 首先启动成千上万行代码程序 加电(想想,领导)。
  • 如何在不使用太多测试设备(逻辑分析仪和示波器)的情况下调试产品,同时您必须学习使用示波器进行调试, 如果你没有在实验室里拥有技术或工程师,那就更有价值 和你。
  • 你如何重新编程现场的单位?什么会 您允许用户进行现场操作以最大限度地减少人为错误 升级单位?还记得现场降级。
  • 你会做什么来阻止黑客攻击(二进制文件等)。
  • 有效使用闪光灯/光圈(不要磨损一个银行或部分,分散磨损,或看闪光灯是否正在为你做)。
  • 如何以及何时使用看门狗定时器。
  • 状态机,对字节流(串行和以太网)非常有用,设计流式传输良好且适合状态机的数据包结构,并且具有标头和校验和或其他结构,可确保您不解释部分数据包或 随机数据作为一个好的数据包。

答案 1 :(得分:11)

具体概念,如

  1. Endianness(此链接指向旧的但很好的linuxjournal文章)
  2. Effective use of multithreading architectures(嵌入式网站一般情况良好)
  3. Debugging embeddedmultithreaded个系统
  4. Understand, Learn and Follow good programming techniques(链接非常陈旧,非常通用且主观,但请想一想)
  5. Other things(嵌入式Linux上的这个IBM页面总结了我想要制作的大部分其他内容)
  6. 还有一件事 - never underestimate testing!或者,计划测试用例!!
  7. 使用我给出的参考链接作为概念,
    请进一步了解更深层次的知识。

答案 2 :(得分:9)

我正在研究实际芯片的电子产品。了解它们如何在内部工作(例如架构),与外设的接口,电气和时序特性等。

基本上,阅读数据表开始几次完成并深入研究之前没有看到/使用的任何内容。

顺便问一下,你和哪些筹码合作?

答案 3 :(得分:7)

Brian said类似,了解如何创建单元测试自动构建

这些技能对于所有级别的软件工程师来说都很有用。它们有助于提高代码质量,同时还可以更轻松地重构和改进代码库。

答案 4 :(得分:4)

如果您还没有,我认为每个软件工程师都应该阅读The Pragmatic Programmer和Code Complete。我知道这些并不是低级编程所特有的,但是它们具有丰富的知识,适用于所有子学科。

答案 5 :(得分:3)

非常熟悉指针,检查这些语言并没有做太多(比如缓冲区溢出和类似的东西),数字电子产品。操作系统内部也可能有所帮助。

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

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

答案 6 :(得分:2)

  • 位操作
  • 处理器架构(缓存等)
  • wcet analysis
  • 日程安排

编辑:我忘了提到的是基于模型的开发。 今天,控制算法通常被实现为某种自动机,之后生成C代码。 商业可用工具例如是MATLAB/SimulinkASCETSCADE

答案 7 :(得分:1)

获取MISRA-C本书的副本。它最初是由汽车行业的成员编写的,并试图通过应用一些(相当多的!)规则和指南来使用C编写的软件更加强大。

然后,购买PC-Lint(或其他静态分析工具)来检查您的代码以查找MISRA和其他规则。

这些与低级和嵌入式C特别相关,因为它们之间会处理这类软件中很多错误的原因,例如与指针,内存泄漏,整数提升有关的问题(有一整章关于在MISRA书中),字节序和未定义的行为。

答案 8 :(得分:1)

好问题。有些没有被提及......

了解实现低级多任务处理的各种选项。从基本的循环(非抢占式)调度程序,具有来自硬件计时器的计时滴答,直到抢占式RTOS。了解您可能需要RTOS的原因,以及您可能不需要的原因。如果您使用RTOS,请了解具有PC背景的初学者可能倾向于创建太多任务。

了解内部调试可能是一项挑战。通常没有屏幕,所以不要在任何地方投入“printf”调用。仿真器或JTAG接口是理想的 - 您可以设置断点并逐步执行程序(只要停止微观操作就不会让硬件变得疯狂,就像全速摆动机器人手臂一样!)。如果没有仿真器/ JTAG,请学习如何使用备用串行端口(或者甚至可能使用引脚进行串行接口来制作串行端口)以及一些简单的内存查看/戳命令。