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

eKe*_*ek0 22 programming-languages real-time

我没有找到任何关于实时系统的编程语言的有用信息.我发现的只有实时系统和编程语言:Ada 95,实时Java和实时C/POSIX(这里有一些pdf),它似乎谈论了实时系统的Java和C扩展(我不知道)有书要读).此外,该书于2001年出版,现在信息可能已经过时.

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

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

Keu*_*eol 24

我是航空电子软件工程师.我能够参与几个开发项目.我在这些项目中使用的语言是: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上的所有计算,数据接口和图形显示. (6认同)

and*_*soj 21

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

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

如果您对RTSJ感兴趣,我建议使用Peter Dibble的实时平台编程,或者教授Wellings的Java并发和实时编程.

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

  • 所有重要链接都已损坏... (2认同)

Pet*_*ham 12

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

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

2006年4月6日的访谈表明构成Java实时系统的一些类和虚拟机更改.它没有提到任何特定于域的语言扩展.我没有在实时系统中使用过Java,但我还没有看到我期望找到它的各种系统(我在航空航天模拟中工作,它是C++,Fortran和偶尔的Ada用于实时环路系统).

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

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


gro*_*ver 7

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

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

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

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

  • "实时应用程序几乎可以用任何语言制作"并非如此.最常见的限制是,使用世界各地的垃圾收集器的语言无法提供确定性延迟,无论您对它们做了什么. (3认同)
  • @Tom它们可能适用于软实时应用程序.Erlang就是一个典型的例子. (2认同)

Edd*_*die 6

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


F. *_*uri 5

面向实时的语言?

什么是实时的

首先,我们必须定义实时意味着什么.

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

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

粒度

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

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

基于事件的阅读

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

您的工具不得轮询设备中的值,但设备必须在工具更改时向您的工具发送值.

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

监控环境

最后要注意的是合法用户将如何与之互动.

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

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

哪种编程语言?

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

  • 你的知识.
  • 请求粒度(当然也可以使用基于事件的粒度)
  • 你必须建立工具的时间(钱;)
  • 延迟,同事......
  • 一种设备
  • 有点监控
  • 其他一些政治原因

您可以通过仅使用构建实时监控引擎,我已经看到仅在下构建的复杂引擎...我个人使用,构建了基于Web的太阳能监视器.