Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 18 из 18

Тема: Обращение через указатель. Перезагрузка

  1. #11
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,579

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Тут именно выравнивание. Разлет с типами - как раз и не имеет значения

    Пусть топик вставит
    var ek : bool;

    ptw:=ADR(Out_1[8]);
    ek := (ptw mod 2) = 1; //вот тута и увидит
    ptw^:=2015;
    массив начинается с индекса 1, считаем пары байт чтоб получить ворд: {1,2},{3,4},{5,6},{7,8},{9,10}
    указатель ADR(Out_1[8]) разложит ворд на первый байт в третью пару, а второй байт в четвертую пару, теперя понятно что я имел ввиду, выравнивание тут не причем, здесь не правильное программирование
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  2. #12

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Тут именно выравнивание. Разлет с типами - как раз и не имеет значения

    Пусть топик вставит
    var ek : bool;

    ptw:=ADR(Out_1[8]);
    ek := (ptw mod 2) = 1; //вот тута и увидит
    ptw^:=2015;
    Спасибо, все верно.

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

    По умолчанию

    Цитата Сообщение от mkhm Посмотреть сообщение
    такие же объявления и код в других проектах работают без проблем.
    Например, и указанный пример заработал без перезагрузок в таком виде..
    Не такие же объявы. Разница в малом - как размещены данные.
    Последний раз редактировалось Валенок; 30.04.2015 в 11:08.

  4. #14
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,065

    По умолчанию

    выравнивание тут не причем, здесь не правильное программирование
    ))
    Индекс не имеет значения. Если [1..255] : byte; размещен с четного адреса - то {13,14}, {27,28} - нормуль при обращении к слову, а {2,3} {12,13} - кирдык. Если же сам массив размещен с нечетного адреса - то все наоборот.
    Последний раз редактировалось Валенок; 30.04.2015 в 11:08.

  5. #15

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    ))
    Индекс не имеет значения. Если [1..255] : byte; размещен с четного адреса - то {13,14}, {27,28} - нормуль при обращении к слову, а {2,3} {12,13} - кирдык. Если же сам массив размещен с нечетного адреса - то все наоборот.

    У топика КДС расположил массив-2 с четного адреса. А индекс с 1 -> значит четный индекс - с нечетного адреса с вытекающими..
    Топик может решить местный трабл просто сделав [0..255]. Но это всего-лишь примочка.

    Чисто для инфрмации.
    Байтовый массив имеет право размещатся с любого адреса.
    В глобал/function/program размещение булей/байтов/байтобульных массивов/стрингов трудно прогнозировать, поэтому оное может быть и с нечетных адресов, но при этом:
    1.Чётко и ясно, в порядке объявления, размещаются любые поля фб и структур (с учетом неявных полей)
    2.Гарантировано с квартного адреса размещаются их экземпляры
    вот из этого и надо исходить.
    И еще раз, спасибо.

    Согласен и с "не правильное программирование", не учитывающее необходимость выравнивания при записи адресов "целых" переменных по четным адресам,
    характерное для данной платформы. Простое соблюдение типов переменных в том числе и в случае работы с указателями позволяет не сталкиваться с такими проблемами.

  6. #16

    По умолчанию

    Цитата Сообщение от mkhm Посмотреть сообщение
    Спасибо,этот вариант понятен.

    Исходный с несовпадением типа массива и указателя использовать нельзя?
    (В нескольких проектах работает без проблем)
    Процессор ARM очень жёстко различает операции обращения к байтам, словам и двойным словам. И ADR[8] имеет нечётный адрес, по которому можно обращаться только и исключительно побайтно. Иначе в процессоре генерится исключение и процессор, видя ошибку в адресе уходит в перезагрузку.
    Тролль-наседка, добрый, нежный и ласковый

  7. #17
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Третий топик на эту тему менее чем за месяц: раз, два. Объявляю карантин.

  8. #18

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Третий топик на эту тему менее чем за месяц: раз, два. Объявляю карантин.
    Поискал перед тем как постить, но неудачно. Спасибо, по ссылке хорошее решение с SysLibMem и SysMemCopy

Страница 2 из 2 ПерваяПервая 12

Похожие темы

  1. Ответов: 18
    Последнее сообщение: 08.10.2021, 22:54
  2. Обращение к переменной из MasterLink
    от OrionK в разделе Master SCADA 3
    Ответов: 5
    Последнее сообщение: 28.02.2013, 10:23
  3. Ответов: 2
    Последнее сообщение: 13.01.2011, 15:47
  4. бит через указатель
    от Freddy в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 20.07.2010, 08:08
  5. Ответов: 5
    Последнее сообщение: 02.04.2010, 09:05

Ваши права

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