Проект для Microblaze, к шине PLB подключен контроллер прерываний - XIntc. Код приложения - на C++, BSP - standalone.
Не могу понять, чем вызвано следующее поведение:
РАБОТАЕТ:
1. В коде main.cpp создаю объект XIntc, делаю XIntc_Initialize, затем XIntc_Start(XIN_REAL_MODE).
Обе операции отрабатывают со статусом XST_SUCCESS.
2. Кнопкой делаю сброс системы. В начале кода main.cpp сделан хак, описанный в http://www.xilinx.com/support/answers/30878.htm по способу 2.
Вместе с хаком обе операции из п.1 отрабатывают с XST_SUCCESS.
НЕ РАБОТАЕТ:
1. Рефакторю код - выношу XIntc как член нового класса Application (application.h/application.cpp).
2. Добавляю операции из п.1 "РАБОТАЕТ" в файл application.cpp. При выполнении - XIntc_Initialize (или XIntc_Start) первый раз выполняются нормально, а после сброса - падают со статусом XST_DEVICE_IS_STARTED.
3. Добавление хака из п.2 "РАБОТАЕТ" - не влияет на поведение предыдущего пункта.
В чем проблема? XIntc нельзя безболезненно использовать, если хранить объект где-то кроме стека?