vik0 0 27 ноября, 2008 Опубликовано 27 ноября, 2008 · Жалоба В одних случаях код вообще не меняется, А вы оптимизацию включите :) а в других появляются сообщения типа: Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement когда пытаюсь передать volatile глобальную переменную как параметр функции. Кусок кода привели бы... Почему компилятор считает что эта глобальная переменная "в соответствии с volatile-доступом неопределена в этом выражении"? Нет. "порядок доступа к volatile переменным не определен в данном выражении" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 27 ноября, 2008 Опубликовано 27 ноября, 2008 · Жалоба А вы оптимизацию включите Подобное предупреждение выскакивает при любых уровнях оптимизации Кусок кода привели бы... Полный код привести не могу (он очень большой) Работает он приблизительно так как приведено ниже (только проверок внутри State1, State2 больше): #define time1 10 #define time2 20 unsigned int timer; #define state1 0 #define state2 1 //прерывание от ТС1 по совпадению с автосбросом #pragma vector=TIMER1_COMPA_vect __interrupt void TIMER1_COMPA_IRQ(void) { //сканирование кнопки Button_Scun(); } void GoToState1(unsigned int t) { SaveLog(t); timer = 0; state = state1; } void GoToState2(unsigned int t) { SaveLog(t); timer = 0; state = state2; } void State1(void) { timer++; if(timer > time1) GoToState2(timer); } void State2(void) { timer++; if(timer > time2) GoToState1(timer); } void main(void) { state = state1; timer=0; for(;;) { __watchdog_reset(); __enable_interrupt(); __sleep(); switch(state) { case state_1: State1(); break; case state_2: State2(); break; } } } Нет. "порядок доступа к volatile переменным не определен в данном выражении" Сорри быстро и невнимательно прочитал :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aesthete Animus 0 27 ноября, 2008 Опубликовано 27 ноября, 2008 · Жалоба Подобное предупреждение выскакивает при любых уровнях оптимизации Полный код привести не могу (он очень большой) Работает он приблизительно так как приведено ниже (только проверок внутри State1, State2 больше) Извините, но из того куска кода, что Вы показали, я (видимо не я один) не понял, как он должен работать и уж тем более что в нем не работает. Тем более не ясно, как это вообще связано с volatile. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 28 ноября, 2008 Опубликовано 28 ноября, 2008 · Жалоба Извините, но из того куска кода, что Вы показали, я (видимо не я один) не понял, как он должен работать и уж тем более что в нем не работает. Тем более не ясно, как это вообще связано с volatile. Изначально я просто поинтересовался в чём суть volatile и вы и vik0 всё доступно разъяснили:) Код у меня рабочий но привести его не могу из-за размеров (ну ещё из-за того что это коммерческий проект :)). В моём коде используется много глобальных переменных (без volatile). Некоторые из них спокойно переносят присваивание им квалификатора volatile, а для некоторых появляется ошибка приведённая выше (а именно у тех которые передаются как параметры в функции). Но в любом случае hex-файл прошивки получается один в один что с volatile что без :) Спасибо всем ответившим на мой вопрос. Думаю стоит помоч топикстартеру с реализацией его идеи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 28 ноября, 2008 Опубликовано 28 ноября, 2008 (изменено) · Жалоба "" Изменено 28 ноября, 2008 пользователем mempfis_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться