Показано с 1 по 10 из 15

Тема: Проецирование структуры в буфер и наоборот

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,053

    По умолчанию

    Ход мысли - правильный. Из помех на пути - невозможность обращения проца к слову по нечетному адресу
    Т.к. DATA байтовый, он может залечь легко и с нечетного адреса и при первом же HDR.CRC := получим ёк.
    Гарантировать лежку DATA с четного адреса можно :

    1.
    Рукотворно после проверки и внедрения, при необходимости, например лишнего типа DATA :array[ -1...127] of byte


    2.
    Изначального расположения DATA в FB или в структуре с явными предварительными выравнивающими байтами типа
    VAR_INPUT
    d : dword;
    b1,b2 : byte;
    DATA : ..[0..127]
    В общем развитие варианта 1.


    3.
    Отказа от базового типа DATA как байтового. А нафига байт-то сдался ?
    DATA : array[0..63] of word;


    4.
    Вообще отказа от промежуточных буферов. А на фига буфера-то нужен ?
    НDR : array[0..??] of TiceHeader; //это и есть буфер. Сюда/отсюда и пишем/читаем, и кузнец нам не нужен


    5.
    Простого необращения к полям структур в стремных местах
    X : TiceHeader;

    FOR I := 0 TO 5 DO
    HDR := ADR(DATA) + I * SIZEOF(TiceHeader);
    X.CRC := GetCRC16;
    X.Size := 3;
    X.Signature := I;
    HDR^ := X; //тута нет обращений к полям
    END_FOR


    6.
    Юзания функций типа SysMemCpy (местного аналога) для переноса абстрактных куч байтов

  2. #2

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Ход мысли - правильный. Из помех на пути - невозможность обращения проца к слову по нечетному адресу
    Т.к. DATA байтовый, он может залечь легко и с нечетного адреса и при первом же HDR.CRC := получим ёк.
    Гарантировать лежку DATA с четного адреса можно :

    1.
    Рукотворно после проверки и внедрения, при необходимости, например лишнего типа DATA :array[ -1...127] of byte


    2.
    Изначального расположения DATA в FB или в структуре с явными предварительными выравнивающими байтами типа
    VAR_INPUT
    d : dword;
    b1,b2 : byte;
    DATA : ..[0..127]
    В общем развитие варианта 1.
    Я правильно понимаю, что МК не позволит мне прочитать/записать word/dword с нечетного адреса??? Это для меня откровение, честно говоря.

    Цитата Сообщение от Валенок Посмотреть сообщение
    3.
    Отказа от базового типа DATA как байтового. А нафига байт-то сдался ?
    DATA : array[0..63] of word;
    Мне в общем-то тип буфера не принципиален, в C/C++ я бы указал void*, а тут выбрал BYTE.

    Цитата Сообщение от Валенок Посмотреть сообщение
    4.
    Вообще отказа от промежуточных буферов. А на фига буфера-то нужен ?
    НDR : array[0..??] of TiceHeader; //это и есть буфер. Сюда/отсюда и пишем/читаем, и кузнец нам не нужен
    Структуры располагаются в буфере не последовательно, за каждой из них следуют данные произвольного размера, поэтому делать массив структур не вариант.

    Цитата Сообщение от Валенок Посмотреть сообщение
    5.
    Простого необращения к полям структур в стремных местах
    X : TiceHeader;

    FOR I := 0 TO 5 DO
    HDR := ADR(DATA) + I * SIZEOF(TiceHeader);
    X.CRC := GetCRC16;
    X.Size := 3;
    X.Signature := I;
    HDR^ := X; //тута нет обращений к полям
    END_FOR
    Вот тут смысла не понял, чем копирование структуры отличается от заполнения полей?

    Цитата Сообщение от Валенок Посмотреть сообщение
    6.
    Юзания функций типа SysMemCpy (местного аналога) для переноса абстрактных куч байтов
    Вариант с копированием рассматривал, но это как-то неэкономично в плане ресурсов :-) Привык на атмеге экономить на всем.

Похожие темы

  1. буфер визуализации
    от Иван2 в разделе СПК2xx (архив)
    Ответов: 0
    Последнее сообщение: 26.10.2014, 22:05
  2. как организовать буфер (аккум)?
    от K580BB55A в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 23.11.2010, 00:58
  3. как использовать буфер
    от николай72 в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 18.04.2009, 21:25

Метки этой темы

Ваши права

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