QUOTE (D!m@ @ Jul 19 2012, 10:36)

поменял TRACE_LEVEL на 0 стало все на свое место.
То есть вместо того, чтобы исправить потенциально неправильный код, из-за которого выдавалось предупреждение, вы отключили предупреждение. Радикально. Главное, что "заработало".
QUOTE (D!m@ @ Jul 19 2012, 11:58)

Ну это да. Так почему под дебагом проходило?
Не знаю как в новом, а в старом ИАРе в настройках линкера можно было указать "линковать with debug i/o modules", при этом вместо putchar подлинковывались функция, представлявшая из себя пустой цикл. В этот цикл отладчик ставил свою скрытую точку останова, при попадании в нее считывал из регистра параметра выводимый символ, печатал его в окно "I/O console" или подобное и прегружал в PC адрес следующей за циклом инструкции. Возможно у вас та же ситуация и ваш проц просто ждет, пока отладчик заберет у него выводимый символ.
P.S. А исходное предупреждение все же победите. Неспроста оно.