Естественно здесь приведен не весь код, а лишь упрощенный фрагмент, показывающий суть проблемы. В main.c естествееноя я не обнуляю переменные на старте, но произвожу с ними (практически со всеми полями структуры DataLbk) минимальные действия, результат - при оптимизации эти строки выбрасываются (компилятор не понимает, что за счет этого ветвится алгоритм в других модулях) при отсутствии в объявлении volatile.
Явное преобразование типов не проходит (хотя не понятно в какой тип преобразовывать, протатип объявлен как: void *memmove(void *s1, const void *s2, size_t n)

Насчет функций memmove(..) и memcpy(..) вопрос заключается в скорости работы этих функция конкретно для IAR, а не в том что они делают (это можно прочитать в help-е)
За участие спасибо!