开源交叉编译器支持Ada多任务RTOS

时间:2011-10-25 11:55:57

标签: cross-compiling ada avr rtos rtems

Ada有哪些RTOS可以使用开源/免费交叉编译器,支持多任务/多线程?

我有一个Atmel AT90USB162芯片,我想用Ada编程。我的第一个选择是使用AVR-Ada对其进行编程,但由于它没有任务支持,因此它是不可选择的(现在我对如何支持其任务转移没有任何线索)。所以我需要一个更强大的方法。我想过使用QNX,但它比我的芯片架还要复杂得多。

我得到了AVR芯片支持uC / OS-II和FreeRTOS的信息。 FreeRTOS或uC / OS-II有免费的Ada交叉编译器吗?

感谢。

4 个答案:

答案 0 :(得分:6)

嗯,我所知道的唯一的Ada编译器是Free Software就是Gnat。这样就可以将你的问题简化为“Gnat支持任务的RTOS格式吗?”

ACT保留supported platforms here的列表。右侧的列看起来主要是RTOS或伪RTOS。 FreeRTOS和uC / OS-II似乎不在列表中。

我注意到他们列表底部的“裸板”下面是“AVR微控制器ELF格式(托管在Windows上)”的条目。这可能就是你要找的东西。但是,我会说他们的裸板端口很可能也不支持任务。事实上,考虑到这一点,这可能是ACT的AVR-Ada名称。你必须检查ACT。

另外,应该注意的是,很难找到许多更深奥的gcc目标的“免费”二进制文件。这意味着您可能被迫自己从源代码构建编译器(对于胆小的人来说甚至是远程构建编译器),或者实际上从ACT购买支持包以获得它。

答案 1 :(得分:6)

RTEMS至少对某些架构支持GNAT。但是,由于您提到了Atmel AVR架构,由于架构限制(主要是可用内存),可能不支持此功能。 RTEMS非常成熟(在Linux发明之前它是开源的),并且已被证明在许多项目中非常有用。

另一个选项是MarteOS,它在Ada支持。但是,架构的支持非常有限(最初仅限x86)。

因此,根据您的项目限制,您可能有三种选择:

  1. 继续使用AVR,编写自己的运行时支持Ada的任务;
  2. 重新考虑是否真的需要运行时支持任务;或
  3. 将您的架构升级到支持Ada的RTOS支持的架构。
  4. (我在2004-2005左右首次将RTEMS与GNAT Ada一起用于基于ARM9TDMI核心的专有项目。)

答案 2 :(得分:6)

我是最初的RTEMS开发人员之一,自从陆军研究计划转变为传统的自由软件项目以来一直是RTEMS项目的领导者。 我们非常努力地将RTEMS作为一个高质量的产品与一个伟大的社区保持一致。

AVR是一个非常小的目标,RTEMS端口不完整。即使RTEMS端口完成,我也不认为AVR具有足够的地址空间来支持GNAT / RTEMS。 GNAT将每个Ada任务映射到POSIX线程,就像在GNU / Linux上一样,并且“真正的Ada”环境的运行时足迹很大。我记得PowerPC上400K代码范围内的最小可执行文件。相比之下,RTEMS最小C可执行文件可能在同一目标上的32-40k范围内。

我对AVR-Ada并不熟悉,但我同意,它不太可能给你一个完整的Ada环境。

RTEMS项目有脚本,我们用它来构建GNU工具并测试它们。如果您有兴趣为自己的奇怪目标构建工具,那么它们可以成为一个很好的指南。对于嵌入式目标,该过程并没有太大的变化。

Marc C ..因为你在亨茨维尔,我们有时必须聚在一起共进午餐。我们的办公室大致在Bridge Street对面。我真的无法满足许多RTEMS用户。 :(

答案 3 :(得分:3)

我们希望看到AVR端口变得更加完整!鼓励学生加入我们的开发邮件列表并提出问题。

RTEMS与VxWorks属于同一类RTOS。这使它具有丰富的功能集,必须进行修整以适应较小的8位(和某些)16位CPU。我们面临的挑战是确定一个“Tiny / RTEMS”功能配置文件。 RTEMS非常具有可扩展性,但是当您不知道哪个功能集在该类CPU上有意义时,它就没有具体的目标。请帮助定义用户要求和目标。

另外,我们真的希望在每个目标架构的免费模拟器上运行BSP。当我积极地在港口工作时,我正在使用SimulAVR。 AdaCore使用了一种名为avrtest的东西,但它更有限 - 有用但有限。