OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Апрель, 2024 12:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Особенности средств SYSTEM
СообщениеДобавлено: Среда, 24 Октябрь, 2007 18:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Сообщаю о недокументированном подводном камне, который может быть неочевиден.

Сегодня мои ребята долго возились с одной проблемой и не могли понять её причин.
В итоге они с удивлением обнаружили, что SYSTEM.MOVE портит данные, если области источника и приёмника пересекаются (т.е. использовать её для сдвига данных нельзя).

Этого можно было ожидать, но, формально говоря, в документации сие ограничение не отражено.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Среда, 24 Октябрь, 2007 21:34 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Илья Ермаков писал(а):
Сегодня мои ребята долго возились с одной проблемой и не могли понять её причин.
В итоге они с удивлением обнаружили, что SYSTEM.MOVE портит данные, если области источника и приёмника пересекаются (т.е. использовать её для сдвига данных нельзя).

Это ТОЧНО было в обсужденьи в стародавние времена на КД!
По-моему, даже чуть ли не я сам тогда с этим (в соплях и с дикими воплями) прибегал и жаловался... :о)
Вот, в связи с этим, ещё раз вспоминается благое намерение прошерстить ту первую тему про КП и вычленить ляпы, "подводные камни" и советы, что бы по кругу не ходить.....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Четверг, 25 Октябрь, 2007 08:34 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
В документации материал дан сухо и кратко. Так что M[a1..a1+n-1] := M[a0..a0+n-1] возможно и подразумевало, что копирование идет с возр. адресами. Копировать пересекающиеся блоки можно, если адрес приёмника меньше адреса источника.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Четверг, 25 Октябрь, 2007 09:12 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Илья Ермаков писал(а):
Этого можно было ожидать, но, формально говоря, в документации сие ограничение не отражено.

Формально говоря, отражено. ;-)
Цитата:
VAL, PUT, PUTREG, and MOVE may crash BlackBox and/or Windows when not used properly.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Пятница, 26 Октябрь, 2007 00:36 
Аватара пользователя

Зарегистрирован: Суббота, 19 Ноябрь, 2005 15:59
Сообщения: 803
Откуда: Зеленоград
В стандартной библиотеке Си есть функции блочного копирования memcpy и memmove.
memcpy немного эффективнее, но имеет тот же недостаток, что и SYSTEM.MOVE.
По этой причине Керниган и Пайк в "Практике программирования" рекомендовали пользоваться исключительно memmove. (Для Си вообще характерны рекомендации не пользоваться отдельными старыми стандартными функциями. Например, функцией gets, в т.ч. и как объектом хакерских атак.)

Предложение: попросить OM AG переписать SYSTEM.MOVE в духе memmove.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Пятница, 26 Октябрь, 2007 08:07 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
AVC писал(а):
Предложение: попросить OM AG переписать SYSTEM.MOVE в духе memmove.

Не стоит. Если хочется, можно свою процедуру написать.
Все процедуры из SYSTEM компилируются в 1-2 команды (MOVE в 3).
К тому же некоторые используют MOVE вместо отсутствующей FILL.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Пятница, 26 Октябрь, 2007 08:41 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Пятница, 26 Октябрь, 2007 19:33 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Евгений Темиргалеев писал(а):
... STD; ... CLD ...[/code]

Я, конечно, дико извиняюсь, но откуда вам доподлинно известно, что ДО вашего кода флаг D был сброшен? :о)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Суббота, 27 Октябрь, 2007 12:13 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Владимир Лось писал(а):
Евгений Темиргалеев писал(а):
... STD; ... CLD ...[/code]

Я, конечно, дико извиняюсь, но откуда вам доподлинно известно, что ДО вашего кода флаг D был сброшен? :о)

Доподлинно про ББ не известно, согласен. Предположения такие: это стандарт для WinApi функций, а мы имеем ввиду BB под винду. Поскольку среде так или иначе приходится вызывать WinApi время от времени, в ней должны придерживаться этих же правил.

Я однажды долго не мог понять, почему это прога вылетает и клял MS. А в итоге выяснилось, что я в одном месте флаг поставил в 1, и обратно не сбросил. А потом использовал WinApi ф-ю, которая сама пользовалась strlen. И в нем был ба-бах, от того, что DF=1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Суббота, 27 Октябрь, 2007 14:12 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Как раз в ББ известно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Суббота, 27 Октябрь, 2007 21:40 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
Trurl писал(а):
Как раз в ББ известно.

А мне инетерсно - откуда?
Я просто первое, что говорю людям, начинающим программировать (а, тем более - встроенные системы) - "используйте принцип стека! - оставляйте после себя всё так, как было до вас!"

Например, "темплейт" работы с разделяемой переменной (доступной и из обработчика прерывания) следующий:

uint8_t flags = FLAGS_REG;
cli(); // запрет прерываний
... // творим
FLAGS_REG = flags; // А НЕ sti(); !!!

то же касается и других флагов регистра флагов и состояний...
Думаю и в других местах также и тот же принцип...
Тем более, когда в системе есть обратные вызовы и сложная зависимость между библиотеками...

Илит на счёт D - какая-то формальная договорённость существует и оформлена?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 08:01 

Зарегистрирован: Вторник, 04 Июль, 2006 13:04
Сообщения: 88
Откуда: Novosibirsk
вот-вот. история похожа на работу с указателями. если конструкция неявно требует наличия других для нормальной работы значит она черезчур низкоуровнева. то есть - не элемент.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 09:02 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Владимир Лось писал(а):
Илит на счёт D - какая-то формальная договорённость существует и оформлена?

Формальной нет, но фактически код генерируется в расчете на D=0.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Особенности средств SYSTEM
СообщениеДобавлено: Понедельник, 29 Октябрь, 2007 21:55 

Зарегистрирован: Воскресенье, 28 Май, 2006 22:12
Сообщения: 1693
CheshireCat писал(а):
вот-вот. история похожа на работу с указателями. если конструкция неявно требует наличия других для нормальной работы значит она черезчур низкоуровнева. то есть - не элемент.

Раскройте контекст... Я в затрудненьи.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB