我是一名嵌入式软件工程师,拥有不到 3 年的经验。我的目标是不断“磨刀不误”。我想知道 C/C++ 编码人员是否应该精通低级编程的特定内容。

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

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

有帮助吗?

解决方案

具体概念如,

  1. 字节顺序 (此链接是一篇旧的但很好的 linuxjournal 文章)
  2. 有效利用多线程架构 (嵌入式网站总体不错)
  3. 调试嵌入式多线程 系统
  4. 理解、学习并遵循良好的编程技术 (该链接非常旧,而且观点非常笼统和主观,但请考虑一下)
  5. 其他事情 (这个关于嵌入式 Linux 的 IBM 页面总结了我想说的大部分其他观点)
  6. 还有一件事 - 永远不要低估测试!或者,计划测试用例!

使用我作为概念给出的参考链接,
请进一步跟进以获得更深入的了解。

其他提示

我在这里看到很多高级操作系统的答案,但你特意说的是低级的。

一些零散的想法:

  • 测试设计。当你解决一个问题时,每次测试一次只改变一件事。
  • 你需要了解总线和接口、spi、i2c、usb、以太网等。今天、昨天和明天的第一接口是UART、串行。
  • 闪存编程涉及的步骤。
  • 避免产品容易变砖的技巧。
  • 一般引导加载程序。
  • 上面的位于各个零件家族的界面(不同的芯片供应商对IO引脚,引体向上,指示控制等有不同的想法)。
  • 董事会和芯片提出,您当然永远都不想在第一个电源上启动数万行代码程序(想想启用,led off)。
  • 如何在不使用过多的测试设备(逻辑分析仪和范围)的情况下调试产品,同时您必须学习使用示波器进行调试,如果您不必拥有技术或工程师,您将更有价值和您一起在实验室里。
  • 您将如何在现场重新编程该装置?当允许用户升级设备时,您将如何最大程度地减少人为错误?还要记住现场降级。
  • 你会采取什么措施来阻止黑客攻击(二进制文件等)。
  • 高效使用闪存/ROM(不要磨损一组或部分,将磨损分散到各处,或者查看闪存是否为您做这件事)。
  • 如何以及何时使用看门狗定时器。
  • 状态机,非常有用,对字节式(串行和以太网)非常有用,设计的数据包结构很好地流到了状态机器,并且具有标头和校验和校验和其他结构,以确保您不将部分数据包或随机数据解释为好包。

我研究实际芯片的电子器件。了解他们内部是如何工作的(例如建筑),与外围设备,电气和定时特性等接口。

基本上,读出的数据片开始到结束几次,挖成任何你还没有看到/前使用。

顺便说一句,你有什么工作筹码?

如果您还没有我想每个软件工程师应该阅读的实用主义程序员和代码完成。我知道这些都不是专用于低层次的编程,但有一个大的财富在他们的知识适用于所有子学科。

经与指针伟大的熟悉,在检查这些语言没有做很多(如缓冲区溢出和类似的东西),数码电子产品。运营系统内部也可能有帮助。

去懂得的东西是内部表示,特别是现成的数据结构(假设你不会建立自己的一个)。

首先,多多练习。这样做带来更多的给你不只是阅读它;)

让自己的 MISRA-C 书的副本。它最初被写了汽车行业的成员,并试图使C语言编写的软件更强大的应用的规则和准则的一些(相当多的!)。

然后,买 PC - 皮棉(或其他静态分析工具)来检查你的代码和MISRA其他规则。

这是低级别和嵌入式C尤为重要,因为他们之间,他们处理了很多这样的软件缺陷,如与指针,内存泄漏,整推广问题的原因(有一整章上的是,在MISRA书),字节序,和未定义的行为。

好问题。一些没有提到...

了解您的实现低级别的多任务处理的各种选项。从基本循环(非抢占)调度器,与定时从硬件计时器滴答,由抢占RTOS。了解为什么你可能需要一个RTOS,为什么你可能不会。如果使用RTOS,得知与PC的背景初学者可能往往希望创造太多的任务。

获取的可视性的内部进行调试可能是一个挑战。有没有屏幕一般,所以在“printf”上没有投掷电话,无论你想。仿真器或JTAG接口是理想的 - 你可以设置断点,并通过你的程序步骤(只要停止微不做硬件发疯一样全速左右摆动的机械臂!)。如果仿真器/ JTAG不可用,学习如何使用一个备用串行端口(或者甚至比特的bash的销,使串行端口),用于调试信道,一些简单的存储器PEEK /戳命令。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top