ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
通过使用 MUST_ITERATE pragma,可以保证循环执行一定的次数。下述示例会告知编译器,循环保证可以正好运行 10 次:
#pragma MUST_ITERATE(10,10)
for(i = 0; i < trip_count; i++) { ...
在此示例中,即使没有 pragma,编译器也尝试生成循环。但如果没有为这样的循环指定 MUST_ITERATE,编译器会生成代码绕过循环,以解决可能出现的 0 次迭代。利用 pragma 规范,编译器知道循环至少会迭代一次,可以消除循环绕过代码。
MUST_ITERATE 可用于指定循环计数的范围以及循环计数的系数。下述示例会告知编译器,循环执行 8 次到 48 次之间,trip_count 变量是 8 的倍数(8、16、24、32、40、48)。倍数参数支持编译器展开循环。
#pragma MUST_ITERATE(8, 48, 8)
for(i = 0; i < trip_count; i++) { ...
对于具有复杂边界的循环,应考虑使用 MUST_ITERATE。在下述示例中,编译器不得不生成一个除法函数调用,以便在运行时确定所执行的迭代次数。
for(i2 = ipos[2]; i2 < 40; i2 += 5) { ...
编译器不会执行上述操作。在这种情况下,使用 MUST_ITERATE 指定循环始终执行八次,编译器将尝试生成循环:
#pragma MUST_ITERATE(8, 8)
for(i2 = ipos[2]; i2 < 40; i2 += 5) { ...