弗里特斯+;GNAT Ada编译库

弗里特斯+;GNAT Ada编译库,ada,freertos,gnat,Ada,Freertos,Gnat,我有一个运行的ARM CortexA9板和FreeRTOS,我需要添加一个用ADA编写的旧的大型库。我已经成功地生成了库并在代码中实现了它,但是我遇到了一些问题 首先,FreeRTOS允许在以下两种情况下使用什么RTS配置文件 zfp 拉文斯卡大学 拉文斯卡酒店 您建议使用GNAT CE 2019 arm elf编译器编译Ada源代码(-mcpu=cortex-a9可以)&将结果与非Ada代码链接 我不认为您可以使用该编译器附带的AdaCore Ravenscar运行时,因为他们假设自己负责板

我有一个运行的ARM CortexA9板和FreeRTOS,我需要添加一个用ADA编写的旧的大型库。我已经成功地生成了库并在代码中实现了它,但是我遇到了一些问题

首先,FreeRTOS允许在以下两种情况下使用什么RTS配置文件

  • zfp
  • 拉文斯卡大学
  • 拉文斯卡酒店

您建议使用GNAT CE 2019 arm elf编译器编译Ada源代码(
-mcpu=cortex-a9
可以)&将结果与非Ada代码链接

我不认为您可以使用该编译器附带的AdaCore Ravenscar运行时,因为他们假设自己负责板,并运行自己的任务/中断处理代码,而不是FreeRTOS

我一直在维护一个,它支持Ravenscar概要文件,非常像AdaCore
sfp
运行时。我认为根据您的用例调整它不会是一项巨大的工作


另一方面,如果您的Ada代码(以及它所依赖的Ada代码)不涉及任务或依赖于终结或异常,那么您可能不需要太多的运行时支持;
zfp
运行时将作为基础。

感谢Simon的回答。事实上,Ada代码中充满了异常,因此目前编译时唯一没有任何警告的配置文件是Ravenscar_full。是否有可能在ZFP配置文件中使用异常?ZFP允许的唯一异常类型是(a)在引发它们的同一范围内处理的异常,或(b)从未引发的异常。第二类是那些在恶劣条件下提供保护的设备,你要小心确保它们永远不会发生。我使用ravenscar-full-stm32f4在一个非常简单的包上运行了
arm-eabi-gnatbind
,它从RTS调用了很多与任务相关的东西。这是否会停止它的实际运行是另一回事。问题是,处理异常(通常)必须考虑对任务的可能影响,这可能涉及暂停中断;也会影响最终定稿。这使得为编译器/RTS构建器处理PITA异常