小编Nol*_*ola的帖子

如何从 Ada 代码中的链接描述文件访问符号?

我正在使用 GNAT 构建我的 Ada/SPARK 项目,并且使用链接器脚本。以下是摘录:

SECTIONS
{
    .code :
    {
        . = ALIGN(0x4);
        *(.text.section1)
        _end_of_section1 = .;
        *(.text.section2)
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

符号 _end_of_section1 是两个节之间的地址。我希望能够在我的 Ada 代码中访问它。我知道在 C 中使用extern char _end_of_section1[];. 在 Ada 中可以做这样的事情吗?如果没有,是否有其他方法可以在代码中获取该地址?

ada linker-scripts gnat spark-ada

4
推荐指数
1
解决办法
285
查看次数

Ada Gnat 项目,其中包含用于不同构建配置的不同名称的文件

我有一个带有多个构建配置的 Gnat/Gprbuild 项目。我有一个主源文件和一个辅助广告文件,其中主源文件包括:

with Secondary_File; use Secondary_File;
Run Code Online (Sandbox Code Playgroud)

问题是在每个配置中,辅助文件都有不同的名称。例如,一个配置的名称可能为Secondary_File_1.ads,另一配置的名称可能为Secondary_File_2.ads。这使得上面的with语句无法使用。

在C中,我会做这样的事情:

#ifdef BUILD_CFG_1
#include "secondary_file_1.h"
#else
#include "secondary_file_2.h"
#endif
Run Code Online (Sandbox Code Playgroud)

是否有一种聪明的方法可以使用 Gprbuild 系统在 ADA 中执行此类操作?

ada gnat gprbuild

2
推荐指数
3
解决办法
623
查看次数

在不知道其确切内容的情况下初始化记录

我的项目中有一个来自外部团队的源文件,我无法修改它。它包含定义寄存器内容的记录:

type R_Field is (R_FALSE, R_TRUE) with Size => 1;
for R_Field use (R_FALSE => 16#0#, R_TRUE => 16#1#);
type W_Field is (W_FALSE, W_TRUE) with Size => 1;
for W_Field use (W_FALSE => 16#0#, W_TRUE => 16#1#);
type U_Field is (U_FALSE, U_TRUE) with Size => 1;
for U_Field use (U_FALSE => 16#0#, U_TRUE => 16#1#);
type My_Register is record
        R : R_Field;
        W : W_Field;
        U : U_Field;
end record with Size => 32, Object_Size => 32;

for My_Register use …
Run Code Online (Sandbox Code Playgroud)

ada

1
推荐指数
1
解决办法
321
查看次数

标签 统计

ada ×3

gnat ×2

gprbuild ×1

linker-scripts ×1

spark-ada ×1