Ada实时是否需要底层操作系统?
Does Ada real-time need an underlying operating system?
根据我通过阅读文档了解到的情况,Ada 实时模块的工作完全独立于 OS。没有底层 OS 和资源管理器也可以实现并发。 Ada 处理任务调度、时间管理、任务状态转换、列表管理、任务优先级、锁定策略、调度策略、ISR、任务间通信等。
如果是这样,那么 Ada 实时模块是一种实时操作系统吗?
是也不是。
Ada 程序需要的是它自己的 RTS(运行时系统)- 相当大的代码块(在另一个最近的问题中)膨胀 "Hello World" 到几百千字节。这根本没有反映在 "efficiency" 或 Ada 的其他方面,无论程序大小如何,对于任何重要程序,这都是一次性成本 - 例如涉及并发 - 它与您必须为其他解决方案添加的库竞争。
问题是 - 该运行时系统是如何实现的?如果您在其标准模式下使用标准 off-the-shelf Ada 编译器 (Gnat),您将获得一个 RTS,它在 "pthreads"(Posix 线程)包之上分层 Ada 并发设施以处理底层细节。这显然位于 OS 之上。 Here's a detailed description.
但是还有其他解决方案,可以提供相同的设施,要么使用 RTOS,要么由 Ada RTS 本身在裸机上 CPU,甚至根本不提供(以不并发为代价)如果您的目标是具有 1K 内存的嵌入式微控制器。
您可以通过将 --RTS=path/to/my/rts
选项添加到构建命令(gnatmake 或其他)来为另一个 RTS 构建任何 Ada 程序。
对于工业用途,Adacore 自己提供 commercial support for VXWorks。
有 RTS for embedded ARM CPUs, layered over FreeRTOS or other RT OSes. (Excellent supporting blog here). These may not provide the full Ada tasking facilities, but a selected subset such as the RAVENSCAR profile, which is amenable to small system implementation (such as 12K or so of ARM Thumb code), and formal proof of correctness (RAVENSPARK) 的示例。
由于这些部分是 open source community effort,工作是分散的,可能无法提供您在评论中提到的所有通信协议,但是 Ada 与 C 库的简单接口使得添加 Ada 包装器相对容易缺少组件。我怀疑社区会欢迎更多帮助来覆盖剩余的基地!
有些协议是可用的,但由于很少有人赞扬 Ada,因此它们没有被广泛宣传,可能需要一些挖掘才能找到。例如,这是一个与 MBUS protocol used by some industrial tools. The same author also offers a preliminary version of a libusb binding.
接口的库
如果您对 运行 Ada 的机制感兴趣,它具有最小的 RTS 并且下面没有 OS,"Ada Bare Bones" page on the OSDev Wiki may be interesting. This is for i386 but similar "bare bones" RTS exist for AVR and MSP430 微控制器。
This book looks like another useful resource, with accompanying tutorial material on its own website.
对于更理论化的处理,John McCormick's book "Building parallel, real time and embedded applications in Ada" 很有价值。
还有一个 link:正如您提到的 GUI,我建议您看一下 the Gnoga framework,它是用 Ada 编写的,您的应用程序可以在任何浏览器上提供可查看的网页。
根据我通过阅读文档了解到的情况,Ada 实时模块的工作完全独立于 OS。没有底层 OS 和资源管理器也可以实现并发。 Ada 处理任务调度、时间管理、任务状态转换、列表管理、任务优先级、锁定策略、调度策略、ISR、任务间通信等。
如果是这样,那么 Ada 实时模块是一种实时操作系统吗?
是也不是。
Ada 程序需要的是它自己的 RTS(运行时系统)- 相当大的代码块(在另一个最近的问题中)膨胀 "Hello World" 到几百千字节。这根本没有反映在 "efficiency" 或 Ada 的其他方面,无论程序大小如何,对于任何重要程序,这都是一次性成本 - 例如涉及并发 - 它与您必须为其他解决方案添加的库竞争。
问题是 - 该运行时系统是如何实现的?如果您在其标准模式下使用标准 off-the-shelf Ada 编译器 (Gnat),您将获得一个 RTS,它在 "pthreads"(Posix 线程)包之上分层 Ada 并发设施以处理底层细节。这显然位于 OS 之上。 Here's a detailed description.
但是还有其他解决方案,可以提供相同的设施,要么使用 RTOS,要么由 Ada RTS 本身在裸机上 CPU,甚至根本不提供(以不并发为代价)如果您的目标是具有 1K 内存的嵌入式微控制器。
您可以通过将 --RTS=path/to/my/rts
选项添加到构建命令(gnatmake 或其他)来为另一个 RTS 构建任何 Ada 程序。
对于工业用途,Adacore 自己提供 commercial support for VXWorks。
有 RTS for embedded ARM CPUs, layered over FreeRTOS or other RT OSes. (Excellent supporting blog here). These may not provide the full Ada tasking facilities, but a selected subset such as the RAVENSCAR profile, which is amenable to small system implementation (such as 12K or so of ARM Thumb code), and formal proof of correctness (RAVENSPARK) 的示例。
由于这些部分是 open source community effort,工作是分散的,可能无法提供您在评论中提到的所有通信协议,但是 Ada 与 C 库的简单接口使得添加 Ada 包装器相对容易缺少组件。我怀疑社区会欢迎更多帮助来覆盖剩余的基地!
有些协议是可用的,但由于很少有人赞扬 Ada,因此它们没有被广泛宣传,可能需要一些挖掘才能找到。例如,这是一个与 MBUS protocol used by some industrial tools. The same author also offers a preliminary version of a libusb binding.
接口的库如果您对 运行 Ada 的机制感兴趣,它具有最小的 RTS 并且下面没有 OS,"Ada Bare Bones" page on the OSDev Wiki may be interesting. This is for i386 but similar "bare bones" RTS exist for AVR and MSP430 微控制器。
This book looks like another useful resource, with accompanying tutorial material on its own website.
对于更理论化的处理,John McCormick's book "Building parallel, real time and embedded applications in Ada" 很有价值。
还有一个 link:正如您提到的 GUI,我建议您看一下 the Gnoga framework,它是用 Ada 编写的,您的应用程序可以在任何浏览器上提供可查看的网页。