Forger 17 6 августа, 2018 Опубликовано 6 августа, 2018 · Жалоба Это был вопрос по-существу. На который нужен был ответ по-существу. Тут все ТС считают, что их вопросы - вопросы по-существу, и всем соотв. нужны аналогичные ответы ... Но на практике не все так очевидно ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба Вот исправленный код, на который у компилятора нет предупреждений. Обратите внимание, что параметры функций имеют спецификатор volatile.Нет. Сам параметр не имеет квалификатора volatile. Этот квалификатор имеет переменная, на которую этот параметр указывает. Обратите внимание, что volatile Flag_State_t *Flag_ptr, Flag_State_t *volatile Flag_ptr, volatile Flag_State_t * volatile Flag_ptr и Flag_State_t *Flag_ptr - четыре совершенно разные сущности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба СТРОГО ПО-СУЩЕСТВУ ЗАДАННОГО ВОПРОСАСтрого по существу - в вашем примере volatile вообще нигде не нужен! Но мы люди опытные и понимаем, что дальше вы наговнокодите прерывание, которое флаги будет менять. Поэтому и посоветовали поставить volatile в единственно верное место - определение переменных MyFlag. Дожились, каждый говнокодер ещё и поучать будет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба в вашем примере volatile вообще нигде не нужен! Но мы люди опытные и понимаем, что дальше вы наговнокодите прерывание, которое флаги будет менять. В своём первом сообщении я об этом прямо сказал, когда объяснял, зачем мне нужен volatile. Догадываться не надо - всё написано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба Не надо нас лечить, лучше принимайте советы к исполнению. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба Но количество таких ответов, относительно общего количества ответов, можно расценивать и как результат некоего спонтанного теста :biggrin: Очередной деятель которому все должны..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 29 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба Хотел промолчать, но не буду. У человека, который с помощью функции по указателю осуществляет из прерывания доступ к глобальной булевой по сути переменной большие проблемы. Это в будущем первый кандидат в секту "пресвятого инлайна". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба Мне одному кажется, что эта тема к Keil как таковому практически не имеет отношения? Уверен, что тут она была бы более уместной: https://electronix.ru/forum/index.php?showforum=192 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 7 августа, 2018 Опубликовано 7 августа, 2018 · Жалоба Мне одному кажется, что эта тема к Keil как таковому практически не имеет отношения? Уверен, что тут она была бы более уместной: https://electronix.ru/forum/index.php?showforum=192 Согласен. Перенёс. Модератор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 7 августа, 2018 Опубликовано 7 августа, 2018 (изменено) · Жалоба Хотел промолчать, но не буду. У человека, который с помощью функции по указателю осуществляет из прерывания доступ к глобальной булевой по сути переменной большие проблемы. Это в будущем первый кандидат в секту "пресвятого инлайна". Ещё раз повторяю, это ПРИМЕР ДЛЯ ДЕМОНСТРАЦИИ ЭФФЕКТА, а не код реального проекта. Вот более приближенный к реальности код (ещё до исправления ошибки) // Тип состояния флага события typedef volatile enum { FLAG_STATE_OFF = 0, // Флаг события сброшен FLAG_STATE_ON = 1 // Флаг события взведён } Flag_State_t; // Клас с флагом события class SomeClass { static Flag_State_t Flag; // Флаг некоторого события // Далее идут прочие приватные члены класса // ... public: static void SetFlag (Flag_State_t NewState) {Flag=NewState;} static Flag_State_t GetFlag () {return Flag;} // Далее идут прочие публичные члены класса // ... }; // Обработчик какого-то прерывания void Some_IRQ_Handler () { // Делаем что-то // ... SomeClass::SetFlag (FLAG_STATE_ON); // Взводим флаг события // Делаем что-то // ... } // Статические данные-члены класса SomeClass Flag_State_t SomeClass::Flag=FLAG_STATE_OFF; int main (){ // Создаём объект и указатель на него SomeClass *Obj_p=new SomeClass; // Делаем что-то // ... // Ждем наступления события while (Obj_p->GetFlag ()==FLAG_STATE_OFF); Obj_p->SetFlag (FLAG_STATE_OFF); // Сбрасываем флаг // Событие произошло. Делаем что-то // ... delete Obj_p; // Разрушаем объект по указателю на него while(1); } Спасибо всем, кто отвечал по-существу. Понял свою ошибку, прошу прощения, исправлюсь, больше так не буду Изменено 8 августа, 2018 пользователем Professor Chaos Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться