题
我是一名嵌入式软件工程师,拥有不到 3 年的经验。我的目标是不断“磨刀不误”。我想知道 C/C++ 编码人员是否应该精通低级编程的特定内容。
我想到的是熟悉硬件的架构和指令集。知道如何摆弄位也很重要,资源管理和性能一直是我工作的一部分,还有其他吗?
编辑:我使用的是内部定制的 RTOS,而不是嵌入式 Linux。
其他提示
我在这里看到很多高级操作系统的答案,但你特意说的是低级的。
一些零散的想法:
- 测试设计。当你解决一个问题时,每次测试一次只改变一件事。
- 你需要了解总线和接口、spi、i2c、usb、以太网等。今天、昨天和明天的第一接口是UART、串行。
- 闪存编程涉及的步骤。
- 避免产品容易变砖的技巧。
- 一般引导加载程序。
- 上面的位于各个零件家族的界面(不同的芯片供应商对IO引脚,引体向上,指示控制等有不同的想法)。
- 董事会和芯片提出,您当然永远都不想在第一个电源上启动数万行代码程序(想想启用,led off)。
- 如何在不使用过多的测试设备(逻辑分析仪和范围)的情况下调试产品,同时您必须学习使用示波器进行调试,如果您不必拥有技术或工程师,您将更有价值和您一起在实验室里。
- 您将如何在现场重新编程该装置?当允许用户升级设备时,您将如何最大程度地减少人为错误?还要记住现场降级。
- 你会采取什么措施来阻止黑客攻击(二进制文件等)。
- 高效使用闪存/ROM(不要磨损一组或部分,将磨损分散到各处,或者查看闪存是否为您做这件事)。
- 如何以及何时使用看门狗定时器。
- 状态机,非常有用,对字节式(串行和以太网)非常有用,设计的数据包结构很好地流到了状态机器,并且具有标头和校验和校验和其他结构,以确保您不将部分数据包或随机数据解释为好包。
我研究实际芯片的电子器件。了解他们内部是如何工作的(例如建筑),与外围设备,电气和定时特性等接口。
基本上,读出的数据片开始到结束几次,挖成任何你还没有看到/前使用。
顺便说一句,你有什么工作筹码?
什么布赖恩说相似一>,学习如何创建的单元测试和<强>自动构建即可。
这些技能是有利于软件工程师的各级精通,他们会帮助你提高代码的质量,同时也更易于重构和完善的代码库。
如果您还没有我想每个软件工程师应该阅读的实用主义程序员和代码完成。我知道这些都不是专用于低层次的编程,但有一个大的财富在他们的知识适用于所有子学科。
经与指针伟大的熟悉,在检查这些语言没有做很多(如缓冲区溢出和类似的东西),数码电子产品。运营系统内部也可能有帮助。
去懂得的东西是内部表示,特别是现成的数据结构(假设你不会建立自己的一个)。
首先,多多练习。这样做带来更多的给你不只是阅读它;)
- 位运算
- 处理器架构(缓存等)
- wcet分析
- 调度
编辑:我忘记提到的是基于模型的开发。如今,控制算法通常以某种自动机的形式实现,随后生成 C 代码。商业可用的工具例如 MATLAB/Simulink, 澳大利亚科学技术中心 或者 计算机辅助设计系统.
好问题。一些没有提到...
了解您的实现低级别的多任务处理的各种选项。从基本循环(非抢占)调度器,与定时从硬件计时器滴答,由抢占RTOS。了解为什么你可能需要一个RTOS,为什么你可能不会。如果使用RTOS,得知与PC的背景初学者可能往往希望创造太多的任务。
获取的可视性的内部进行调试可能是一个挑战。有没有屏幕一般,所以在“printf”上没有投掷电话,无论你想。仿真器或JTAG接口是理想的 - 你可以设置断点,并通过你的程序步骤(只要停止微不做硬件发疯一样全速左右摆动的机械臂!)。如果仿真器/ JTAG不可用,学习如何使用一个备用串行端口(或者甚至比特的bash的销,使串行端口),用于调试信道,一些简单的存储器PEEK /戳命令。