实时系统编程使用哪些编程语言?

27
我没有找到有关实时系统编程语言的有用信息。我找到的是实时系统和编程语言:Ada 95、实时Java和实时C/POSIX这里有一些pdf),它似乎谈论了Java和C在实时系统中的扩展(我没有这本书来阅读)。此外,该书出版于2001年,现在的信息可能已经过时。
因此,我怀疑这些语言是否在现实世界中被用于实际应用,或者现实世界中的实时系统是使用其他语言制作的,例如DSL。
如果第二个选项对您来说是正确的,那么您使用的语言有哪些突出特点?

1
我想说是的,但那样所有我的例子都会来自我与作者在同一部门工作时的经历。 - Pete Kirkham
3
DSL = 领域特定语言 - Eddie
10个回答

25

我是一名航空电子软件工程师。我曾参与过几个开发项目的工作。我在这些项目中使用的语言是: C,C ++ 和实时Java。

C很棒。C ++也还不错,但由于安全考虑,如DO-178B,需要严格的编码标准来编写C / C ++代码。

我认为实时Java是未来的趋势,但目前似乎还没有太多应用于航空电子领域。

韩国喷气式教练机T-50将使用运行RT Java应用程序的任务计算机来服务于HUD和MFD显示器,并管理所有关键任务功能。


8
T-50喷气式教练机的更新版本正在运行Java系统。搭载RT Java的任务计算机已于2010年11月进行了飞行测试。自那时以来,该机一直被用于其他飞行测试,并定期飞行。RT Java应用程序负责计算、数据接口和驾驶舱抬头显示器和多功能显示器上的图形显示。 - Keugyeol
1
谢谢您的更新,非常有用。 - f4lco
还可以查看MISRA标准,了解在汽车行业中使用C进行实时编程的相关内容。 - Steve Roe
你的意思是 1. C 比 C++ 更好吗?2. 你是指一般情况还是特指 RTS?3. 是说将 C++ 与 C 一起使用比单独使用任何一种更困难、不太安全,还是相对于 Java 而言? - Sam

22

Java实时规范现在有几个商用级别的实现:

这些产品涵盖从编译到本地代码(Aonix)到J2ME(aicas、apogee),再到完整的J2SE(Sun、IBM)的整个领域。大多数,如果不是全部,已经在少数安全或任务关键系统中进行了部署,但势头正在增长。示例包括Eglin空军基地的空间监视雷达现代化和美国海军在DDG-1000/Zumwalt驱逐舰中使用RTSJ。Sun还声称在金融交易处理领域进行了部署。

如果您对RTSJ感兴趣,我建议阅读Peter Dibble的《实时平台编程》或Wellings教授的《Java并发和实时编程》

相关的是,目前也有人在进行工作,提供了Java编程语言的安全关键性配置文件,并构建为RTSJ的子集。此外,还组建了一个专家小组来探索分布式RTSJ(DRTSJ),但工作已经停滞不前。


2
所有重要的链接都已经失效了... - eonil

12
该书涵盖了Ada 95、Java实时系统和实时POSIX扩展的使用(用C编程)。这些语言都不是直接针对特定领域的语言。Ada 95是一种通常用于防卫和航空航天工业实时编程的编程语言,至少有一个基于Ada的DSL-SparkAda,它是一种注释系统,描述系统特性给程序验证工具。这次采访于2006年4月6日,指出了组成Java实时系统的某些类和虚拟机更改。它没有提到任何特定领域的语言扩展。我还没有遇到过在实时系统中使用Java的情况,但我也没有寻找我期望找到它的那种系统(我在航空模拟中工作,在其中实时系统使用C ++、Fortran和偶尔的Ada)。Realtime POSIX是对POSIX操作系统设施的一组扩展。作为操作系统扩展,它们不需要语言中的任何特定内容。话虽如此,我可以想到一个基于C的用于描述嵌入式系统的DSL-SystemC,但我不知道它是否也用于生成嵌入式系统。

这本书没有提到Matlab,但在过去的几年中,它已经从一个模拟工具发展成为了实时系统的模型驱动开发系统。实际上,Matlab/Simulink是用于线性编程、状态机和算法的DSL。Matlab可以生成CHDL以用于实时和嵌入式系统。很少看到航空电子学、电子战或其他防卫行业的实时工作广告不要求一些Matlab经验。(我不是Matlab的员工,但难以过分强调它在工业中的普及程度)


如果包含Matlab/Simulink,我会给这个软件加一分。它很强大,但在我看来,使用体验仍然不够完善,尤其是对于新用户而言,调试可能会让人特别沮丧。我认为他们更应该关注优化现有功能,而不是开发新功能。如果你手头有一个能干的程序员,我就质疑是否需要C代码生成,但如果没有,我认为这个功能还是很有价值的。这个话题很快就变得很哲学化了。不过,你最终可能会编写C代码并与s函数集成,所以我也不知道。然而,其他同事告诉我,在FPGA上生成HDL代码时,这个软件是必不可少的。 - Tyler Morrow

