我正在嵌入式目标中编写 C 语言。由于日益增加的复杂性和可测试性问题,模块化是必须的。
乍一看,程序是一个控制循环。使用内部硬件读取物理输入,应用一些计算,并应用计算输出。然而,控制是相当复杂的,并且具有许多内部状态和变化的变量。
该控件分为不同的模块,捆绑了不同状态的功能。常见的任务/计算在单独的模块中提供,并在不同的模块中调用,以保持自己干燥。对于整个项目的枚举和类型一致性,使用了一个顶级 .H 文件(就我而言,因为继承等 OO 策略在我的框架中不是一个选项)。
在决定如何将变量传入和传出模块时,我的问题就出现了。
我最初的做法是:
mymodule.H:
struct Inputs{
int input1;
...
int inputN;
}
struct Outputs{
int output1;
...
int outputN;
}
void mymodule(Inputs in,Outputs* out);
并且在主函数(或调用此模块的模块)中创建了“输入”和“输出”类型的结构。
然后,将变量复制到 Inputs 结构体,调用函数(引用 Outputs 结构体),一旦完成,该结构体的内容将用于进一步计算。
但是,这会导致占用大量内存,因为每个模块都需要在调用模块中创建 InputType 和 OutputType 的实例。在我看来,这不是一个优雅的解决方案。顺便说一句,我的项目中不允许动态分配。
您能否为我提供一些指导方针和/或替代想法以找到一个好的解决方案?
谢谢你。
添加
解决方案之一可能是将 InputStruct 也作为指针传递,但由于它们是模块的有效输入,我如何确保它们不会在代码中被修改?
添加
顺便说一句,出现的另一个问题是并非所有模块都接收相同的变量,并且没有可用的继承机制(因为这是 C),每个模块的结构都必须加载正确的值。我很迷茫...