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/