Ошибка деления на double
От: Lelkin  
Дата: 31.07.09 10:42
Оценка:
Привет коллеги!

Такая проблема. Программа для работы в Xilinx FPGA (Встроенное ПО), процессор Microblaze v5.
Для компиляции используется GNU. Код написан на С.
В главном потоке выполнено деление значения переменной (ну например INT32) на double.
если все прерывания отключены все работает. включаем прерывание от таймера. система падает и не попадая в исключения (exceptions).
причем падает система не сразу а через неопределенный промежуток времени.
если закрыть деление критической секцией — все Ок.

также если заменить double на float все работает нормально.

Какие будут соображения?


06.08.09 13:20: Перенесено модератором из 'Прочее' — Кодт
Re: Ошибка деления на double
От: Lelkin  
Дата: 31.07.09 10:47
Оценка:
L>также если заменить double на float все работает нормально.


при делении на float система падает также как и при делении на double.
Re: Ошибка деления на double
От: VsevolodC Россия  
Дата: 31.07.09 10:56
Оценка:
Здравствуйте, Lelkin, Вы писали:

L>Привет коллеги!


L>Такая проблема. Программа для работы в Xilinx FPGA (Встроенное ПО), процессор Microblaze v5.

L>Для компиляции используется GNU. Код написан на С.
L>В главном потоке выполнено деление значения переменной (ну например INT32) на double.
L>если все прерывания отключены все работает. включаем прерывание от таймера. система падает и не попадая в исключения (exceptions).
L>причем падает система не сразу а через неопределенный промежуток времени.
L>если закрыть деление критической секцией — все Ок.

L>также если заменить double на float все работает нормально.


L>Какие будут соображения?


не знаю специфику этого процессора, но может, не все регистры восстанавливаются после прерывания?
Re[2]: Ошибка деления на double
От: Lelkin  
Дата: 31.07.09 11:27
Оценка:
VC>не знаю специфику этого процессора, но может, не все регистры восстанавливаются после прерывания?

похоже, что система падает при входе в прерывание.
более того, деление может проходить успешно много раз подряд (возможно есть момент времени, когда прерывание встраивается в процесс деления и вызывает сбой). а потом, через неопределенный промежуток времени нормальной работы происходит падение.
причем, как посмотреть регистры процессора я не знаю, ввиду того, что исключения не срабатывают при таком падении.

извечный вопрос: что делать?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.