Ada多任务实时操作系统支持开源交叉编译器。

9
哪些实时操作系统有Ada开源/免费交叉编译器,并支持多任务/多线程?
我有一个Atmel AT90USB162芯片,想要使用Ada进行编程。我的第一个选择是使用AVR-Ada来编程,但由于它不支持任务处理,所以这个选项被排除了(目前我也不知道如何使其支持任务处理)。因此,我需要更强大的方法。我考虑使用QNX,但它比我的芯片复杂得多。
我获悉AVR芯片支持uC/OS-II和FreeRTOS。是否有针对FreeRTOS或uC/OS-II的免费Ada交叉编译器?
谢谢。
4个回答

7

RTEMS支持GNAT,至少对于一些体系结构是这样的。然而,由于架构约束(主要是可用内存),可能不支持Atmel AVR架构。RTEMS非常成熟(在Linux出现之前就是开源的),并且在许多项目中被证明非常易用。

另一个选择是MarteOS,它支持Ada。然而,架构的支持非常有限(最初只支持x86)。

因此,根据您的项目约束,您最有可能有三个选择:

  1. 保留AVR,并编写自己的运行时以支持Ada任务;
  2. 重新考虑是否真正需要任务运行时支持;或者
  3. 升级到受支持Ada实时操作系统的体系结构。

(我最初在2004-2005年左右基于ARM9TDMI核心的专有项目中使用了RTEMS和GNAT Ada。)


1
嗨,Schedler。我查看了RTEMS的README.configure文档,发现AVR也受支持。所以我现在会更详细地阅读文档,但我猜这对于我的项目非常有前途。谢谢。 - Rego
开发RTEMS的OAR公司所在的办公套房就在我现在工作的楼旁边。每天午餐时,我会在公园里散步,并经过那个大大的OAR标志。 - Marc C
@MarcC - 没有它们你可别落得孤掌难鸣!;-) - T.E.D.
RTEMS看起来非常强大,自1988年至2011年一直得到更新。 - Rego

6
好的,我所知道唯一的自由软件Ada编译器是Gnat。因此,您的问题就变成了“Gnat支持哪些RTOS和任务?”ACT在这里列出了受支持平台的列表。右侧的列看起来大多是RTOS或伪RTOS。FreeRTOS和uC/OS-II似乎不在列表中。我注意到在他们的列表底部,在“裸机”下有一个条目,写着“AVR微控制器ELF格式(托管在Windows上)”。那可能是你要找的。但是,我会说他们的裸板端口很可能也不支持任务处理。事实上,考虑一下,那可能是ACT对AVR-Ada的命名。您需要与ACT确认。此外,应该注意的是,对于许多更为奇特的gcc目标,“免费”的二进制文件非常难找到。这意味着您可能被迫从源代码构建编译器(这甚至不是轻松的事情),或者实际上购买ACT的支持包才能获得它。

6
我是RTEMS的原始开发人员之一,自从它从军事研究计划转变为传统免费软件项目以来一直担任RTEMS项目负责人。我们非常努力地让RTEMS成为一个高质量的产品,并建立了一个伟大的社区。
AVR是一个相当小的目标,而RTEMS端口是不完整的。即使RTEMS端口是完整的,我认为没有一个AVR具有足够的地址空间来支持GNAT/RTEMS。正如在GNU/Linux上一样,GNAT将每个Ada任务映射到一个POSIX线程,并且“真正的Ada”环境的运行时占用空间很大。我记得在PowerPC上,最小的可执行文件代码范围为400K左右。相比之下,在相同的目标上,RTEMS最小的C可执行文件可能在32-40k范围内。
我并不太熟悉AVR-Ada,但我同意它几乎不可能给你一个完整的Ada环境。
RTEMS项目有脚本,我们用这些脚本来构建GNU工具并对其进行测试。如果您有兴趣为自己的奇怪目标构建工具,它们可以是一个很好的指南。嵌入式目标的过程并没有太大的变化。
Marc C.,既然你在亨茨维尔,我们有时候要一起吃午饭。我们的办公室大致位于桥街对面。我真的很少见到许多RTEMS用户。 :(

非常感谢您的回复,@。我已经查看了RTEMS文档,当@Schedler提到它时(那时我还不知道RTEMS),尽管没有完整的端口,但我发现即使有所有限制,将其与AVR一起使用也非常有趣。至少对于学习目的而言是如此。与某些Power PC或SPARC架构相比,大多数AVR芯片非常有限。我在VxWorks上开发了一些Power PC应用程序,它们具有完全不同的编程范例。 - Rego
但是AVR用户通常习惯于这些限制,使用它的应用程序通常不需要深入的实时约束条件。在RTEMS文档RTEMS CPU Architecture Supplement中,我发现了一些有趣的功能可以与AVR一起使用,因此我建议我的一些研究生尝试使用RTEMS实现一些AVR上的功能作为一个挑战。 - Rego
AVR-Ada是一个非常棒的开源项目,但现在它还不完整。如果可以的话,我会选择使用它,因为它的实现方式非常直观。目标是为一些微控制器实现一个8位窗口交叉编译器,但它仍然缺少一些好的Ada特性,这些特性是使用Ada的好品味。例如,它不支持任务处理和异常处理。看起来今年还会有一个新版本发布,但不幸的是,当前的状态无法用于抢占式应用程序。我希望下一个版本能解决这个问题。 - Rego

3
我们希望看到AVR端口变得更加完整!鼓励您的学生加入我们的开发邮件列表并提问。
RTEMS与VxWorks处于相同的RTOS类别。这使得它具有丰富的功能集,但需要在较小的8位和(一些)16位CPU上进行裁剪。我们的挑战在于确定一个“Tiny/RTEMS”功能配置文件。RTEMS确实非常可扩展,但当您不知道该类CPU上哪个功能集是有意义的时,就没有了具体的目标。请帮助定义用户需求和目标。
此外,我们真的很想为每个目标架构运行在免费模拟器上的BSP。SimulAVR是我在积极开发端口时使用的工具。AdaCore使用了一种称为avrtest的工具,但它更受限制--有用但受限。

谢谢。我会建议他们加入列表。我想这对他们来说是一个很好的学习机会。 - Rego

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接