尝试将C库包含到Promela模型中

尝试将C库包含到Promela模型中,c,pragma,promela,spin,C,Pragma,Promela,Spin,首先,我将总结我工作的项目,以便更容易理解问题(我不习惯用英语写作,为我可能犯的错误感到抱歉) 我一直在为使用LTL条件的机器人在自然地形上的路径规划开发Promela模型。总之,模型必须从外部文件中读取地图信息(地图可以被视为包含每个单元高度的2D矩阵),并且取决于相邻单元之间的坡度,机器人可以通过或不通过某些路径导航。映射的每个单元格都与一个状态关联 我已经用一些直接定义到Promela模型中的微小映射测试了该模型,并且正确地生成了路径。为了测试更大更详细的地图(真实的自然地形图),我需要使

首先,我将总结我工作的项目,以便更容易理解问题(我不习惯用英语写作,为我可能犯的错误感到抱歉)

我一直在为使用LTL条件的机器人在自然地形上的路径规划开发Promela模型。总之,模型必须从外部文件中读取地图信息(地图可以被视为包含每个单元高度的2D矩阵),并且取决于相邻单元之间的坡度,机器人可以通过或不通过某些路径导航。映射的每个单元格都与一个状态关联

我已经用一些直接定义到Promela模型中的微小映射测试了该模型,并且正确地生成了路径。为了测试更大更详细的地图(真实的自然地形图),我需要使用嵌入式C代码对文件进行预处理,生成布尔值(允许移动1,禁止动作0),这样我就可以将它们分配给PROMELA变量,并将它们考虑到LTL条件中。 当我尝试将所需的C库(如math.h)添加到嵌入式代码时,问题就出现了。我尝试使用
c_code
c_decl
函数

(在Init过程中,初始化我工作的映射):

我也尝试过使用
\\35; include
,如的文档中所示,但似乎效果不好,因为在验证后编译pan.c时由于“\”符号而出错

我尝试在验证后手动将所需的库添加到pan.c文件中,结果成功了,但对我来说,这似乎不是一个好的解决方案。我是否使用了#include表达式?我能做些什么来解决这个问题


如果你对解释有任何疑问,请回答。我将非常感谢您的评论。

最后,我找到了解决方案。我试图在模型的初始化过程中包含C库。这样做是错误的。正确的方法是在初始化进程之前使用c_代码指令:

... // After other proctypes created

c_code{
  \#include <math.h>
}

/* INIT PROCESS */
init{

 // Variables needed in the model:
 int dataPromela;

 // Embedded C code needed:
 c_code{ //C variables declaration, math operations, etc
   ...
 }
...

}
..//在创建其他ProcType之后
c_码{
\#包括
}
/*初始化过程*/
初始化{
//模型中需要的变量:
int dataPromela;
//需要嵌入式C代码:
c_代码{//c变量声明、数学运算等
...
}
...
}

那是我犯的一个笨拙的错误。我希望这对任何人都有帮助。

显然你的
#include
已被考虑在内,但问题在于
#pragma
不是由Promela管理的,而是由math直接包含在文件vadefs.h中。他已经尝试包含我需要的其他库,如stdint.h或string.h,有和数学一样的问题。也许我应该改变我正在使用的编译器?或者它与此无关?
spin: D:/Documentos/TDM-GCC/x86_64-w64-mingw32/include/vadefs.h:14, Error: malformed preprocessor directive - # .lineno near '#pragma'
... // After other proctypes created

c_code{
  \#include <math.h>
}

/* INIT PROCESS */
init{

 // Variables needed in the model:
 int dataPromela;

 // Embedded C code needed:
 c_code{ //C variables declaration, math operations, etc
   ...
 }
...

}