是否总是需要使用C语言编写RTOS?为什么不能用Java或其他技术编写呢?这是因为Java中没有指针概念吗?
垃圾回收是Java不适合实时性的主要原因。JIT是另一个原因,但它可以被克服。
总的来说,C语言作为一种有效的可移植汇编语言,能够提供非常可预测的运行时性能,这对于可靠的实时执行至关重要。
因为RTOS开发人员很可能不了解C++的足够多。
嵌入式软件应用程序最常用的编程语言是C。多年来,C++被视为自然继承者并得到了更广泛的接受,但其使用增长速度比预期要慢得多。有人认为C ++具有开销和成本,使之不适合嵌入式系统编程,它缺乏C的控制性和简洁性,或者虽然它适用于某些细分应用程序,但它永远不会取代C成为嵌入式系统的首选语言。
这些看法是错误的。只要编译器和其他工具足够,对于嵌入式系统的实现语言,C ++总是优于C。尽管C ++可以做到C的所有事情,但它提供了更多表达、封装、重用的机会,甚至允许在C中不切实际的大小和速度改进。
> 那么,为什么这些看法持续存在?主要原因是当人们形成自己的观点时,他们对C的了解比对C ++的了解更多。他们读过一些书,编写过一些代码,并且能够熟练使用C ++的功能,但他们缺乏了解引擎盖下发生了什么的知识,缺乏熟悉的经验,而这种经验可以让人在输入源代码甚至在制定设计时可视化反汇编。
实时系统也可以用其他语言进行编程。例如,Java有一个Java RTS 系统。
与其他答案不同的是,有相当数量的工作在进行实时垃圾收集方面。但是,这些通常不会捆绑在您的典型发行版中。
问题在于其他语言通常具有使确定性和可靠性难以实现的功能,例如传统垃圾收集、JIT、运行时优化等。
首先,RTOS并不仅仅是用C语言编写的。它们也可以用其他语言编写。但是用于RTOS的语言需要提供确定性行为。这意味着特定操作的延迟时间必须始终在特定时间范围内。这就排除了例如垃圾收集器,在大多数实现中将停止所有线程的执行一段不确定的时间。
作为一种语言,Java可以使用,实际上也有各种奇怪的案例。
但是,少数边缘案例和演示确实更多地证明了这个规则的例外。
总的来说,Java是一个复杂的系统,旨在用于业务逻辑而不是操作系统内核。
如果我们没有C语言,Java可能会朝着不同的方向或多个方向发展。
但是我们有C语言,它几乎完美地适用于操作系统内核,并且对于业务逻辑来说是相当具有挑战性的。
认为Java与C语言一样适合内核的论点,就像认为C语言与Java应用程序一样好一样不切实际。经验(除少数边缘案例外)证明了每种语言擅长的领域。
因为基于C的RTOS已经广为人知并且使用了几十年。对于许多具体情况,它们的行为是可预测的,并且您可以找到许多专家来开发这些系统。
我不知道有任何基于Java的RTOS已达到一个公司制作安全关键实时应用程序会采用的水平。
从技术上讲,没有反对基于Java的RTOS的论据,但是该主题的研究、工程和产品尚未成熟。
在编写RTOS时,总是需要使用C语言吗?
不一定。您也可以使用汇编语言、Ada等其他语言进行编码。
为什么不能使用Java或其他技术来编写呢?是因为Java中没有指针的概念吗?
不是。这是由于代码执行时间无法预测。