10

Ada 有哪些 RTOS 提供开源/免费的交叉编译器,支持多任务/多线程?

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

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

谢谢。

4

4 回答 4

7

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

另一种选择是MarteOS,它支持 Ada。但是,对体系结构的支持非常有限(最初仅限 x86)。

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

  1. 继续使用 AVR,并为 Ada 编写自己的运行时支持任务;
  2. 重新考虑是否真的需要任务的运行时支持;或者
  3. 将您的架构升级到支持 Ada 的 RTOS 支持的架构。

(我在 2004-2005 年左右首次将 RTEMS 与 GNAT Ada 一起用于基于 ARM9TDMI 内核的专有项目。)

于 2011-10-25T13:29:53.563 回答
7

我是最初的 RTEMS 开发人员之一,并且是 RTEMS 项目的负责人,因为它从陆军研究计划转变为传统的自由软件项目。我们非常努力地将 RTEMS 保持为具有良好社区的高质量产品。

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

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

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

Marc C.. 因为你在亨茨维尔,我们有时不得不聚在一起吃午饭。我们的办公室大致在桥街对面。我真的没有遇到很多 RTEMS 用户。:(

于 2012-02-09T21:21:24.330 回答
6

好吧,我所知道的唯一一个自由软件的 Ada 编译器是 Gnat。因此,这将您的问题简化为“Gnat 支持哪些 RTOS 的任务?”

ACT 在此处保留了支持平台的列表。右侧的列看起来主要是 RTOS 或伪 RTOS。FreeRTOS 和 uC/OS-II 似乎不在列表中。

我确实注意到他们列表底部的“裸板”下有一个条目,上面写着“AVR 微控制器 ELF 格式(托管在 Windows 上)”。这可能是您正在寻找的。但是,我想说他们的裸板端口也很有可能不支持任务。事实上,仔细想想,这可能是 ACT 对 AVR-Ada 的名称。您必须与ACT检查。

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

于 2011-10-25T13:04:01.693 回答
3

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

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

此外,我们真的很喜欢有一个 BSP 可以在每个目标架构的免费模拟器上运行。SimulAVR 是我在积极开发端口时使用的。AdaCore 使用了一种叫做 avrtest 的东西,但它更加有限——有用但有限。

于 2012-02-13T22:28:26.720 回答