【问题标题】:What languages are used for real time systems programming? [closed]哪些语言用于实时系统编程? [关闭]
【发布时间】:2010-10-16 10:09:39
【问题描述】:

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

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

如果第二个选项对您来说是正确的,那么您使用的语言的突出特点是什么?

【问题讨论】:

  • 我会说是的,但是我所有的例子都来自我在同一个部门工作的时候。作为作者。
  • @Adam: DSL = 领域特定语言

标签: programming-languages real-time


【解决方案1】:

我从 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

【讨论】:

    【解决方案2】:

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

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

    This interview 2006 年 4 月 6 日表示构成 Java 实时系统的一些类和虚拟机更改。它没有提到任何特定领域的语言扩展。我没有遇到过在实时系统中使用 Java,但我没有研究过我希望找到的那种系统(我从事航空航天模拟,它是 C++、Fortran 和偶尔的 Ada对于实时在环系统)。

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

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

    【讨论】:

    • +1 用于包含 Matlab/Simulink。它很大并且确实有效,但我的拙见是体验仍然感觉不完善,调试可能特别令人沮丧,尤其是对于新用户而言。我看到更多关注新功能而不是改进它们所拥有的功能。如果你手头有一个称职的程序员,我怀疑需要 C 代码生成,但如果你不这样做,我会看到它的价值。它很快就变得哲学化了。尽管如此,您最终还是可以编写 C 代码并与 s-functions 集成,所以 idk。但是,其他同事告诉我,在 FPGA 上生成 HDL 代码是必不可少的。
    【解决方案3】:

    面向实时的语言?

    什么是实时

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

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

    如果您使用像 arduino 这样的微控制器来构建嵌入的东西,使用的语言将受到硬件的限制,但是对于像 Raspberry Pi 这样更复杂的东西,语言选择非常广泛。

    粒度

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

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

    基于事件的阅读

    收集数据的正确(更好)方式是基于值更改事件...只要设备允许。

    您的工具不必轮询来自设备的值,但是当值发生变化时,设备必须将值发送到您的工具。

    这可以通过使用硬件中断触发器或使用像RS-232这样的端口协议在某个串行端口上保持监听来完成,例如。

    监控环境

    最后要警告的是合法用户将如何与之交互

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

    如果您正在构建基于 Web 的监视器,您可能需要记住,客户端可能是旧的 800x600 单色屏幕,使用较差的互联网连接和小型处理器...但取决于如果您可以与客户互动,那么最终目标是确保强大的硬件和强大的互联网连接。无论如何,您必须注意连接丢失和服务器和客户端之间的通信延迟事件。主要是第三方依赖。

    哪种编程语言?

    从那里开始,语言选择范围很广,显然取决于

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

    您可以仅使用 构建实时监控引擎,我见过仅在 下构建的复杂引擎...我个人构建了一个基于网络的太阳能使用进行监控。

    【讨论】:

      【解决方案4】:

      我不敢相信没有人提到广泛用于实时安全关键系统的 LabVIEW 编程语言。它拥有丰富的库和著名的设计模式,可用于构建和实现 RT 系统。

      National Instruments 还生产各种硬件(cRIO、PXI 等),专为实时应用而设计。

      我们使用 LabVIEW 进行压裂(水力压裂),用于安全关键的环境。

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          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

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

          【讨论】:

          • 所有重要链接都断开了...
          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

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

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

            【讨论】:

            • 运行 Java 的 T-50 喷气教练机的更新...运行 RT Java 的任务计算机于 2010 年 11 月进行了飞行测试。从那时起,它不时与其他航班一起飞行测试目的。 RT Java 应用程序执行 HUD 和 MFD 上的所有计算、数据接口和图形显示。
            • 感谢您的更新,非常有用。
            • 另见 MISRA 标准,用于汽车行业的 C 实时编程。
            • 你的意思是 1. C 比 C++ 好? 2. 您是指一般意义上的还是特定于 RTS 的? 3. 将 C++ 与 C 一起使用比单独使用更难且更不安全,或者与 Java 相比确实如此?
            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

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

              实时系统仅取决于此标准,因为规范通常会说“每 x(时间段)(做某事 | 检查某事)”之类的内容。如果系统与外部传感器接口并控制救生或危及生命的系统,通常会发生这种情况。

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

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

              【讨论】:

              • “几乎可以用任何语言制作实时应用程序”并不是真的。最常见的限制是,无论您对它们做什么,使用了 stop-the-world 垃圾收集器的语言都无法提供确定性延迟。
              • @Tom 他们可能适用于软实时应用程序。 Erlang 就是一个典型的例子。
              猜你喜欢
              • 2020-07-25
              • 2011-01-13
              • 1970-01-01
              • 1970-01-01
              • 2013-06-17
              • 2016-05-30
              • 2011-07-17
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多