Всем привет.
Делаю первые шаги в освоении АРМ-ов. Стоит задача сделать DDS (синтезатор сигналов, до 400кГц, тональные, ЛЧМ). Решил реализовать на этом камне. Всё работает, но! Тот участок кода, к-й и реализует алгоритм DDS (инкремент аккумулятора фазы, выборка значения из таблицы формы сигнала, запись в регистр ЦАП-а) в симуляторе исполняется с абсолютно детерминированным количеством тактов (13), а в реальной железке меняется от 13 до 16 от прошивки к прошивке, причём эти прошивки отличаются в участках кода, не имеющих никакого отношения к основному алгоритму.....

Это происходит даже после единственного изменения в исходном коде - изменения начального значения некой переменной в некой процедуре инициализации с одной цифры на другую. Обратил внимание, что при этом ничтожном изменении, содержимое выходного файла прошивки меняется радикально.
DMA, прерывания не использую.
Оптимизации кода выключены, код DDS написан на ассемблере, отдельным модулем! Весь алгоритм основан на точном значении количества тактов кода DDS, а у меня он живёт своей жизнью... Keil 4.14.
Прошу поделиться советами и прочими соображениями!