尝试将 C 库包含到 Promela 模型中
Trying to include C libraries into Promela model
首先,我会总结一下我正在工作的项目,以便更容易理解问题(我不习惯用英文写作,对我可能犯的错误表示歉意)。
我一直在研究 Promela 模型,用于使用 LTL 条件为机器人在自然地形上进行路径规划。总之,模型必须从外部文件中读取地图信息(地图可以看作是包含每个单元格高度的二维矩阵),并且根据相邻单元格之间的斜率,机器人是否可以通过某些路径导航.地图的每个单元格都与一个州相关联。
我一直在用一些直接定义到 Promela 模型中的小地图测试模型,并且正确生成了路径。为了测试更大更详细的地图(真实的自然地形图),我需要使用嵌入式 C 代码对文件进行预处理,生成布尔值(1 表示允许的移动,0 表示禁止的移动),这样我就可以将它们分配给 Promela 变量并考虑他们进入零担状态。
当我尝试将所需的 C 库(如 math.h)添加到我的嵌入式代码时出现问题。我尝试使用 c_code
和 c_decl
函数。
(在Init进程中,初始化我工作的地图):
`...
c_code{
#include <math.h>
}`
当我使用 math.h 库并尝试验证我的模型时 (spin -a model_name.pml),我收到此错误:
spin: D:/Documentos/TDM-GCC/x86_64-w64-mingw32/include/vadefs.h:14, Error: malformed preprocessor directive - # .lineno near '#pragma'
我也尝试过使用 \#include
,因为它出现在 Embedded C code in Promela 的文档中,但似乎效果不佳,因为我在 [=43] 的编译过程中遇到错误=] 由于“ \ ”符号验证后。
我尝试将验证后我需要的库手动添加到 pan.c 文件中并且它有效,但对我来说它看起来不是一个好的解决方案。我是否以错误的方式使用了#include 表达式?我可以做些什么来解决这个问题?
如果您对解释有任何疑问,请回答。如果有任何意见,我将不胜感激。
终于,我找到了解决办法。我试图在模型的初始化进程中包含 C 库。这是错误的做法。正确的方法是在 init 进程之前使用 c_code 指令:
... // 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
...
}
...
}
这是我的一个笨拙的错误。我希望这能随时对某人有所帮助。
首先,我会总结一下我正在工作的项目,以便更容易理解问题(我不习惯用英文写作,对我可能犯的错误表示歉意)。
我一直在研究 Promela 模型,用于使用 LTL 条件为机器人在自然地形上进行路径规划。总之,模型必须从外部文件中读取地图信息(地图可以看作是包含每个单元格高度的二维矩阵),并且根据相邻单元格之间的斜率,机器人是否可以通过某些路径导航.地图的每个单元格都与一个州相关联。
我一直在用一些直接定义到 Promela 模型中的小地图测试模型,并且正确生成了路径。为了测试更大更详细的地图(真实的自然地形图),我需要使用嵌入式 C 代码对文件进行预处理,生成布尔值(1 表示允许的移动,0 表示禁止的移动),这样我就可以将它们分配给 Promela 变量并考虑他们进入零担状态。
当我尝试将所需的 C 库(如 math.h)添加到我的嵌入式代码时出现问题。我尝试使用 c_code
和 c_decl
函数。
(在Init进程中,初始化我工作的地图):
`...
c_code{
#include <math.h>
}`
当我使用 math.h 库并尝试验证我的模型时 (spin -a model_name.pml),我收到此错误:
spin: D:/Documentos/TDM-GCC/x86_64-w64-mingw32/include/vadefs.h:14, Error: malformed preprocessor directive - # .lineno near '#pragma'
我也尝试过使用 \#include
,因为它出现在 Embedded C code in Promela 的文档中,但似乎效果不佳,因为我在 [=43] 的编译过程中遇到错误=] 由于“ \ ”符号验证后。
我尝试将验证后我需要的库手动添加到 pan.c 文件中并且它有效,但对我来说它看起来不是一个好的解决方案。我是否以错误的方式使用了#include 表达式?我可以做些什么来解决这个问题?
如果您对解释有任何疑问,请回答。如果有任何意见,我将不胜感激。
终于,我找到了解决办法。我试图在模型的初始化进程中包含 C 库。这是错误的做法。正确的方法是在 init 进程之前使用 c_code 指令:
... // 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
...
}
...
}
这是我的一个笨拙的错误。我希望这能随时对某人有所帮助。