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) { ...