当前位置: 首页 > 面试题库 >

使用正确的工具完成工作:嵌入式编程

洪永长
2023-03-14
问题内容

我对非常适合嵌入式编程的编程语言感兴趣。特别是:

是否可以用C 对嵌入式系统进行编程?还是使用纯C更好?还是仅在某些语言功能(例如RTTI,异常和模板)被排除的情况下,C 才能正常运行?

Java在这个领域呢?

谢谢。


问题答案:

是否可以用C ++对嵌入式系统进行编程?

是的,当然,即使在8位系统上也是如此。C
++与C的运行时初始化要求只有一点点不同,即在调用main()之前,必须调用任何静态对象的构造函数。这样做的开销(不包括控件内的构造函数本身)很小,尽管您必须小心,因为未定义构造顺序。

使用C ,您只需为使用的东西付费(有用的很多东西可能是免费的)。就是说,例如,一块也可以用C 编译的C代码通常不需要更多的内存,并且在编译为C
时的执行速度不会比编译为C时的执行速度慢。您可能需要注意C 的某些元素,但大多数最有用的功能只需花费很少或根本没有代价,并且收益巨大。

还是使用纯C更好?

可能在某些情况下。一些较小的8位甚至16位目标没有C
编译器(或至少没有任何编译器),如果存在问题,使用C代码将提供更大的可移植性。此外,在小型应用程序中资源严重受限的目标上,C
可以带来C的好处是微不足道的。C ++的其他功能(主要是启用OOP的功能)使其适合于相对大型和复杂的软件构造。

还是仅在某些语言功能(例如RTTI,异常和模板)被排除的情况下,C ++才能正常运行?

可接受的语言功能完全取决于目标和应用程序。如果您受到内存的限制,则可以避免使用昂贵的功能或库,即使如此,它也可能取决于您缺少的是代码空间还是数据空间(在这些目标是分开的目标上)。如果应用程序是实时的,则应避免使用那些不确定性的功能和库类。

通常,我建议如果目标是32位,则始终优先使用C 而不是C,然后剪切C 以适合内存和性能限制。对于较小的部分,在选择C
++时要谨慎一些,尽管不要完全放弃。它可以使生活更轻松。

如果您确实选择使用C ,请确保您具有不错的C 调试器硬件/软件。用C
构造复杂软件相对容易,这使一个体面的调试器更加有价值。并非嵌入式领域的所有工具都支持C

我总是建议您从Embedded.com上的任何嵌入式主题的档案中进行挖掘,它包含大量的文章,其中包括许多有关此问题的文章,包括:

  • 拒绝C ++的可怜原因
  • 用C语言编写真正的男人程序
  • 潜入C ++并生存
  • 在嵌入式设计中使用C ++替代C的准则
  • 为什么C ++在嵌入式系统设计中是C的可行替代品
  • 即使最低水平也更好

关于Java,我不是专家,但是它具有重要的运行时要求,因此不适合资源受限的系统。您可能会限制自己使用Java的相对昂贵的硬件。它的主要好处是平台独立性,但是可移植性不会扩展到不支持Java(有很多Java)的平台,因此,与具有抽象硬件接口的精心设计的C或C
++实现相比,它的可移植性较弱。

[edit] 顺便说一句,我刚在TechOnline时事通讯中收到了此信息:在嵌入式应用程序中有效使用C ++



 类似资料:
  • 硬件核心(Hardware Core) Controller(控制器) CPU AMD x86 x64 Intel x86 x64 MCU MCS-51 HCS12 AVR XMEGA ESP Coldfire ARM STM32 FreeScale K60 K40 PIC32 PIC12/14/16 TM4C123 TM4C129X Stellaris lm4f120 CC3200 Renesa

  • 我正在使用PDFBox从现有的PDF模板构建文档,因此它会打开文件,向其中添加文本,然后保存。除了尝试使用外部TTF字体外,它工作得很好。我尝试了不同的方法,花了两天时间寻找解决方案,但PDFBox上没有太多。 这里有一些代码,使用字体“Tardy Kid”,因为它不能被误认为其他任何东西,也不太可能是任何标准库的一部分。 代码执行良好,显示println中的“TardyKid”(显示字体已加载且

  • 我试图使一个计算器与一定的输入,是输入像+5或/10 2。当我编译并运行它时,我会得到以下错误: 线程“main”java.util.NoSuchelementException 在java.util.scanner.throwfor(Scanner.java:907) 在java.util.scanner.next(Scanner.java:1416) 在calc.main(calc.java:

  • 问题内容: 我已经下载,解压缩并使用一些插件(值得注意的,EPIC,Clearcase,QuantumDB,MisterQ)设置了Eclipse 3.4.2。 现在,我在编辑Java项目时发现代码完成无法正常工作。如果我键入并按,则弹出窗口将显示“无默认提案”,底部的状态栏将显示“无可用完成”。 问题答案: 尝试还原 中的默认选项 你在此首选项屏幕中看到的数据类型的示例,但是不一定是你当前拥有的数

  • 问题内容: 在上周,我创建了两个班,我的团队对他们的表现表达了一些担忧。为了评估我的代码,我编写了一些简单的JUnit测试,它们通过构建丰富的测试数据集,然后通过相关方法将这些数据馈入数千次迭代来练习这些类。我记录了每次迭代的运行时间,然后使用循环和注销了高,低和平均时间。最终,我让JUnit断言,高频率和平均时间都在可接受的范围内。这种测试方法使我的团队对此代码充满信心。 JUnit是否是以这种

  • 问题内容: 我有一些课程:客户端,服务器和后台正在使用Player类。我真的不明白为什么带/的Client类无法正常工作。 我在做什么不好?我的错在哪里 现在客户端类: 它不会将Object发送到Server类,但也不会对错误进行任何说明。 服务器类: 问题答案: 您正在循环关闭流。关闭流或任何资源后,您将无法使用它。