如何解决如果else语句过多,是否可以在每个循环中“索引”变量逻辑递增1的情况下对其进行优化?
在我的嵌入式系统中, 当系统运行时,永远的while循环将在主循环中调用以下C代码。 有没有更好的方法来优化以下C代码,使其没有 查看所有if else语句。我在想有更好的方法 由于“索引”使每个循环增加1,因此使代码运行更快。 从0开始,递增到7,然后重设为0。 重复模式。
优化的原因是以下代码需要每次运行 几微秒。
以下示例代码: 请注意,其中一些值是伪造的。
void main(1)
{
static int index = 0;
while (1) {
if (index == 0) {
valueA = 0.88;
valueB = 0.88;
PID.A0 = 0.0012 * 15;
PID.A1 = -0.001 * 15;
index++;
}
else if (index == 1) {
valueA = 0.87;
valueB = 0.87;
PID.A0 = 0.0012 * 8;
PID.A1 = -0.001 * 8;
index++;
}
else if (index == 2) {
valueA = 0.86;
valueB = 0.86;
PID.A0 = 0.0012 * 6;
PID.A1 = -0.001 * 6;
index++;
}
else if (index == 3) {
valueA = 0.83;
valueB = 0.83;
PID.A0 = 0.0012 * 5;
PID.A1 = -0.001 * 5;
index++;
}
else if (index == 4) {
valueA = 0.79;
valueB = 0.79;
PID.A0 = 0.0012 * 3;
PID.A1 = -0.001 * 3;
index++;
}
else if (index == 5) {
valueA = 0.73;
valueB = 0.73;
PID.A0 = 0.0012 * 2;
PID.A1 = -0.001 * 2;
index++;
}
else if (index == 6) {
valueA = 0.71;
valueB = 0.71;
PID.A0 = 0.0012 * 1;
PID.A1 = -0.001 * 1;
index++;
}
else if (index == 7) {
valueA = 0.68;
valueB = 0.68;
index = 0;
}
} // end of while()
}
解决方法
您可以使用查找表简化逻辑:
void main(1)
{
static int index = 0;
struct {
double valueA;
double valueB;
double PID_A0;
double PID_A1;
} values[] = {
{ 0.88,0.88,0.0012 * 15,-0.001 * 15 },...
{ 0.68,0.68,0 }
};
while (1) {
valueA = values[index].valueA;
valueB = values[index].valueB;
if (index != 7) {
PID.A0 = values[index].PID_A0;
PID.A1 = values[index].PID_A1;
index++;
} else {
index = 0;
}
}
}
,
我的第一个倾向是查找表,如@dbush的答案中所示,但您也可以选择手动展开循环,从而完全消除条件和 { 1}}变量:
index
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。