我正在编写一些代码,主要是为工业自动化设备执行设置操作。执行的设置基本上是在设备上单独设置成千上万个参数。
您可以将大部分代码视为一组例程,如下所示:
foo_set_x{
foo_param_1 = 1
foo_param_2 = 2
….
}
注意:以上是一个极其简化的例子
随着新项目的出现,一些参数会发生变化,而另一些则不会。因此,当客户使用此设置实用程序时,他们会回答有关使用哪个参数规范的问题。
现在一些例程变成这样:
foo_set_x{
IF param_spec_1 {
foo_param_1 = 1
….
}
IF param_spec_2 {
foo_param_1 = 2
….
}
}
一些例程变成这样:
foo_set_y{
IF param_spec_1 OR param_spec_2 {
foo_param_1 = 1
foo_param_2 = 2
….
}
}
因此,每次出现新的参数规范时,我都必须更改数百个例程中的代码以支持新规范。对我来说,这似乎不是解决这个问题的明智方法。
我能想到的唯一解决方案是为每个参数创建变量。然后我所有的例程都将参数设置为变量。不需要 IF 或 CASE 语句。
问题是,我没有骗你,将近 5,000 个不同的参数。由于我使用的是一种相当有限且原始的语言(不是 OOP,而是基于 C),因此每个变量都必须是全局的,并且会占用大量宝贵的空间。我什至无法理解如何创建包含大约 5,000 个变量的智能变量列表(减去结构或数组中有意义的变量)。
谢谢大家。
附言请随时编辑或建议更好的标签。我有点迷路了。
最佳答案
我会考虑两种方法:
一种是数据驱动方法,其中每个 param_spec 都有一个包含所有适当变量的结构(或数组)。你说这会占用很多空间,但它只能消耗代码(= ROM)空间,因为你的结构可以是常量。而且,作为交换,您可能会节省大量代码空间。
foo_set_x{
foo_param_1 = param_specs[spec_index].foo_param_1;
}
另一种方法是伪 OO 方法。请记住,真正的程序员可以用任何语言编写 OO 代码!每个参数规范都为我们的每个 foo_set_xyzzy 例程定义了它自己的函数,然后 foo_set_x 只调用正确的函数。这样做的好处是可以将特定参数集的所有更改保存在一个地方。
ps1_foo_set_x() { foo_param_1 = 1; }
ps2_foo_set_x() { foo_param_1 = 2; }
void (*foo_set_x)(void);
void select_ps1 { foo_set_x = ps1_foo_set_x; }
void select_ps2 { foo_set_x = ps2_foo_set_x; }
...
foo_set_x();
关于c - 处理数千个参数的参数设置操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764612/