Перейти к содержанию
    

Мудрёная операция с указателями в IAR C

А Вы пытаетесь придумать "Что бы там такое другое могло быть?".

Имхо, в этом и вся суть темы.

 

А Вы обратите внимание что и при инициализации data и при вызове функции выражение-то одно и то же "*Syst->SIO1.ptr".

Если бы ругалось на него, то в обоих случаях должно. А значит - видимо с ним всё нормально.

 

Именно об этом я и говорю. Не хватает ругани: должно быть как минимум две.

Хотя можно предположить, что во втором случае в "SIO1" затесалась "О" кириллицей.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотя можно предположить, что во втором случае в "SIO1" затесалась "О" кириллицей.

Там можно что угодно предположить так как это игра в угадайку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здесь телепаты нужны. :laughing:
Не ссорьтесь. Там в вызове функции есть два обращения к volatile-переменным. Телепатирую, что компилятор справедливо выдает предупреждение о неопределенном порядке доступа к этим переменным. Но автор темы почему-то стесняется привести нам текст этого предупреждения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там в вызове функции есть два обращения к volatile-переменным. Телепатирую, что компилятор справедливо выдает предупреждение о неопределенном порядке доступа к этим переменным.

Да, так скорее всего и есть. Чуть позже это заметил. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда делаю вот так

Syst->SIO1.CRC = CRC(*Syst->SIO1.ptr, Syst->SIO1.CRC, SIO1_poly);

 

Компилятор выдаёт следующее предупреждение:

Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement D:\Work\MC\Gateway\Actual\Modbus_master1.c 170

 

И ещё выдаёт такое же предупреждение, когда делаю так

if(Syst->SIO1.size < Syst->SIO1.amount)

{

}

 

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

 

Кажется распутал.

Причина оказалась в том, что указатель размещается в строго определённом физическом адресе.

__no_init volatile syspar *Syst @0x0100;

Так нужно для совместного обращения из applycation и boot секторов.

 

Если сделать просто syspar *Syst;

То никакой ругани нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Может у ТС доступ write-only на форум? B)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...