Cal*_*nes 5 c++ arduino arduino-uno
我有2段代码,它们执行的功能完全相同,但是实际上并没有用。谁能解释为什么?
该代码通过spi将数据发送到运行显示器的FPGA。我几乎没有足够的代码存储在芯片上,因此我正在尝试尽可能地减少代码。下面的更改由于某种原因而最终中断,该程序的其余部分与之完全相同。
//Looping to execute code twice doesnt work
for (byte i = 0; i < 3; i++)
{
temp2 = temp % 10;
temp /= 10;
temp2 |= 0x40;
for (byte k = 0; k < 2; k++)
{
SPI.transfer(reg[j]);
delayMicroseconds(10);
SPI.transfer(temp2);
delayMicroseconds(10);
}
reg[j] -= 1;
}
Run Code Online (Sandbox Code Playgroud)
。
//But copy-paste does
for (int i = 0; i < 3; i++)
{
temp2 = temp % 10;
temp /= 10;
temp2 |= 0x40;
SPI.transfer(reg[j]);
delayMicroseconds(10);
SPI.transfer(temp2);
delayMicroseconds(10);
SPI.transfer(reg[j]);
delayMicroseconds(10);
SPI.transfer(temp2);
delayMicroseconds(10);
reg[j] -= 1;
}
Run Code Online (Sandbox Code Playgroud)
最可能的解释是,其他一些代码依赖于该循环满足特定的时序约束,如果不满足则失败。
您引入的可能影响时间安排的更改包括:
i为 typebyte而不是int. 这可能会影响计时 -int通常是“本机”类型,通过各种措施可以提高操作效率。使用 a 可能byte会改变外循环的时序。例如,如果byte是比 an 更小的类型int,则对字节的操作可能涉及与int) 之间的转换。k、在每次迭代时检查和递增变量等)可能会影响代码的计时。如果对满足特定时间限制的代码有一定的依赖,则需要在某处记录。如果需求没有记录下来,我建议您将其记录下来(例如,将其作为特定需求输入),然后记录派生需求(例如,用于int控制外循环的一个需求[如果需要],以及内部循环的另一个需求)。循环在代码中展开,而不是依赖编译器优化)。