我要求8到10左右的布尔值需要"锁定"对于不同的循环次数,然后单独重置。每250mS /周期定期调用该代码
行为:
遍历对象,如果对象为高,则将值锁定为其余周期的高值。如果对象剩余周期为0,则将值重置为低。
如果对象值较低,则不对对象起作用。
我的设计方法是创建一个包含以下元素的结构:
struct latchElement
{
bool* value;
int reqCycles;
int currentCycle;
};
所以我创建了一个这些latchElements的数组:
latchElement boolData[8];
现在我必须将这些boolData中的每一个单独分配给个别布尔值。我只是在检查这是否是最佳方法?
我有一个指针,它将被单独分配给每个布尔值:
bool value1 = false;
bool value2 = false;
bool value3 = false;
bool value4 = false;
bool value5 = false;
bool value6 = false;
bool value7 = false;
bool value8 = false;
boolData[0].value = &value1;
boolData[1].value = &value2;
boolData[2].value = &value3;
boolData[3].value = &value4;
boolData[4].value = &value5;
boolData[5].value = &value6;
boolData[6].value = &value7;
boolData[7].value = &value8;
然后我通过一个循环检查值是否为高,如果是,我增加currentCycle,如果它小于ReqCycles。如果该值等于ReqCycles,我将该值设置为false,然后将currentCycle重置为0;
// NOTE: This loop is in a function that is called every 250mS
for(int i = 0; i < 8; i++)
{
if (*(boolData[i].value) == true)
{
if (boolData[i].currentCycle < boolData[i].reqCycles)
{
(boolData[i].currentCycle)++;
cout << *(boolData[i].value) << endl;
}
else
{
// Reset Back
boolData[i].currentCycle = 0;
*(boolData[i].value) = false;
}
}
我认为有没有更好/更简单的方法来做到这一点?