7
实时应用程序可以使用几乎任何语言编写。但是环境(操作系统、运行时和运行时库)必须符合实时约束条件。在大多数情况下,实时意味着有一种确定性的时间来发生某些事情。通常情况下,确定性时间是在微秒/毫秒范围内的非常低的时间值。
实时系统完全依赖于此标准,因为规格说明通常会说“每个x(时间段)(做某事|检查某事)”。通常这种情况发生在系统与外部传感器接口并控制救生或威胁生命的系统时。
我曾在一款汽车导航和信息娱乐系统上工作,该系统主要使用C/C++开发,并配置了专门满足实时约束条件的操作系统,以提供实时导航和媒体播放。
但是,实时系统不仅仅是这些:通常整个系统中算法的选择都是为了具有按照大O表示法确定时间的确定性运行时间,主要使用线性或恒定时间。其他所有内容都被认为是不确定性的,因此不适用于实时系统。

4
“实时应用可以使用几乎任何编程语言进行开发。” 这句话并不完全正确。最常见的限制是采用"stop-the-world"垃圾回收机制的编程语言无法提供确定性的延迟(即使你对它们做任何其他改进)。 - Tom
2
@Tom,它们可能适用于软实时应用程序。Erlang是一个典型的例子。 - user1804599

6

我曾经接触过的所有实时系统主要都是用C语言编写的,有一些部分使用汇编语言,或者主要是用汇编语言编写,只有少量的C语言代码。(具体取决于是90年代以及之后还是80年代)然而,我所接触的一些实时系统使用了特殊的自制代码生成器,而不是完全符合DSL标准的语言。


5

实时定向语言?

什么是实时?

首先,我们必须定义什么是实时

当然,取决于你的工具如何与物理环境交互,纯实时可能无法有效完成,因为会有很多第三方依赖。

如果你正在使用像arduino这样的微控制器构建嵌入式系统,则要使用的语言将受到硬件限制,但对于像Raspberry Pi这样更复杂的系统,语言选择非常广泛。

粒度

这取决于你正在测量的内容,如果你正在处理:

  • 天气温度,每隔10分钟读取一次可能就足够了
  • 人的身高或体重,一天读取一次或四次可能就足够了
  • 服务器状态,对于精细调试,每秒钟1次;对于安静的不重要的二级服务器,大约每小时1次。
  • 原子碰撞计数: 需要更精密的读取......

基于事件的读取

收集数据的正确(更好)方式是基于值变化事件...只要设备允许。
你的工具不应该从设备中轮询值,而是设备在值改变时向您的工具发送值。
这可以通过使用硬件中断触发器或使用端口协议(如RS-232)保持监听某个串行端口来实现。
监控环境
最后要警告的一件事是合法用户将如何交互。
如果您正在构建嵌入式独立设备,例如机器人,则可以使用图形库与触摸屏交互。
如果您正在构建基于Web的监视器,则可能需要记住客户端可能是旧的800x600单色屏幕,使用较差的互联网连接和小处理器...但根据最终目标,如果您可以与客户端交互,则可以确保强大的硬件和强大的互联网连接。无论如何,您都必须注意连接丢失和服务器与客户端之间通信延迟的事件。这主要取决于第三方依赖项。
选择哪种编程语言?
从那里开始,语言选择很广,显然取决于
  • 你所掌握的知识。
  • 所需的细粒度(当然可以使用基于事件的工具)
  • 您构建该工具的时间量(资金;))
  • 延迟,同事......
  • 设备类型
  • 监视类型
  • 其他一些政治原因
你可以仅使用 构建实时监控引擎,我曾见过仅使用 构建的复杂引擎...... 我个人使用 , 构建了一个基于Web的太阳能监视器。

4

我无法相信没有人提到LabVIEW编程语言,它广泛用于实时安全关键系统。它具有广泛的库和知名的设计模式,可用于架构和实现实时系统。

此外,国家仪器公司制造各种硬件(cRIO、PXI等),专为实时应用而设计。

我们在水力压裂(Fracking)中使用LabVIEW,该技术在安全关键环境中得到应用。


2

可编程逻辑控制器(PLCs)运行梯形图和功能块图代码,这实际上是一种实时DSL,因为您的选项非常有限,难以以可能导致不可预测运行时性能的方式进行编程。


1

0
自2003年以来,我一直在一家公司工作,该公司正在开发和部署Scada/Mes平台。最初的实现始于1993年,在OS/2上使用Modula2。后来(1998年),它被移植到Ada95和Windows上。目前(2019年),我们使用AdaCore的Ada编译器。我们的系统已被移植并部署到32/64位Windows、HPUX、OpenVMS(最近甚至是Raspberry)。我们在中欧有多个安装位置(燃气行业、炼油厂、工厂、发电厂)。 我们认为Ada的特性使我们的系统具有高度的可靠性,并防止了许多错误,如果我们使用像C这样的语言,这些错误很容易发生。 另请参阅我的博客https://www.ipesoft.com/en/blog/what-language-is-the-d2000-written

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接