CODESYS форум

Добро пожаловать на официальный форум CODESYS
Deutsche Version English version russian version 
Текущее время: Чт ноя 23, 2017 4:34 am

Часовой пояс: UTC+01:00




Начать новую тему  Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Доступ в ОЗУ чипа SC2X из CoDeSys
СообщениеДобавлено: Ср окт 10, 2012 1:33 pm 
Не в сети

Зарегистрирован: Ср фев 22, 2012 9:22 am
Сообщения: 7
Была проблема получения из CoDeSys доступа к свободной оперативной памяти чипа (в IEC Platform Builder максимально можно выбрать до 65536 байт "The value may not be larger as 16#10000 !"). Немцы подсказали (в частности Günter Berberich, за что ему спасибо). Есть библиотека SysLibMem ,позволяющая выделять области памяти вне среды исполнения CoDeSys.
Пример из проекта (для архива аварий):
VAR
AlarmArchive: AlarmArchive_Item; (*Это переменная типа моей структуры*)
AlarmArchiveP: POINTER TO AlarmArchive_Item;(*Указатель типа моей структуры*)
AlarmArchive_length: WORD:=10000; (*Максимальное кол-во элементов массива
из переменных типа моей структуры*)
IF AlarmArchiveP<>0 THEN SysMemFree(AlarmArchiveP, SIZEOF (AlarmArchive) *AlarmArchive_length); (*Очищаю/освобождаю место памяти ,которое могло быть выделено ранее*)
END_IF;

IF AlarmArchiveP=0 THEN AlarmArchiveP:=SysMemAlloc(SIZEOF (AlarmArchive) * AlarmArchive_length); (*Резервирую область внешней для среды исполнения оперативки
возвращает указатель на выделенную область ,если он = 0, значит не хватает памяти*)
END_IF;

Использованы:
FUNCTION SysMemAlloc : DWORD
(* Allocates memory blocks. *)
(* SysMemAlloc returns a void pointer to the allocated space, or NULL if there is insufficient
memory available.. Always check the return from malloc, even if the amount of memory
requested is small. *)
VAR_INPUT
dwSize: DWORD; (* Bytes to allocate *)
END_VAR

и

FUNCTION SysMemFree : BOOL
(* Deallocates or frees a memory block. *)
VAR_INPUT
dwAddress: DWORD; (* Previously allocated memory block to be freed *)
dwSize:DWORD; (* Size of block to free *)
END_VAR

--------------------------------------------------------------
еще в библиотеке:
SysMemCmp - сравнение байт в областях памяти
FUNCTION SysMemCmp : DWORD
(* Compare characters in two buffers. *)
(* The return value indicates the relationship between the buffers:
< 0 buf1 less than buf2
0 buf1 identical to buf2
> 0 buf1 greater than buf2
*)
VAR_INPUT
dwBuf1: DWORD; (* First buffer *)
dwBuf2: DWORD; (* Second buffer *)
dwCount: DWORD; (* Number of characters to compare *)
END_VAR

SysMemCpy - копирование байта из одной области памяти в другую
FUNCTION SysMemCpy : DWORD
(* Copies characters between buffers. *)
(* returns the value of dwDest. *)
VAR_INPUT
dwDest: DWORD; (* New buffer *)
dwSrc: DWORD; (* Buffer to copy from *)
dwCount: DWORD; (* Number of characters to copy*)
END_VAR

SysMemMove - перенос байта из одной области памяти в другую с удалением исходного
FUNCTION SysMemMove : DWORD
(* Moves one buffer to another. *)
(* SysMemMovereturns the value of dest *)
VAR_INPUT
dwDest: DWORD; (* New buffer *)
dwSrc: DWORD; (* Buffer to copy from *)
dwCount: DWORD; (* Number of characters to copy*)
END_VAR

и еще:

FUNCTION SysMemSet : DWORD
(* Sets buffers to a specified character. *)
(* returns the value of dwDest. *)
VAR_INPUT
dwDest: DWORD; (* Pointer to destination *)
bCharacter: BYTE; (* Character to set *)
dwCount: DWORD; (* Number of characters *)
END_VAR

и

FUNCTION SysMemSwap : BOOL
(* Swap data in buffer, dependant on target system.
Return: TRUE, if swapping is done *)
VAR_INPUT
dwAddress:DWORD; (* Address of byffer to swap *)
diSize:DINT; (* Swap size: 2,4,8 *)
diCount:DINT; (* Number of swap elements in buffer *)
END_VAR
VAR
END_VAR
------------

В общем так :) . Может кому пригодится.


Вложения:
Комментарий к файлу: Библиотека, присланная дружественными немцами.
SysLibMem.zip [1.37 КБ]
113 скачиваний

_________________
ErmAndrey
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC+01:00


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB