-
- Я бы тревогу поднял. Необходимо обеспечивать идентичность бинарников на основе одних и тех же исходников. - amusin(07.05.2009 07:33)
- Всё еще хуже. Один и тот же кусок кода в дает разный результат в разных местах! - POV(08.05.2009 21:46)
- может, ты плавучку в обработчиках прерываний юзаешь? - Vit(08.05.2009 21:55)
- хм, ну да. А шо? Локальные переменные пробовал и глобальные. Один хрен. Результат смотрю не в майне, а прям в обработчике. - POV(08.05.2009 22:23)
- ладно с быстродействием и стеками твоё личное дело, но чтобы и в фоне и в прерываниях юзать флоат, мат-либа должна быть реентерабельной. Выкрутасы с такой фигней ведутся со времен первых сопроцессоров - там ещё веселее - Vit(08.05.2009 22:29, ссылка)
- базовые операции там реентерабельные - bialix2(11.05.2009 13:37, ссылка)
- Вижу. Но Last Reviewed: Friday, July 15, 2005. Их rvdmk так колбасит, что это вполне может не соответствовать настоящему моменту. Сначала в текущую доку смотреть надо. Мне облом;) - Vit(11.05.2009 13:51)
- что там такого можно наменять в библиотеке плавающей точки? и нужно ли??? - bialix2(11.05.2009 14:03)
- А что они с no_init, volatile и прочая творят? в каждой версии чего-нить рихтуют - Vit(11.05.2009 14:05)
- а что они собственно творят с no_init и volatile? я даже и не знаю, расскажите, пожалуйста. - bialix2(11.05.2009 14:34)
- из-за no_init проект из 3.20 не может работать в 3.50 - слова опять другие - нужно по-новому объяснять компилеру и линкеру, что от него просят просто no_init. А с volatile там кочующая трабла - периодически отваливается нормальная работа в самых разных Vit(226 знак., 11.05.2009 16:26)
- 3.20 и 3.50 -- это что за версии? Для ARM? - bialix2(11.05.2009 17:58)
- угу. писал же rvdmk - Vit(11.05.2009 18:20)
- rvmdk. :-) - VAI(12.05.2009 06:53)
- ;) у мну эта апшипка систематическая - Vit(12.05.2009 08:35)
- rvmdk. :-) - VAI(12.05.2009 06:53)
- угу. писал же rvdmk - Vit(11.05.2009 18:20)
- 3.20 и 3.50 -- это что за версии? Для ARM? - bialix2(11.05.2009 17:58)
- из-за no_init проект из 3.20 не может работать в 3.50 - слова опять другие - нужно по-новому объяснять компилеру и линкеру, что от него просят просто no_init. А с volatile там кочующая трабла - периодически отваливается нормальная работа в самых разных Vit(226 знак., 11.05.2009 16:26)
- не вижу взаимосвязи базовых алгоритмов с плюшками языка - bialix2(11.05.2009 14:09)
- Какие-такие базовые алгоритмы без их реализации? Что за плюшки? - Vit(11.05.2009 14:12)
- речь о базовых операциях для плавающей точки (+ - * /). Реализованы они в виде жестко оптимизированных ассемблерных подпрограмм. ЧтО такаого глобального должно было произойти в мире, чтобы ИХ начали радикально менять и разрушать обратную совместимость bialix2(251 знак., 11.05.2009 14:38)
- Да согласен, но если no_init то работает, то нужно писать мульён вариаций другими словами, чтоб хоть как-то заставить работать, то опять работает, но не просто так, а мы должны знать, что компилятор может нам не поверить, потому что индус не позаботился Vit(475 знак., 11.05.2009 15:09)
- я стараюсь работать по правилу, которое прочитал еще в юности bialix2(164 знак., 11.05.2009 15:31)
- Да согласен, но если no_init то работает, то нужно писать мульён вариаций другими словами, чтоб хоть как-то заставить работать, то опять работает, но не просто так, а мы должны знать, что компилятор может нам не поверить, потому что индус не позаботился Vit(475 знак., 11.05.2009 15:09)
- речь о базовых операциях для плавающей точки (+ - * /). Реализованы они в виде жестко оптимизированных ассемблерных подпрограмм. ЧтО такаого глобального должно было произойти в мире, чтобы ИХ начали радикально менять и разрушать обратную совместимость bialix2(251 знак., 11.05.2009 14:38)
- Какие-такие базовые алгоритмы без их реализации? Что за плюшки? - Vit(11.05.2009 14:12)
- а что они собственно творят с no_init и volatile? я даже и не знаю, расскажите, пожалуйста. - bialix2(11.05.2009 14:34)
- А что они с no_init, volatile и прочая творят? в каждой версии чего-нить рихтуют - Vit(11.05.2009 14:05)
- что там такого можно наменять в библиотеке плавающей точки? и нужно ли??? - bialix2(11.05.2009 14:03)
- Вижу. Но Last Reviewed: Friday, July 15, 2005. Их rvdmk так колбасит, что это вполне может не соответствовать настоящему моменту. Сначала в текущую доку смотреть надо. Мне облом;) - Vit(11.05.2009 13:51)
- Нах это надо. Вхожу в прерывания и прочие прерывания такого же приоритета (а других нет) запрещаются. - POV(08.05.2009 23:12)
- Кажется не понимаешь. Выполнение в "основном цикле"(я назвал фоном) действий с флоатом выполняется либой, которая требует временных переменных, но они для нереентерабельной либы вполне обычно глобальные. Другое дело, что достаточно стабильная фигня Vit(197 знак., 08.05.2009 23:19)
- Это общее впечатление от компиляторов или и для Кейл51 имеет место? - POV(08.05.2009 23:26)
- Это зависит не столько от компилятора или его конкретной реализации, сколько от архитектуры процессора. В данном случае операнды типа float невозможно разместить в регистрах процессора, поэтому они размещаются в ОЗУ. Отсюда и все проблемы. Так что Bill(65 знак., 11.05.2009 12:12)
- ИМХО, нет. Вопрос использует ли мат-либа глобальные переменные. - Vit(11.05.2009 12:37)
- Переменные могут либо глобальными, либо локальными. Это не суть важно. Главное - они расположены в ОЗУ, что не дает сделать функции плавающей арифметики реентерабельными. Другое дело - как они в действительности реализованы. И здесь все упирается Bill(258 знак., 11.05.2009 12:50)
- Не совсем. Есть 4 банка по 8 регистров R0-R7, которые могут переключаться в прерываниях. Еще есть возможность сбрасывать промежуточные результаты на стек. Регистры очень активно используются для передачи контекста и в разных мат. вычислениях. - bialix2(11.05.2009 13:17)
- К одним переменным доступ из обработчика прерывания есть, к другим нет. Если функция использует статические переменные (глобальные или локальные статические) и при двух вызовах функции эти переменные используются, то реентерабельности нет. А как устроена Vit(78 знак., 11.05.2009 12:59)
- Ну, так и я о том же. - Bill(11.05.2009 13:09)
- А причём тут архитектура? - Vit(11.05.2009 13:13)
- Возможно, именно в данном случае, ни причем. Только BK(197 знак., 11.05.2009 14:20, )
- А причём тут архитектура? - Vit(11.05.2009 13:13)
- Ну, так и я о том же. - Bill(11.05.2009 13:09)
- Так - с тем дополнением, что по умолчанию так, ибо иначе дорого (копировать указатель стека в R0, вместо прямых обращений к памяти использовать косвенные с отдельными инкрементами/декрементами указательного регистра). Можно попросить свою функцию ReAl(87 знак., 11.05.2009 12:58)
- Я не очень знаком с Keil-51, поэтому судил по частным примерам, и о такой возможности не догадался. Хотя все равно вопрос остается - как именно реализованы библиотечные функции "плавучки"? - Bill(11.05.2009 13:09)
- А вот что говорит официальный источник: "Floating point operations the compiler generates code for (+ - * /) are fully reentrant. But only a few functions in math.h are reentrant." - bialix2(11.05.2009 13:35, ссылка)
- Надеюсь это достаточное доказательство? - bialix2(11.05.2009 13:36)
- Вполне!!! - BK(11.05.2009 13:41, )
- Надеюсь это достаточное доказательство? - bialix2(11.05.2009 13:36)
- У меня нет исходников, им стоит только 7й кейл, но в наборе имеющихся библиотек математики с плавающей точкой для линковки доступны только варианты оптимизированные под различные конфигурации памяти (программы и данных), а также с поддержкой банков bialix2(259 знак., 11.05.2009 13:27)
- Спасибо, конечно, за информацию, только ... BK(263 знак., 11.05.2009 13:48, )
- зависит от обстоятельств. - bialix2(11.05.2009 14:02)
- Например? - BK(11.05.2009 14:43, )
- зависит от обстоятельств. - bialix2(11.05.2009 14:02)
- Спасибо, конечно, за информацию, только ... BK(263 знак., 11.05.2009 13:48, )
- А вот что говорит официальный источник: "Floating point operations the compiler generates code for (+ - * /) are fully reentrant. But only a few functions in math.h are reentrant." - bialix2(11.05.2009 13:35, ссылка)
- Я не очень знаком с Keil-51, поэтому судил по частным примерам, и о такой возможности не догадался. Хотя все равно вопрос остается - как именно реализованы библиотечные функции "плавучки"? - Bill(11.05.2009 13:09)
- Переменные могут либо глобальными, либо локальными. Это не суть важно. Главное - они расположены в ОЗУ, что не дает сделать функции плавающей арифметики реентерабельными. Другое дело - как они в действительности реализованы. И здесь все упирается Bill(258 знак., 11.05.2009 12:50)
- ИМХО, нет. Вопрос использует ли мат-либа глобальные переменные. - Vit(11.05.2009 12:37)
- Могу ошибаться, но, насколько знаю, обычно с фабричными настройками имеет место компиляция/линковка с нереенетрабельными либами, потому как они практически всегда быстрее и меньше по размеру. В нормальных компилерах в поставку входят и реентерабельные Vit(149 знак., 08.05.2009 23:37)
- угу - POV(09.05.2009 00:03)
- Это зависит не столько от компилятора или его конкретной реализации, сколько от архитектуры процессора. В данном случае операнды типа float невозможно разместить в регистрах процессора, поэтому они размещаются в ОЗУ. Отсюда и все проблемы. Так что Bill(65 знак., 11.05.2009 12:12)
- Это общее впечатление от компиляторов или и для Кейл51 имеет место? - POV(08.05.2009 23:26)
- Тем более что в моем случае эти данные используются либо основным циклом с контролем прерывания либо самой прерывающей процедурой. - POV(08.05.2009 23:13)
- Кажется не понимаешь. Выполнение в "основном цикле"(я назвал фоном) действий с флоатом выполняется либой, которая требует временных переменных, но они для нереентерабельной либы вполне обычно глобальные. Другое дело, что достаточно стабильная фигня Vit(197 знак., 08.05.2009 23:19)
- базовые операции там реентерабельные - bialix2(11.05.2009 13:37, ссылка)
- ладно с быстродействием и стеками твоё личное дело, но чтобы и в фоне и в прерываниях юзать флоат, мат-либа должна быть реентерабельной. Выкрутасы с такой фигней ведутся со времен первых сопроцессоров - там ещё веселее - Vit(08.05.2009 22:29, ссылка)
- хм, ну да. А шо? Локальные переменные пробовал и глобальные. Один хрен. Результат смотрю не в майне, а прям в обработчике. - POV(08.05.2009 22:23)
- может, ты плавучку в обработчиках прерываний юзаешь? - Vit(08.05.2009 21:55)
- Всё еще хуже. Один и тот же кусок кода в дает разный результат в разных местах! - POV(08.05.2009 21:46)
- Я бы тревогу поднял. Необходимо обеспечивать идентичность бинарников на основе одних и тех же исходников. - amusin(07.05.2009 07:33)