OberonCore https://forum.oberoncore.ru/ |
|
Особенности средств SYSTEM https://forum.oberoncore.ru/viewtopic.php?f=2&t=703 |
Страница 1 из 1 |
Автор: | Илья Ермаков [ Среда, 24 Октябрь, 2007 18:29 ] |
Заголовок сообщения: | Особенности средств SYSTEM |
Сообщаю о недокументированном подводном камне, который может быть неочевиден. Сегодня мои ребята долго возились с одной проблемой и не могли понять её причин. В итоге они с удивлением обнаружили, что SYSTEM.MOVE портит данные, если области источника и приёмника пересекаются (т.е. использовать её для сдвига данных нельзя). Этого можно было ожидать, но, формально говоря, в документации сие ограничение не отражено. |
Автор: | Wlad [ Среда, 24 Октябрь, 2007 21:34 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
Илья Ермаков писал(а): Сегодня мои ребята долго возились с одной проблемой и не могли понять её причин. В итоге они с удивлением обнаружили, что SYSTEM.MOVE портит данные, если области источника и приёмника пересекаются (т.е. использовать её для сдвига данных нельзя). Это ТОЧНО было в обсужденьи в стародавние времена на КД! По-моему, даже чуть ли не я сам тогда с этим (в соплях и с дикими воплями) прибегал и жаловался... :о) Вот, в связи с этим, ещё раз вспоминается благое намерение прошерстить ту первую тему про КП и вычленить ляпы, "подводные камни" и советы, что бы по кругу не ходить..... |
Автор: | Евгений Темиргалеев [ Четверг, 25 Октябрь, 2007 08:34 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
В документации материал дан сухо и кратко. Так что M[a1..a1+n-1] := M[a0..a0+n-1] возможно и подразумевало, что копирование идет с возр. адресами. Копировать пересекающиеся блоки можно, если адрес приёмника меньше адреса источника. |
Автор: | Trurl [ Четверг, 25 Октябрь, 2007 09:12 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
Илья Ермаков писал(а): Этого можно было ожидать, но, формально говоря, в документации сие ограничение не отражено. Формально говоря, отражено. ![]() Цитата: VAL, PUT, PUTREG, and MOVE may crash BlackBox and/or Windows when not used properly.
|
Автор: | AVC [ Пятница, 26 Октябрь, 2007 00:36 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
В стандартной библиотеке Си есть функции блочного копирования memcpy и memmove. memcpy немного эффективнее, но имеет тот же недостаток, что и SYSTEM.MOVE. По этой причине Керниган и Пайк в "Практике программирования" рекомендовали пользоваться исключительно memmove. (Для Си вообще характерны рекомендации не пользоваться отдельными старыми стандартными функциями. Например, функцией gets, в т.ч. и как объектом хакерских атак.) Предложение: попросить OM AG переписать SYSTEM.MOVE в духе memmove. |
Автор: | Trurl [ Пятница, 26 Октябрь, 2007 08:07 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
AVC писал(а): Предложение: попросить OM AG переписать SYSTEM.MOVE в духе memmove. Не стоит. Если хочется, можно свою процедуру написать. Все процедуры из SYSTEM компилируются в 1-2 команды (MOVE в 3). К тому же некоторые используют MOVE вместо отсутствующей FILL. |
Автор: | Евгений Темиргалеев [ Пятница, 26 Октябрь, 2007 08:41 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
Trurl писал(а): Не стоит. Если хочется, можно свою процедуру написать. Можно и без процедуры (нужны только две кодовые процедуры на одну инструкцию):Код: IF (src < dest) & (dest - src < size) THEN
STD; SYSTEM.MOVE(src + size - 1, dest + size - 1, size); CLD ELSE SYSTEM.MOVE(src, dest, size) END |
Автор: | Wlad [ Пятница, 26 Октябрь, 2007 19:33 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
Евгений Темиргалеев писал(а): ... STD; ... CLD ...[/code] Я, конечно, дико извиняюсь, но откуда вам доподлинно известно, что ДО вашего кода флаг D был сброшен? :о) |
Автор: | Евгений Темиргалеев [ Суббота, 27 Октябрь, 2007 12:13 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
Владимир Лось писал(а): Евгений Темиргалеев писал(а): ... STD; ... CLD ...[/code] Я, конечно, дико извиняюсь, но откуда вам доподлинно известно, что ДО вашего кода флаг D был сброшен? :о) Доподлинно про ББ не известно, согласен. Предположения такие: это стандарт для WinApi функций, а мы имеем ввиду BB под винду. Поскольку среде так или иначе приходится вызывать WinApi время от времени, в ней должны придерживаться этих же правил. Я однажды долго не мог понять, почему это прога вылетает и клял MS. А в итоге выяснилось, что я в одном месте флаг поставил в 1, и обратно не сбросил. А потом использовал WinApi ф-ю, которая сама пользовалась strlen. И в нем был ба-бах, от того, что DF=1. |
Автор: | Trurl [ Суббота, 27 Октябрь, 2007 14:12 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
Как раз в ББ известно. |
Автор: | Wlad [ Суббота, 27 Октябрь, 2007 21:40 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
Trurl писал(а): Как раз в ББ известно. А мне инетерсно - откуда? Я просто первое, что говорю людям, начинающим программировать (а, тем более - встроенные системы) - "используйте принцип стека! - оставляйте после себя всё так, как было до вас!" Например, "темплейт" работы с разделяемой переменной (доступной и из обработчика прерывания) следующий: uint8_t flags = FLAGS_REG; cli(); // запрет прерываний ... // творим FLAGS_REG = flags; // А НЕ sti(); !!! то же касается и других флагов регистра флагов и состояний... Думаю и в других местах также и тот же принцип... Тем более, когда в системе есть обратные вызовы и сложная зависимость между библиотеками... Илит на счёт D - какая-то формальная договорённость существует и оформлена? |
Автор: | CheshireCat [ Понедельник, 29 Октябрь, 2007 08:01 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
вот-вот. история похожа на работу с указателями. если конструкция неявно требует наличия других для нормальной работы значит она черезчур низкоуровнева. то есть - не элемент. |
Автор: | Trurl [ Понедельник, 29 Октябрь, 2007 09:02 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
Владимир Лось писал(а): Илит на счёт D - какая-то формальная договорённость существует и оформлена? Формальной нет, но фактически код генерируется в расчете на D=0. |
Автор: | Wlad [ Понедельник, 29 Октябрь, 2007 21:55 ] |
Заголовок сообщения: | Re: Особенности средств SYSTEM |
CheshireCat писал(а): вот-вот. история похожа на работу с указателями. если конструкция неявно требует наличия других для нормальной работы значит она черезчур низкоуровнева. то есть - не элемент. Раскройте контекст... Я в затрудненьи. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |