【发布时间】:2015-05-27 09:51:48
【问题描述】:
在实时嵌入式设备的实现中,我为每个通道都有一个状态寄存器变量(让我们盲目地假设我的嵌入式设备有多个通道,并且必须为每个通道完成一些工作)。
下面是当前声明状态变量的方式:
struct channel_status status[NCHANNELS];
考虑到性能,最好使用一个中间全局变量,它是所选通道的status 变量的副本。
例子:
struct channel_status status_shadow;
void some_work() {
for(channel = 0; channel < NCHANNELS; channel++) {
status_shadow = status[channel];
foo(); // Function that use the status_shadow as global
bar(); // "
baz(); // "
status[channel] = status_shadow;
}
我不是在讨论实现,也不是在讨论使用指针而不是变量的可能性。我的问题与中间变量的名称有关。
我选择了status_shadow,因为我觉得我在做某种shadowing。
这种中间变量有更好/更准确的技术名称吗?
实施注意事项:
我决定使用这个中间变量的原因是因为将通道指针i或状态变量传递给每个函数foo、bar、baz、.. . 就性能而言,避免堆栈推送/弹出可以在实时应用程序中节省一些宝贵的时间。
【问题讨论】:
-
IMO,你没有遮蔽任何东西。您的方法只是循环法。我建议
status_selected或类似的。 -
我喜欢
status_shadow,很明显你在做什么。一个可能相关的术语是“工作集”,如果它是一组实际的变量,它可能是一个更好的名称。 -
OT:复制
struct也需要时间。这是否很少,然后将指针值推送到堆栈上几次可能是要讨论的主题。 -
current_status, active_status?我在这里看不到阴影。