当前位置:  开发笔记 > 大数据 > 正文

Ada实时需要底层操作系统吗?

如何解决《Ada实时需要底层操作系统吗?》经验,为你挑选了1个好方法。

通过阅读文档我已经理解,Ada实时模块与操作系统完全隔离.没有底层操作系统和资源管理器就可以实现并发.Ada处理任务调度,时间管理,任务状态转换,列表管理,任务优先级,锁定策略,调度策略,ISR,任务间通信等.

如果是这样,那么Ada实时模块是一种实时操作系统?



1> Brian Drummo..:

是和否都是.

Ada程序需要的是它自己的RTS(运行时系统) - 相当大的代码块(在另一个最近的问题中)将"Hello World"膨胀到几百千字节.这根本不反映Ada的"效率"或其他方面,无论程序的大小如何,它都是一次性成本,对于任何重要的程序 - 例如涉及并发 - 它与您必须添加的库相比具有竞争力其他解决方案.

问题是 - 运行时系统是如何实现的?如果您在标准模式下使用标准的现成Ada编译器(Gnat),您将得到一个RTS,它将Ada并发工具分层放在"pthreads"(Posix线程)包之上,以处理低级细节.这显然是在操作系统之上.这是一个详细的描述.

但是还有其他解决方案可以提供相同的设施,使用RTOS,或者使用Ada RTS本身在裸机CPU上,或者甚至根本不提供(以无并发性为代价)如果你的目标是嵌入式微控制器,1K内存.

您可以通过向--RTS=path/to/my/rts构建命令(gnatmake或其他)添加选项来为另一个RTS构建任何Ada程序.

对于工业用途,Adacore本身为VXWorks提供商业支持.

有嵌入式ARM CPU的RTS示例,分层在FreeRTOS或其他RT操作系统上.(这里的优秀支持博客).这些可能无法提供完整的Ada任务设施,但可以提供一个选定的子集,例如RAVENSCAR配置文件,它适用于小型系统实现(例如12K左右的ARM Thumb代码),以及正式的正确性证明(RAVENSPARK).

由于这些部分是开源社区的努力,努力是分散的,可能无法提供您在评论中提到的所有通信协议,但是Ada与C库的简单接口使得为缺少的组件添加Ada包装器相对容易.我怀疑社区会欢迎额外的帮助来覆盖其余的基地!

有些协议可供使用,但由于人们很少听到Ada的赞美,因此没有广泛宣传,可能需要一些挖掘才能找到.例如,这是一个与某些工业工具使用的MBUS协议接口的库.在同一作者还提供了一个初步的版本的libusb结合.

如果您对使用最小RTS运行Ada的机制感兴趣并且下面没有操作系统,那么OSDev Wiki上的"Ada Bare Bones"页面可能会很有趣.这适用于i386,但AVR和MSP430微控制器存在类似的"裸骨"RTS .

本书看起来像另一个有用的资源,附带自己网站上的教程资料.

对于更理论化的处理,John McCormick的书"在Ada中构建并行,实时和嵌入式应用程序"很有价值.

还有一个链接:当你提到GUI时,我建议你看看用Ada编写的Gnoga框架,你的应用程序提供可在任何浏览器上查看的网页.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有