如何使用在Modelica中调用的两个C函数之间使用的全局变量?

如何使用在Modelica中调用的两个C函数之间使用的全局变量?,c,function,external,modelica,C,Function,External,Modelica,我在C中有两个函数定义,它们共享一些全局变量。我想在Modelica中调用这些函数,但我不知道如何在两个函数调用之间正确地保持全局变量的值 file.c /*Global variable definition*/ int* global_test1; void FirstFunc (const int* init_value){ memcpy(global_test1, init_value, 2*sizeof(int)); } void SecondFunc(int* some_

我在C中有两个函数定义,它们共享一些全局变量。我想在Modelica中调用这些函数,但我不知道如何在两个函数调用之间正确地保持全局变量的值

file.c

/*Global variable definition*/
int* global_test1;

void FirstFunc (const int* init_value){
   memcpy(global_test1, init_value, 2*sizeof(int));
} 

void SecondFunc(int* some_output_variable){
   memcpy(some_output_variable, global_test1, 2*sizeof(int));
}
调用第一函数mo

function calling_FirstFunc
input Integer[2,1] init_value = [3;3];
 external "C" FirstFunc(init_value);
end; 
function calling_SecondFunc
 output Integer[2,1] output_var;
  external "C" SecondFunc(output_var);
end;
model Calling_TwoFuncs
 Integer[2,1] input_var = [3;5];
 Integer[2,1] output_var;
 equation 
  calling_FirstFunc(input_var);
 when time>5.0 then 
  output_var = calling_SecondFunc();
 end when;
end Calling_TwoFuncs;
调用第二个函数mo

function calling_FirstFunc
input Integer[2,1] init_value = [3;3];
 external "C" FirstFunc(init_value);
end; 
function calling_SecondFunc
 output Integer[2,1] output_var;
  external "C" SecondFunc(output_var);
end;
model Calling_TwoFuncs
 Integer[2,1] input_var = [3;5];
 Integer[2,1] output_var;
 equation 
  calling_FirstFunc(input_var);
 when time>5.0 then 
  output_var = calling_SecondFunc();
 end when;
end Calling_TwoFuncs;
model.mo

function calling_FirstFunc
input Integer[2,1] init_value = [3;3];
 external "C" FirstFunc(init_value);
end; 
function calling_SecondFunc
 output Integer[2,1] output_var;
  external "C" SecondFunc(output_var);
end;
model Calling_TwoFuncs
 Integer[2,1] input_var = [3;5];
 Integer[2,1] output_var;
 equation 
  calling_FirstFunc(input_var);
 when time>5.0 then 
  output_var = calling_SecondFunc();
 end when;
end Calling_TwoFuncs;

您的示例代码应该几乎可以正常工作。如果(且仅当)以
第一次
第二次
的顺序调用C函数,则C函数将保持其状态并正常工作。您还需要为
全局测试1
分配内存。。。但这一顺序在代码中没有得到保证。我建议改用;然后,您可以创建同一模型的多个实例,并且在C代码中没有全局状态(因为您可以malloc memory并为构造函数调用(第一次调用)返回它)。请注意,为了更一般,您可能应该将向量的大小传递给构造函数。

什么是
2*1*sizeof(int)
?我的整数变量init_value是一个大小为2*1的矩阵,我想为全局_test1分配内存,以便能够复制到它。是的,但乘以1是正确的,这是不需要的。编辑了示例代码。谢谢@sjoelund.de您的回答。实际上,我在第一个函数中为全局变量分配了内存,但我忘了粘贴在这里。非常感谢你的建议!我来看看。