aiwa 0 21 декабря, 2017 Опубликовано 21 декабря, 2017 · Жалоба А Вы пытаетесь придумать "Что бы там такое другое могло быть?". Имхо, в этом и вся суть темы. А Вы обратите внимание что и при инициализации data и при вызове функции выражение-то одно и то же "*Syst->SIO1.ptr". Если бы ругалось на него, то в обоих случаях должно. А значит - видимо с ним всё нормально. Именно об этом я и говорю. Не хватает ругани: должно быть как минимум две. Хотя можно предположить, что во втором случае в "SIO1" затесалась "О" кириллицей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 декабря, 2017 Опубликовано 21 декабря, 2017 · Жалоба Хотя можно предположить, что во втором случае в "SIO1" затесалась "О" кириллицей. Там можно что угодно предположить так как это игра в угадайку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 21 декабря, 2017 Опубликовано 21 декабря, 2017 · Жалоба Здесь телепаты нужны. :laughing:Не ссорьтесь. Там в вызове функции есть два обращения к volatile-переменным. Телепатирую, что компилятор справедливо выдает предупреждение о неопределенном порядке доступа к этим переменным. Но автор темы почему-то стесняется привести нам текст этого предупреждения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 декабря, 2017 Опубликовано 21 декабря, 2017 · Жалоба Там в вызове функции есть два обращения к volatile-переменным. Телепатирую, что компилятор справедливо выдает предупреждение о неопределенном порядке доступа к этим переменным. Да, так скорее всего и есть. Чуть позже это заметил. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Д_М 0 21 декабря, 2017 Опубликовано 21 декабря, 2017 · Жалоба Когда делаю вот так 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; То никакой ругани нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 21 декабря, 2017 Опубликовано 21 декабря, 2017 · Жалоба когда в одной команде дважды фигурирует обращение к структуре, через указатель.Ну раз вы не хотите читать не только сообщения компилятора, но и то, что вам отвечают на форуме - пусть будет так. Пусть он не любит через указатель. Смиритесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Д_М 0 22 декабря, 2017 Опубликовано 22 декабря, 2017 · Жалоба Большое спасибо за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 22 декабря, 2017 Опубликовано 22 декабря, 2017 · Жалоба Ну раз вы не хотите читать не только сообщения компилятора, но и то, что вам отвечают на форуме - пусть будет так. Пусть он не любит через указатель. Смиритесь. Может у ТС доступ write-only на форум? B) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться