我是一名嵌入式软件工程师,拥有不到3年的经验。我的目标是不断“磨锯”。我想知道C / C ++程序员应该熟练掌握低级编程的具体内容。
我想到的是熟悉硬件的架构和指令集。知道如何摆弄位也很重要,资源管理和性能已成为我工作的一部分,还有其他什么吗?
编辑:我使用内部定制的RTOS,而不是嵌入式Linux。答案 0 :(得分:13)
我在这里看到很多高级操作系统的答案,但你明确地说低级别。
一些分散的想法:
答案 1 :(得分:11)
具体概念,如
使用我给出的参考链接作为概念,
请进一步了解更深层次的知识。
答案 2 :(得分:9)
我正在研究实际芯片的电子产品。了解它们如何在内部工作(例如架构),与外设的接口,电气和时序特性等。
基本上,阅读数据表开始几次完成并深入研究之前没有看到/使用的任何内容。
顺便问一下,你和哪些筹码合作?
答案 3 :(得分:7)
与Brian said类似,了解如何创建单元测试和自动构建。
这些技能对于所有级别的软件工程师来说都很有用。它们有助于提高代码质量,同时还可以更轻松地重构和改进代码库。
答案 4 :(得分:4)
如果您还没有,我认为每个软件工程师都应该阅读The Pragmatic Programmer和Code Complete。我知道这些并不是低级编程所特有的,但是它们具有丰富的知识,适用于所有子学科。
答案 5 :(得分:3)
非常熟悉指针,检查这些语言并没有做太多(比如缓冲区溢出和类似的东西),数字电子产品。操作系统内部也可能有所帮助。
了解内部如何表示内容,特别是现成的数据结构(假设您不会构建自己的数据结构)。
最重要的是,练习很多。这样做会给你带来的不仅仅是阅读它;)
答案 6 :(得分:2)
编辑:我忘了提到的是基于模型的开发。 今天,控制算法通常被实现为某种自动机,之后生成C代码。 商业可用工具例如是MATLAB/Simulink,ASCET或SCADE。
答案 7 :(得分:1)
获取MISRA-C本书的副本。它最初是由汽车行业的成员编写的,并试图通过应用一些(相当多的!)规则和指南来使用C编写的软件更加强大。
然后,购买PC-Lint(或其他静态分析工具)来检查您的代码以查找MISRA和其他规则。
这些与低级和嵌入式C特别相关,因为它们之间会处理这类软件中很多错误的原因,例如与指针,内存泄漏,整数提升有关的问题(有一整章关于在MISRA书中),字节序和未定义的行为。
答案 8 :(得分:1)
好问题。有些没有被提及......
了解实现低级多任务处理的各种选项。从基本的循环(非抢占式)调度程序,具有来自硬件计时器的计时滴答,直到抢占式RTOS。了解您可能需要RTOS的原因,以及您可能不需要的原因。如果您使用RTOS,请了解具有PC背景的初学者可能倾向于创建太多任务。
了解内部调试可能是一项挑战。通常没有屏幕,所以不要在任何地方投入“printf”调用。仿真器或JTAG接口是理想的 - 您可以设置断点并逐步执行程序(只要停止微观操作就不会让硬件变得疯狂,就像全速摆动机器人手臂一样!)。如果没有仿真器/ JTAG,请学习如何使用备用串行端口(或者甚至可能使用引脚进行串行接口来制作串行端口)以及一些简单的内存查看/戳命令。