Если причиной "подвисания" является сработавший watchdog, то можно сделать так:
пристегнуть к проекту файл с функцией int __low_level_init(void);
Она вызывается до инициализации сегментов. В ней запретить собаку, настроить порты и т.п., т.е. сделать предварительную инициализацию.
Шаблон этой функции лежит в папке IAR файл lowinit.c
PS: Про собаку из slau049:
Цитата
Note: Watchdog Timer Powers Up Active
After a PUC, the WDT module is automatically configured in the watchdog
mode with an initial ~32-ms reset interval using the DCOCLK. The user must
setup or halt the WDT prior to the expiration of the initial reset interval.