什么语言用于实时系统编程?

时间:2009-03-30 16:22:47

标签: programming-languages real-time

我没有找到任何有关实时系统编程语言的有用信息。我发现的只有Real Time Systems and Programming Languages: Ada 95, Real-Time Java and Real-Time C/POSIXsome pdf here),这似乎是关于实时系统的Java和C的扩展(我没有读过的书)。此外,该书于2001年出版,现在信息可能已经过时。

所以,我怀疑这些语言是用于现实世界的应用程序,还是现实世界中的实时系统是用其他语言制作的,比如DSL。

如果第二个选项适合您,您使用的语言的突出特点是什么?

10 个答案:

答案 0 :(得分:24)

我是航空电子软件工程师。 我能够参与几个开发项目。 我在这些项目中使用的语言是:C,C ++和Real-time Java。

C很棒。 C ++并不是那么糟糕,但C / C ++需要严格的编码标准来满足安全考虑,例如DO-178B。

我认为实时Java是要走的路,但我还没有看到很多航空电子应用程序。

韩国喷气式教练机T-50将配备一台运行RT Java应用程序的任务计算机,为HUD和MFD显示器以及所有关键任务功能提供服务。

答案 1 :(得分:21)

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

这些产品涵盖从编译到本机代码(Aonix)到J2ME(aicas,apogee),再到完整J2SE(Sun,IBM)的连续体。大多数(如果不是全部)已经在少数安全或任务关键型系统中进行了部署,但势头正在形成。例子包括Eglin AFB's space surveillance radar modernization和美国海军在DDG-1000/Zumwalt destroyer中使用RTSJ。 Sun还声称在金融交易处理领域进行部署。

如果您对RTSJ感兴趣,我建议Peter Dibble的Real-Time Platform Programming或Wellings教授Concurrent and Real-Time Programming in Java

在相关的说明中,还有一些工作正在为Java编程语言提供安全关键的配置文件,该配置文件是作为RTSJ的子集构建的。此外,一个专家组已经成立,以探索分布式RTSJ DRTSJ,但工作停滞不前。

答案 2 :(得分:12)

本书介绍了Ada 95的使用,Java实时系统和实时POSIX扩展(用C编程)。这些都不是直接针对特定领域的语言。

Ada 95是一种常用于90年代后期的编程语言,(AFAIK)仍广泛用于国防和航空航天工业的实时编程。在Ada之上至少建立了一个DSL - SparkAda - 这是一个注释系统,它描述了程序验证工具的系统特性。

2006年4月6日的

This interview表示组成Java Real-Time System的一些类和虚拟机更改。它没有提到任何特定于域的语言扩展。我没有在实时系统中使用过Java,但我还没有看到我希望找到它的各种系统(我在航空航天模拟中工作,它是C ++,Fortran和偶尔的Ada用于实时环路系统)。

Realtime POSIX是POSIX操作系统工具的一组扩展。作为操作系统扩展,它们不需要该语言中的任何特定内容。也就是说,我可以想到一个基于C的DSL用于描述嵌入式系统 - SystemC - 但我不知道它是否也用于生成嵌入式系统。

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

答案 3 :(得分:7)

实时应用程序几乎可以用任何语言编写。但是,环境(操作系统,运行时和运行时库)必须符合实时约束。在大多数情况下,实时意味着总会有确定的时间发生某些事情。确定性时间在微秒/毫秒范围内是非常低的时间值。

实时系统完全依赖于这个标准,因为具体化通常会说“每x(时间段)(做某事|检查某事)”。通常,如果系统与外部传感器连接并控制挽救生命或危及生命的系统,就会发生这种情况。

我正在研究一种主要采用C / C ++开发的车载导航和信息娱乐系统,其操作系统专门配置为满足实时约束,以提供实时导航和媒体播放。

但这并不是实时系统的全部内容:通常,整个系统中的算法选择根据Big-O表示法确定运行时间,主要使用线性或恒定时间。其他一切都被认为是非确定性的,因此不适用于实时系统。

答案 4 :(得分:6)

我使用过的所有实时系统主要是用C语言编写的,带有一些汇编程序,或者主要用汇编语言编写,只有很少的C语言。(取决于我们是否在说90s及以后,或者分别是80年代。)但是,我使用的一些实时系统已经使用了 - 不完全是DSL - 特殊的本土代码生成器。

答案 5 :(得分:5)

面向实时的语言?

什么是实时

首先,我们必须定义实时的含义。

当然,取决于您的工具如何对抗物理环境纯实时无法有效完成,主要是因为会有很多第三方依赖。

如果使用arduino等微控制器构建嵌入式内容,则使用的语言将受到硬件的限制,但对于Raspberry Pi等更复杂的内容,语言选择非常广泛。< / p>

粒度

这取决于您测量的内容,如果您正在使用:

  • 天气温度,每10分钟阅读一次就足够了
  • 人的身高或体重,每天读一个或四个
  • 服务器状态,精细调试时间为1秒,安静不重要的辅助服务器时间约为1小时。
  • 原子碰撞计数:更精细......

基于事件的阅读

收集数据的正确(更好)方式基于值更改事件 ......只要设备允许,就会这样做。

您的工具必​​须不从设备轮询值,但设备必须在工具更改时向您的工具发送值。

这可以通过使用硬件中断触发器或使用 RS-232 等端口协议来继续监听某些串口来完成。

监控环境

最后要注意的是合法用户将如何与进行互动。

如果您正在构建嵌入式独立设备,例如 robot ,则可以使用图形库与触摸屏进行交互。

如果您要构建基于网络的显示器,您可能需要记住,客户端可能是旧的 800x600 单色屏幕,使用较差的互联网连接和小型处理器......但是根据最终目标,如果您可以与客户进行互动,您可以确保强大的硬件和强大的互联网连接。无论如何,你必须注意连接松动和服务器与客户端之间的通信延迟事件。主要是第三方依赖。

哪种编程语言?

从那时起,语言选择范围很广,显然取决于

  • 你的知识。
  • 要求的粒度(当然也使用基于事件的)
  • 您需要构建工具的时间(金钱;)
  • 延迟,同事......
  • 种设备
  • 一种监控
  • 其他一些政治原因

您只能使用来构建实时监控引擎,我已经看到仅在下构建的复杂引擎......我&#39 ; ve使用亲自构建了基于网络的太阳能监控器。

答案 6 :(得分:4)

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

此外,NI还制造了专为实时应用而设计的各种硬件(cRIO,PXI等)。

我们将LabVIEW用于在安全关键环境中使用的水力压裂(水力压裂)。

顺便说一句,LabVIEW也用于非RT应用程序。

答案 7 :(得分:2)

PLC运行梯形图和fbd代码,这实际上是一个实时的dsl,因为你的选项非常有限,以至于难以以导致不可预测的运行时性能的方式进行编程

答案 8 :(得分:1)

我的Kickstarter提供了一种真正有目的的C语言应用于实时编程 - 以及所有相关问题(例如并行编程) http://www.kickstarter.com/projects/767046121/crawl-space-computing-with-connel 它被称为“宽程序设计”,我一生中大部分时间都在这样做。奖励包括一个软件库和一本书 - 旨在使用。

答案 9 :(得分: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