c – 功能相同的代码,不同的结果
我有两段代码,完全相同,但实际上并没有.有谁能解释为什么?
代码通过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; } . //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; } 解决方法
最可能的解释是,其他一些代码依赖于满足特定时序约束的循环,如果不满足则失败.
您引入的可能影响时间安排的变化包括: >将i更改为byte类型而不是int类型.这可能会影响计时 – int通常是“本机”类型,通过各种措施可以使操作更有效.使用字节可能会改变外部循环的时序.例如,如果byte是比int小的类型,则对字节的操作可能涉及到int的转换和从int转换. 如果对符合特定时序约束的代码有所依赖,则需要在某处记录.如果没有记录要求,我建议你记录它(例如输入它作为特定要求),然后记录派生的要求(例如,一个要求使用int来控制外部循环[如果需要],另一个要求是内循环在代码中展开而不是依赖于编译器优化). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |