Как обнулить значения всех элементов массива без циклов?
Как присвоить массиву из 100 элементов, значения двух массивов по 50 элементов, подряд?
Как обнулить значения всех элементов массива без циклов?
Как присвоить массиву из 100 элементов, значения двух массивов по 50 элементов, подряд?
Посмотрите библиотеку SysLibMem.
Функцией SysMemSet из библиотеки SysLibMem.
Двумя вызовами функции SysMemMove из библиотеки SysLibMem. По аналогии с примером выше.Код:myArray: ARRAY [0..100] OF REAL; SysMemSet(dwDest:=ADR(myArray), bCharacter:= 0, dwCount:= SIZEOF(myArray));
Подсказка: для второго вызова SysMemMove параметр dwDest равен ADR(myArray) + SIZEOF(Array_50_1)
2 Предыдущим ораторам:
Описание указателей в CodeSys и библиотеки SysLibMem настолько скудное, что складывается впечатление, что разработчики CodeSys ненавидят программистов ПЛК.
Последний раз редактировалось Serge_UA; 23.06.2011 в 19:07. Причина: исправил опечатку
Справка CoDeSys:
Я это понимаю так, что системные библиотеки реализованы в непосредственно в прошивке контроллера, открыв библиотеку в CoDeSys мы видим только раздел объявлений входных и выходных переменных, никакого ST нет и в помине.Системные библиотеки дают доступ к специализированным и низкоуровневым функциям контроллера. Набор доступных библиотек зависит от аппаратной платформы.
Все зависит от оптимальности кода, сгенерированого компилятором.не пойму как перебор данных одного и того же массива может поменять скорость взависимости от метода
Системные библиотеки именно дают возможность глумится над контроллером, поэтому применять их надо осторожно.Давать их обычному пользователю для того чтоб он "глумился" над контроллером никто не даст
Для корректной работы необходимо прежде всего представлять последствия действий, связанных с применением системных функций, а также при работе с указателями и прямой адресацией.
Пожалуйста:если бы мне предоставили те внутренние инструменты которыми оснащена эта библиотека
SysLibMem- разрушение данных и программы в ОЗУ, зависание контроллера из-за нарушения выравнивания данных.
SysLibFile - искажение или уничтожение системных файлов, загрузочного файла проекта, разрушение файловой системы контроллера вплоть до выхода из строя flash-памяти.
SysLibCom - нарушение связи с внешними устройствами , подключенными в конфигураторе через COM-порты.
Последний раз редактировалось Логвиненко Андрей; 23.06.2011 в 14:20.
Это, извините, отмазка . Никто вам не запрещает присваивать этим параметрам константы, особенно параметру dwCount.
Согласен, ведь процессор 32-разрядный и за один такт оперирует всего 4-мя байтами . Думаю в процессоре существуют аппаратные средства для копирования блоков памяти, обращение к которым осуществляется через инструкции процессора, доступ к которым в CodeSys реализован через обсуждаемую библиотеку. Например, тот же самый DMA.
Чесно говоря, не вижу, как можно оптимизировать один простой цикл так, чтобы увеличить производительность на несколько порядков.