MikeM (16.09.2016 01:31, просмотров: 269) ответил my504 на Не могу заставить XC16 компилить с помощью DO и REPEAT. При любой оптимизации циклы for не превращаются в компактную и быструю конструкцию DO/REPEAT
Компилятор может использовать REPEAT только при определенных условиях, поскольку это не прерываемая инструкция. В скомпилированном коде Вы должны быть уверены что регистры не могут быть "испорчены" прерыванием к примеру. Это не так уж гарантировано при использовании DO. Не так просто уследить если "кто-то" еще использует DO и нет механизма сообщить что вы тоже используете DO. К примеру в цикле вы вызываете функцию, в которой также есть цикл. Можете ли вы использовать DO или нет? - ответ: вы не можете однозначно сказать во всех случаях, а значит не можете использовать. Компилятор не будет и не сможет быть "посредником" в разруливании доступа ко всем регистрам которые управляют DO.
Компилятор никогда не будет генерить DO (в её текущей реализации), но компилятор может генерировать REPAT для собственных целей, но никогда не будет генерировать REPEAT как прямое преобразование Вашего кода.