OberonCore https://forum.oberoncore.ru/ |
|
BlackBox и MATLAB. Проблемы с исп. REAL. Компилятор? https://forum.oberoncore.ru/viewtopic.php?f=2&t=3226 |
Страница 1 из 1 |
Автор: | ScrollLock [ Понедельник, 31 Январь, 2011 02:23 ] | ||
Заголовок сообщения: | BlackBox и MATLAB. Проблемы с исп. REAL. Компилятор? | ||
В ходе отладки примеров использования программ на Обероне наткнулся на генерацию исключения (MATLAB сообщает об ошибке и выдаёт отладочный дамп) при попытке начать работу с числами типа REAL (они же double, они же 64-битные). Сначала думал, что это из-за указателей, но это не подтвердилось Код выглядит так: Код: MODULE mexBugReport; IMPORT mexfile, libmx, mexout; PROCEDURE mexFunction_safe( varargout: POINTER TO ARRAY OF libmx.mxArray; varargin: POINTER TO ARRAY OF libmx.mxArray ); VAR i, classid: INTEGER; x: REAL; BEGIN x:= 1; mexout.String("Hello, World!"); mexout.Ln(); END mexFunction_safe; BEGIN (* Initialize callbacks *) mexfile.mexFunction_safe:= mexFunction_safe; END mexBugReport. DevLinker.LinkDll mexBug.mexw32 := National Kernel+ mexout mexfile # mexBugReport # ~ Если строку x:=1 закомментировать, то исключение не генерируется. С помощью HIEWа и OllyDbg а выяснилось, что ошибка генерируется на фрагменте кода вида (Invalid Floating Point operation). По адресам видно, что это явно не ошибка с указателем Код: PUSH 033Eh FLDCW [ESP] Исключение "видят" как MATLAB, так и OllyDbg, который я приAttachивал к процессу MATLAB.exe и ставил брейкпоинты внутрь mex-файла в памяти Система Windows XP Home Edition SP3, MATLAB R2010b, BlackBox Сборка 2010.09.20 для проекта Информатика-21. P.S. Что это такое? Может ли это быть недоработкой в самом компиляторе или это нечто иное? P.P.S. Хотя в примере mexExample2 во вложении есть работа с типом REAL, но оно там получается преобразованием из INTEGER, и ассемблерных команд, приведенных выше, там нет. И пример mexExample2 работает.
|
Автор: | Info21 [ Понедельник, 31 Январь, 2011 02:57 ] |
Заголовок сообщения: | Re: Необычное поведение компилятора |
ScrollLock писал(а): Если строку x:=1 закомментировать, то исключение не генерируется. Может, это какие-то флажки в FPU?... P.S. Что это такое? Может ли это быть недоработкой в самом компиляторе или это нечто иное? P.P.S. Хотя в примере mexExample2 во вложении есть работа с типом REAL, но оно там получается преобразованием из INTEGER, и ассемблерных команд, приведенных выше, там нет. И пример mexExample2 работает. Надо понимать, это обходится чем-то вроде CONST n=1; .... x := n; ? |
Автор: | Евгений Темиргалеев [ Понедельник, 31 Январь, 2011 09:50 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB. Проблемы с исп. REAL? |
Вы бы, того, этого, если без подсистемы делаете, то хотя бы именуйте документ с модулем так же как модуль. Пришлось все файлы протыкивать, чтобы найти MODULE mexfile. И нельзя ли Вас попросить выделять экспортируемые сущности жирным (по ББ-м соглашениям)... уж глаз привык а ещё лучше подсистему организовать, как положено, чтобы Ctrl+0 работало, Info->Source и пр... |
Автор: | Евгений Темиргалеев [ Понедельник, 31 Январь, 2011 10:19 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB. Проблемы с исп. REAL. Компилятор? |
FLDCW (http://siyobik.info/index.php?module=x86&id=102) Цитата: Floating-Point Exceptions Для проверки этого варианта, попробуйте рекомендацию из описания инструкции. None; however, this operation might unmask a pending exception in the FPU status word. That exception is then generated upon execution of the next "waiting" floating-point instruction. Цитата: To avoid raising exceptions when changing FPU operating modes, clear any pending exceptions (using the FCLEX or FNCLEX instruction) before loading the new control word. FCLEX/FNCLEX: http://siyobik.info/index.php?module=x86&id=85Код: PROCEDURE [code] FCLEX 9BH 0DBH 0E2H;
... x: REAL; BEGIN FCLEX; x:= 1; ... |
Автор: | ScrollLock [ Понедельник, 31 Январь, 2011 20:32 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB. Проблемы с исп. REAL. Компилятор? |
Спасибо, заработало, когда добавил эту машинную команду лишь в одно место - в "стаб", т.е. модуль mexfile (уж очень не хочется "засорять" пользовательские программы вызовом модуля SYSTEM и иного низкоуровневого функционала). Про традиции оформления кода в BlackBox обязательно учту. Кстати, то что я обнаружил, можно считать ли "багом" компилятора, который требует устранения? И почему оно себя не проявляет в обычных программах для Windows, написанных на BlackBox? Или это MATLAB за собой исключения какие-то не "подчищает"? |
Автор: | Александр Ильин [ Понедельник, 31 Январь, 2011 20:40 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB. Проблемы с исп. REAL. Компилятор? |
ScrollLock писал(а): Кстати, то что я обнаружил, можно считать ли "багом" компилятора, который требует устранения? И почему оно себя не проявляет в обычных программах для Windows, написанных на BlackBox? Или это MATLAB за собой исключения какие-то не "подчищает"? Багом считать нельзя. Просто разные компиляторы по-разному обращаются с REAL. Можно назвать это разницей в подходах.
|
Автор: | ScrollLock [ Понедельник, 31 Январь, 2011 20:54 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB. Проблемы с исп. REAL. Компилятор? |
Александр Ильин писал(а): Багом считать нельзя. Просто разные компиляторы по-разному обращаются с REAL. Можно назвать это разницей в подходах. Тогда это достаточно редкая особенность BlackBoxа - у меня такого не было со связкой MATLAB-Си (пользовался LCC-WIN32, Open Watcom C, MS Visual C++ (32 и 64 бита), исключения на операциях с вещественными числами не выбрасывало. |
Автор: | Евгений Темиргалеев [ Понедельник, 31 Январь, 2011 23:27 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB. Проблемы с исп. REAL. Компилятор? |
ScrollLock писал(а): Александр Ильин писал(а): Багом считать нельзя. Просто разные компиляторы по-разному обращаются с REAL. Можно назвать это разницей в подходах. Тогда это достаточно редкая особенность BlackBoxа - у меня такого не было со связкой MATLAB-Си (пользовался LCC-WIN32, Open Watcom C, MS Visual C++ (32 и 64 бита), исключения на операциях с вещественными числами не выбрасывало. |
Автор: | ScrollLock [ Вторник, 01 Февраль, 2011 00:24 ] |
Заголовок сообщения: | Re: BlackBox и MATLAB. Проблемы с исп. REAL. Компилятор? |
Выложил исправленную версию, которая сбрасывает флаг исключений, умеет работать с вещественными матрицами, а также исходники значительно лучше организованы http://forum.oberoncore.ru/viewtopic.php?f=47&t=3196 |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |