当前位置:  开发笔记 > 编程语言 > 正文

为什么RTOS仅在c中编码?

如何解决《为什么RTOS仅在c中编码?》经验,为你挑选了7个好方法。

是否有必要用C语言编写RTOS?为什么不能用java或其他技术编码.. ?? 那是因为java中缺少指针概念吗?



1> TheManWithNo..:

垃圾收集是Java成为实时的重要原因.JIT是另一个,但它可以克服.

通常,C是有效的可移植组件,可提供非常可预测的运行时性能,这对于可靠的实时执行至关重要.


Java确实有一个RTS系统,对实时垃圾收集有一些很好的研究和工作.
JIT是"Just-In-TIme编译器",它大大改变了代码的运行时特性http://en.wikipedia.org/wiki/Just-in-time_compilation垃圾收集是Java实现的自动内存清理.
垃圾收集是自动释放未使用的对象 - 这通常有可能暂停正在运行的应用程序(暂停可以减少,但很难完全消除,而不会有内存不足的情况).JIT是Just In Time编译器,可根据需要将频繁使用的java字节码转换为本机代码 - 这显然会极大地改变性能,但本身需要时间来执行,您可能需要强制完成编译以满足实时目标.

2> notnoop..:

实时系统也可以用其他语言编程.例如,Java有一个Java RTS系统.

与其他答案相反,实时垃圾收集的工作量合理.但是,这些不会捆绑在您的典型发行版中.

令人担忧的是,其他语言通常具有难以实现确定性和可靠性的功能,例如传统的垃圾收集,JIT,运行时优化等.


你会注意到Java RTS系统必须在RTOS之上运行 - 没有人构建一个实时的裸机Java系统.

3> kgiannakakis..:

起初,RTOS不仅仅用C编码.它们也可以用其他语言编码.但是,用于RTOS的语言需要提供确定性行为.这意味着特定操作的延迟必须始终在特定的时间内.这排除了例如垃圾收集,在大多数实现中,垃圾收集将在不确定的时间内停止所有线程的执行.



4> Özgür..:

因为RTOS开发人员很可能不太了解C++.

嵌入式系统中的C++:神话与现实

有些人认为C++有开销和成本使得它不适合嵌入式系统编程,它缺乏C的控制和简洁,或者虽然它可能适合某些小众应用,但它永远不会取代C作为语言嵌入式系统的选择.

这些看法是错误的.在编译器和其他工具足够的地方,C++总是优于C作为嵌入式系统的实现语言.在完成C所做的一切时,它提供了更多表达,封装,重用的机会,甚至可以在C中提供不切实际的尺寸和速度改进.

>那么,为什么这些看法会持续存在?主要原因是当人们形成他们的观点时,他们对C的了解远远超过C++.他们已经阅读了一些书籍,编写了一些代码,并且能够使用C++的功能,但是他们缺乏对幕后发生的事情的了解,这种熟悉性允许人们在输入源代码时可视化反汇编,甚至在制定时也是如此.设计.

在嵌入式设计中使用C++替代C的指南

嵌入式软件应用程序通常用C语言编写.多年来,C++一直被视为自然的继承者,并且已经获得了更大的认可,但其使用量的增长速度远低于预期.

有许多的原因.首先,嵌入式开发人员非常保守,他们更喜欢使用经证实而非新颖的解决方案"如果没有破坏,就不要修复它".

还有经验教训.许多开发人员试图将C++用于嵌入式应用程序并且失败了.这种失败有时可能归因于开发工具的缺点,但大多数情况下,应该责备使用"像台式计算机一样对待嵌入式系统"的语言.

C的局限性虽然C被广泛使用,但它有局限性,因为它不是为嵌入式应用程序或现在常见的规模项目而设计的.主要限制包括:

1)C非常强大和灵活,因此可能是危险的.(它具有低级别的能力 - 这对嵌入式有用"但也代表了许多不警惕的陷阱.)

2)程序员需要非常有条理和有纪律

3)程序员需要了解程序在低级别和高级别的行为(大型项目难以维护)

4)程序员需要熟悉应用程序

但是,C++具有强大的面向对象功能,可以帮助解决C的局限:

1)它将非专家的高专业知识区域封装并隐藏在"对象"中; (测试用例将在本系列的第2部分中展示专业知识的封装).

2)非专家可以直观地使用对象来实现高级概念设计



5> jilles de wi..:

为RTOS-es通常运行的所有硬件提供高度优化的c编译器.

您可以相对轻松地在c代码中包含非常低级别的优化.

c代码可用于许多有用的低级系统工具,因此可以很容易地合并.



6> DigitalRoss..:

不是"必要",但更实际

作为一种语言,可以使用Java,并且实际上发生了各种古怪的案例.

但是一些边缘案例和示威活动实际上更多是"证明规则的例外".

通常,Java是一个用于业务逻辑而非OS内核的大型系统.

如果我们还没有C,那么Java可能在不同的方向或多个方向上发展.

但我们确实拥有C,这对于操作系统内核来说几乎是完美的,对业务逻辑来说也是一个挑战.

对于内核而言,Java与C一样好的论点与C对应用程序的Java一样好.经验,减去一些边缘的例子,绝对证明了每种语言的好处.



7> Clifford..:

根据定义,RTOS必须支持确定性调度和执行.通常,低中断延迟和直接硬件访问也是一个理想的因素.Java中使用的技术,如垃圾收集,JIT编译和字节码执行,使这些目标难以实现.

Java可以在实时系统中使用,但通常它 RTOS 运行而不是在其实现中使用.

总而言之,建议RTOS始终用C实现同样是不正确的.任何系统级语言都适用,包括汇编程序.在大多数情况下,至少内核的某些部分在任何情况下都是汇编程序.C++将是一种合适的语言(很明显,因为它本质上是一个C超集),许多商业RTOS在任何情况下都有C++包装器; 我习惯性地为RTOS开发C++抽象层以支持可移植性.

通常使用C的另一个原因是因为C(通常是C/C++)编译器通常是第一个且通常是新架构可用的唯一语言(汇编器除外)(现在经常以GNU编译器实现的形式) ).因此,如果您希望能够将RTOS移植到最广泛的平台,那么使用最普遍的语言是有意义的.

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有