реклама на сайте
подробности

 
 
> Обработка ошибок с плавающей запятой, Прошу совета!!!
Diver_ant
сообщение Dec 22 2008, 10:20
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 9-02-07
Пользователь №: 25 200



Подскажите пожалуйста, как правильно обрабатывать ошибки с плавающей запятой, такие как деление на ноль например? Как можно проверить является ли данный участок памяти действиетльно валидным флоатом? Есть ли возможность обрабатывать подобные ошибки через прерывания?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Dec 22 2008, 15:20
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Diver_ant @ Dec 22 2008, 12:20) *
как правильно обрабатывать ошибки с плавающей запятой, такие как деление на ноль например?

Зависит от вашей конкретной ситуации.
Главное не применять "==" к флоат.

Цитата
Есть ли возможность обрабатывать подобные ошибки через прерывания?

Всегда можно инициировать исключение, например DataAbort и соотв. его обработать...

Пишем прототип для этого дела
Код
extern void raise_exception( U32 code);

оформляем asm функайку:
Код
DeadBeef EQU 0xDEADBEEF

raise_exception:
LDR     R1, =DeadBeef
LDR     R1, [R1]
MOV     pc, lr


В DAbt обработчике смотреть код исключения в R0, если R1 == 0xDEADBEEF..
Go to the top of the page
 
+Quote Post
Diver_ant
сообщение Dec 23 2008, 10:15
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 9-02-07
Пользователь №: 25 200



Цитата(defunct @ Dec 22 2008, 18:20) *
Зависит от вашей конкретной ситуации.
Главное не применять "==" к флоат.
Всегда можно инициировать исключение, например DataAbort и соотв. его обработать...

Пишем прототип для этого дела
Код
extern void raise_exception( U32 code);

оформляем asm функайку:
Код
DeadBeef EQU 0xDEADBEEF

raise_exception:
LDR     R1, =DeadBeef
LDR     R1, [R1]
MOV     pc, lr


В DAbt обработчике смотреть код исключения в R0, если R1 == 0xDEADBEEF..


Есть вопрос? DataAbort в каком случае генерируется? В случае ошибки с плавающей запятой разве?
Понимание пока отсутствует. Можете обяснить подробнее желательно с наглядными кусками кода?


Цитата(scifi @ Dec 22 2008, 20:46) *
Посмотрите файлы math.h и fenv.h, там много интересного.


Пожалуйста ткните пальцем куда в файл math.h нужно посмотреть чтобы разрешить тему с определнием ошибок с плавающей запятой или определения на валидность значений флоат-типа.

Заголовочный файл fenv.h у меня присутствует в библиотеки quartusa. Чем он может помочь в моем случае?
Буду признателен за помощь, потому как в голове некоторое не понимание или скорее всего полное не понимание как подобную проблему можно решить на ARM.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 16:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01366 секунд с 7
ELECTRONIX ©2004-2016