我对非常适合嵌入式编程的编程语言感兴趣。特别是:
是否可以用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上的任何嵌入式主题的档案中进行挖掘,它包含大量的文章,其中包括许多有关此问题的文章,包括:
关于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类,但也不会对错误进行任何说明。 服务器类: 问题答案: 您正在循环关闭流。关闭流或任何资源后,您将无法使用它。