Самый легкий способ. Неинвазивный, в программу вмешиваться не надо. 1. Выводим аппаратный пин SWO (введенный в архитектуру ARM) на отладчик.
2. Включаем SWO в настройках отладчика и настраиваем частоты обмена SWO Clock.
(Включение SWO со стороны микроконтроллера, настройку скоростей производит обычно отладчик записью в регистры ARM блока отладки ETM Instruction Trace).
3. После этого будет доступно окно, управляющее регистрами отладочного блока.
4. Отмечаем галочкой "PC" и указываем PC Sampling и Prescaler'ом периодичность отсылки пакетов содержащих текущий выполняемый в программе адрес (мгновенный снимок PC, "PC Sample").
5. После этого заработают окна, скажем Performance Analyzer. Зная адреса и зная .elf/.map IDE вычисляет в какой именно функции чаще всего находится процессор. Это будет показано в виде дерева функций и статистики где процессор проводит больше всего времени. Надо дать программе поработать некоторое время чтобы собрать статистику.