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

How can I use global variables used between two C function which are called in 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_output_variable){
   memcpy(some_output_variable, global_test1, 2*sizeof(int));
}

calling_FirstFunc.mo

function calling_FirstFunc
input Integer[2,1] init_value = [3;3];
 external "C" FirstFunc(init_value);
end; 

calling_SecondFunc.mo

function calling_SecondFunc
 output Integer[2,1] output_var;
  external "C" SecondFunc(output_var);
end;

model.mo

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;

您的示例代码应该几乎可以正常工作。如果(且仅当)按 FirstSecond 的顺序调用 C-functions 时,C-functions 将保持其状态并正常工作。您还需要为global_test1分配内存...但是代码中不能保证这个顺序。我建议改用 external objects;那么您可以创建同一模型的多个实例,并且在 C-code 中没有全局状态(因为您可以 malloc 内存和 return this 用于构造函数调用;第一次调用)。请注意,为了更通用,您可能应该将向量的大小传递给构造函数。