我没有找到任何关于实时系统的编程语言的有用信息.我发现的只有实时系统和编程语言:Ada 95,实时Java和实时C/POSIX(这里有一些pdf),它似乎谈论了实时系统的Java和C扩展(我不知道)有书要读).此外,该书于2001年出版,现在信息可能已经过时.
所以,我怀疑这些语言是否用于现实世界的应用程序,或者现实世界中的实时系统是否用其他语言制作,如DSL.
如果第二个选项适合您,您使用的语言的突出特点是什么?
我是航空电子软件工程师.我能够参与几个开发项目.我在这些项目中使用的语言是:C,C++和Real-time Java.
C很棒.C++并不是那么糟糕,但C/C++需要严格的编码标准来满足安全考虑,例如DO-178B.
我认为实时Java是要走的路,但我还没有看到很多航空电子应用.
韩国喷气式教练机T-50将配备一台运行RT Java应用程序的任务计算机,用于HUD和MFD显示器以及所有关键任务功能.
Java的实时规范现在有几个商业级实现:
Sun的JavaRTS
IBM的WebSphere Real-Time
Aonix PERC
aicas JamaicaVM
Apogee Aphelion
这些产品涵盖从编译到本机代码(Aonix)到J2ME(aicas,apogee),再到完整J2SE(Sun,IBM)的连续体.大多数(如果不是全部)已经在少数安全或任务关键型系统中进行了部署,但势头正在增强.例子包括Eglin AFB的太空监视雷达现代化和美国海军在DDG-1000/Zumwalt驱逐舰中使用RTSJ .Sun还声称在金融交易处理领域进行部署.
如果您对RTSJ感兴趣,我建议使用Peter Dibble的实时平台编程,或者教授Wellings的Java并发和实时编程.
在相关的说明中,还有一些工作正在为Java编程语言提供安全关键的配置文件,该配置文件是作为RTSJ的子集构建的.此外,一个专家组已经成立,以探索分布式RTSJ DRTSJ,但工作停滞不前.
本书介绍了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可以为实时和嵌入式系统生成C或HDL.很少见到航空电子,电子战或其他国防工业的实时工作广告,不需要一些Matlab经验.(我不适用于Matlab,但很难过分强调它在行业中的普遍存在)
实时应用程序几乎可以用任何语言编写.但是,环境(操作系统,运行时和运行时库)必须符合实时约束.在大多数情况下,实时意味着总会有确定的时间发生某些事情.确定性时间在微秒/毫秒范围内是非常低的时间值.
实时系统完全依赖于这个标准,因为具体化通常会说"每x(一段时间)(做某事|检查某事)".通常,如果系统与外部传感器接口并控制挽救生命或危及生命的系统,就会发生这种情况.
我正在开发一种主要以C/C++开发的车载导航和信息娱乐系统,其操作系统专门配置以满足实时约束,以提供实时导航和媒体播放.
但这并非全部都是实时系统:通常,整个系统中的算法选择根据Big-O表示法具有确定性运行时间,主要使用线性或恒定时间.其他一切都被认为是非确定性的,因此不适用于实时系统.
我使用的所有实时系统主要是用C语言编写的,带有一些汇编程序,或者主要用汇编语言编写,只有很少的C语言.(取决于我们是在谈论90年代及以后,还是80年代,但是,我使用的一些实时系统使用了 - 不完全是DSL - 特殊的本土代码生成器.
首先,我们必须定义实时意味着什么.
当然,取决于您的工具如何对抗物理环境,纯实时无法有效完成,主要是因为会有很多第三方依赖.
如果你使用像arduino这样的微控制器来构建嵌入式东西,那么使用的语言将受到硬件的限制,但是对于像Raspberry Pi这样的更复杂的东西,语言选择非常广泛.
这取决于您正在测量的内容,如果您正在使用:
天气温度,每10分钟读一次就足够了
人的身高或体重,每天读一个或四个
服务器状态,精细调试时间为1秒,安静不重要的辅助服务器约为1小时.
原子碰撞计数:更精细的东西......
收集数据的正确(更好)方式是基于价值变化事件 ......只要设备允许它.
您的工具不得轮询设备中的值,但设备必须在工具更改时向您的工具发送值.
这可以通过使用硬件中断触发器或使用RS-232等端口协议来保持监听某些串行端口来完成.
最后要注意的是合法用户将如何与之互动.
如果您正在构建嵌入式独立设备(如机器人),则可以使用图形库与触摸屏进行交互.
如果您正在构建基于Web的监视器,您可能必须记住,客户端可能是旧的800x600单色屏幕,使用较差的互联网连接和小型处理器......但如果您可以与客户进行交互,则取决于最终目标,可确保强大的硬件和强大的互联网连接.无论如何,你必须注意连接松动和服务器与客户端之间的通信延迟事件.主要是第三方依赖项.
从那里开始,语言选择范围很广,显然取决于
你的知识.
请求粒度(当然也可以使用基于事件的粒度)
你必须建立工具的时间(钱;)
延迟,同事......
一种设备
有点监控
其他一些政治原因
您可以通过仅使用bash和sql构建实时监控引擎,我已经看到仅在postgresql下构建的复杂引擎...我个人使用perl,mysql和javascript构建了基于Web的太阳能监视器.