реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Warning: #962-D: use of a type with no linkage to declare a function, О чем предупреждает Кейл? Что ему не нравится?
Forger
сообщение Aug 6 2018, 20:14
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Professor Chaos @ Aug 6 2018, 22:57) *
Это был вопрос по-существу. На который нужен был ответ по-существу.

Тут все ТС считают, что их вопросы - вопросы по-существу, и всем соотв. нужны аналогичные ответы ...
Но на практике не все так очевидно wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 7 2018, 00:27
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Professor Chaos @ Aug 6 2018, 21:31) *
Вот исправленный код, на который у компилятора нет предупреждений. Обратите внимание, что параметры функций имеют спецификатор 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 - четыре совершенно разные сущности.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Aug 7 2018, 01:41
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(Professor Chaos @ Aug 6 2018, 21:31) *
СТРОГО ПО-СУЩЕСТВУ ЗАДАННОГО ВОПРОСА
Строго по существу - в вашем примере volatile вообще нигде не нужен! Но мы люди опытные и понимаем, что дальше вы наговнокодите прерывание, которое флаги будет менять. Поэтому и посоветовали поставить volatile в единственно верное место - определение переменных MyFlag.
Дожились, каждый говнокодер ещё и поучать будет...
Go to the top of the page
 
+Quote Post
Professor Chaos
сообщение Aug 7 2018, 02:35
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 25-08-17
Пользователь №: 98 970



Цитата(VladislavS @ Aug 7 2018, 04:41) *
в вашем примере volatile вообще нигде не нужен! Но мы люди опытные и понимаем, что дальше вы наговнокодите прерывание, которое флаги будет менять.

В своём первом сообщении я об этом прямо сказал, когда объяснял, зачем мне нужен volatile. Догадываться не надо - всё написано.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Aug 7 2018, 02:59
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Не надо нас лечить, лучше принимайте советы к исполнению.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 7 2018, 06:07
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Professor Chaos @ Aug 6 2018, 22:57) *
Но количество таких ответов, относительно общего количества ответов, можно расценивать и как результат некоего спонтанного теста biggrin.gif

Очередной деятель которому все должны.....
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Aug 7 2018, 06:24
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Хотел промолчать, но не буду. У человека, который с помощью функции по указателю осуществляет из прерывания доступ к глобальной булевой по сути переменной большие проблемы. Это в будущем первый кандидат в секту "пресвятого инлайна".
Go to the top of the page
 
+Quote Post
Forger
сообщение Aug 7 2018, 07:31
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Мне одному кажется, что эта тема к Keil как таковому практически не имеет отношения?
Уверен, что тут она была бы более уместной: https://electronix.ru/forum/index.php?showforum=192


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Aug 7 2018, 18:44
Сообщение #24


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Forger @ Aug 7 2018, 10:31) *
Мне одному кажется, что эта тема к Keil как таковому практически не имеет отношения?
Уверен, что тут она была бы более уместной: https://electronix.ru/forum/index.php?showforum=192

Согласен. Перенёс.
Модератор.
Go to the top of the page
 
+Quote Post
Professor Chaos
сообщение Aug 7 2018, 19:33
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 25-08-17
Пользователь №: 98 970



Цитата(VladislavS @ Aug 7 2018, 09:24) *
Хотел промолчать, но не буду. У человека, который с помощью функции по указателю осуществляет из прерывания доступ к глобальной булевой по сути переменной большие проблемы. Это в будущем первый кандидат в секту "пресвятого инлайна".

Ещё раз повторяю, это ПРИМЕР ДЛЯ ДЕМОНСТРАЦИИ ЭФФЕКТА, а не код реального проекта.
Вот более приближенный к реальности код (ещё до исправления ошибки)
Код
// Тип состояния флага события
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);
}


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

Сообщение отредактировал Professor Chaos - Aug 8 2018, 03:08
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 20:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016