|
Вопрос по volatile |
|
|
|
 |
Ответов
|
Jan 18 2017, 16:14
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-07-16
Пользователь №: 92 484

|
Цитата(jcxz @ Jan 16 2017, 14:19)  Атомарность тут не при чём. Компилятор может например перенести значение переменной в регистр. И будете Вы в неё писать хоть атомарно, хоть нет, обработчик прерывания этого не знает когда захочет её прочитать из памяти где осталось старое значение. Если переменная не объявлена как регистЕр, то никуда компилятор её не перенесёт. Не вводите людей в заблуждение. А если я работаю с переменной через указатель на неё, то что? Я должен такую переменную объявлять как волатайл? Цитата(gerber @ Jan 16 2017, 17:55)  Компилятор (и примкнувший к нему линкер) вообще ничего не знают про прерывания. Есть только функции, расположенные по определенным адресам. А то, что эти функции могут обрабатывать прерывания, и прерывать другие функции в любом месте, знает только разработчик на основе архитектуры контроллера, под который он пишет программу. А в вашем примере и volatile не спасет, так как суммирование x и чисел N1,N2,N3 неатомарно. Есть такая штука, называется "сохранение контекста прерванной задачи". Хотя конечно есть двухбайтовые команды работы напрямую с РВВ, обращение к которым должно происходить в соседних тактах процессора. Тогда ой. Нужно запрещать прерывания перед такой критической последовательностью команд. Иначе вообше может произойти катастрофа если прерывание разорвет двухбайтовую последовательность команд Цитата(Alt.F4 @ Jan 17 2017, 22:45)  jcxz, вот именное такие: "например можете в цикле ждать когда установится некий флажок" (цитирую Вас же).
RobFPGA, по идее вообще без разницы, где эта переменная будет изменяться, что-то мы ходим по кругу...
Проблема: компилятор оптимизируя вырезает кусок кода считая его лишним. На основании чего он это делает? Он знает, что некая переменная имеет в текущий момент определенное состояние. Значит, если на входе функции мы не присваиваем ей какое либо значение и затем не проверяем эту переменную на другие значения (что для компилятора кажется безумным и он это режет), то и volatile не нужен. Именно так. Именно для этого введен волатйл. Чтобы запретить компилятору "оптимизировать" (чаще всего просто удалять) куски кода, которые содержат якобы не изменяемые и не используемые переменные
|
|
|
|
Сообщений в этой теме
Alt.F4 Вопрос по volatile Jan 14 2017, 09:00 Lagman Для 51 в кейле такое объяснение http://www.keil.co... Jan 14 2017, 18:17 XVR Чтения этих переменных делается напрямую или тоже ... Jan 15 2017, 20:39 Alt.F4 Если вообще смотреть на проблемы в примерах, то он... Jan 15 2017, 21:05  zltigo Цитата(Укушенный воблой @ Jan 18 2017, 18... Jan 18 2017, 17:06   Baser Цитата(zltigo @ Jan 18 2017, 19:06) Никак... Jan 18 2017, 18:09 SlavaV Тогда и я своё видение изложу
В документацию не л... Jan 16 2017, 14:43 jcxz Цитата(SlavaV @ Jan 16 2017, 17:43) PS а ... Jan 16 2017, 15:00 SlavaV Переменная не "путешествует" во время вы... Jan 16 2017, 15:14 jcxz Цитата(SlavaV @ Jan 16 2017, 18:14) Перем... Jan 16 2017, 15:41 SlavaV int x;
void f()
{
x += N1; //1
...
x += N2; //2... Jan 16 2017, 15:55 Сергей Борщ QUOTE (SlavaV @ Jan 16 2017, 17:55) вы сч... Jan 16 2017, 16:44 gerber Цитата(SlavaV @ Jan 16 2017, 18:55) вы сч... Jan 16 2017, 16:55  jcxz Цитата(gerber @ Jan 16 2017, 19:55) А в в... Jan 16 2017, 17:40 Alt.F4 Снова приведен пример, как и во всех статьях. В ре... Jan 16 2017, 17:10 XVR Пример (https://gcc.godbolt.org/)
Код (компилятор ... Jan 16 2017, 19:03 Alt.F4 Цитата... Дальше например можете в цикле ждать ког... Jan 17 2017, 07:57 jcxz Цитата(Alt.F4 @ Jan 17 2017, 10:57) Если ... Jan 17 2017, 14:01 RobFPGA Приветствую!
Не забывайте о том что не только... Jan 17 2017, 14:20 Alt.F4 jcxz, вот именное такие: "например можете в ц... Jan 17 2017, 21:45 jcxz Цитата(Alt.F4 @ Jan 18 2017, 00:45) Значи... Jan 18 2017, 08:39 Kabdim А если включить lto то оптимизироваться будет совс... Jan 18 2017, 08:44 Alt.F4 jcxz, сейчас я тоже начну вас оскорблять
Изменять... Jan 18 2017, 10:53 jcxz Цитата(Alt.F4 @ Jan 18 2017, 13:53) jcxz,... Jan 18 2017, 11:12 RobFPGA Приветствую!
Цитата(Alt.F4 @ Jan 18 2017... Jan 18 2017, 11:23 Alt.F4 jcxz, читаю "на входе в эту функцию, компилят... Jan 18 2017, 11:24 RobFPGA Приветствую!
Цитата(Alt.F4 @ Jan 18 2017,... Jan 18 2017, 11:49 Baser Цитата(Alt.F4 @ Jan 18 2017, 13:24) jcxz,... Jan 18 2017, 11:52 jcxz Цитата(Alt.F4 @ Jan 18 2017, 14:24) И как... Jan 18 2017, 14:05 Alt.F4 RobFPGA, думаю, если буфер объявлен глобально, то ... Jan 18 2017, 12:33 Baser Цитата(Alt.F4 @ Jan 18 2017, 14:33) Ну ка... Jan 18 2017, 14:06  RobFPGA Приветствую!
Цитата(Baser @ Jan 18 2017, ... Jan 18 2017, 15:08 aiwa Цитата(Alt.F4 @ Jan 17 2017, 23:45) RobFP... Jan 18 2017, 13:54 DASM Господа никогда не понимал таких споров. Процесс в... Jan 18 2017, 14:32 Baser Цитата(RobFPGA @ Jan 18 2017, 17:08) Прос... Jan 18 2017, 16:38 Укушенный воблой А если я работаю с переменной через указатель на н... Jan 18 2017, 18:31 jcxz Цитата(Укушенный воблой @ Jan 18 2017, 21... Jan 19 2017, 07:37 aiwa Цитата(Укушенный воблой @ Jan 18 2017, 20... Jan 18 2017, 22:36 Укушенный воблой Цитата(aiwa @ Jan 18 2017, 22:36) Правила... Jan 19 2017, 04:18  XVR Цитата(Укушенный воблой @ Jan 19 2017, 07... Jan 19 2017, 06:34   Укушенный воблой Цитата(XVR @ Jan 19 2017, 06:34) Нет. Ком... Jan 19 2017, 17:24    XVR Цитата(Укушенный воблой @ Jan 19 2017, 20... Jan 19 2017, 19:21     Укушенный воблой Цитата(XVR @ Jan 19 2017, 20:21) Так не б... Jan 19 2017, 19:42      XVR Цитата(Укушенный воблой @ Jan 19 2017, 22... Jan 19 2017, 19:52 Alt.F4 jcxz, а мне Ваши примеры напоминают троллинг, повт... Jan 19 2017, 06:54 jcxz Цитата(Alt.F4 @ Jan 19 2017, 09:54) jcxz,... Jan 19 2017, 07:09 jcxz Цитата(Alt.F4 @ Jan 19 2017, 09:54) Да и ... Jan 19 2017, 07:18 Сергей Борщ QUOTE (Alt.F4 @ Jan 19 2017, 08:54) Пока ... Jan 19 2017, 07:11 Alt.F4 ЦитатаОчевидно что Вы и читать исходники не умеете... Jan 19 2017, 07:32 Укушенный воблой Вы ошибаетесь.
Просто я не хочу обсуждать вкус уст... Jan 19 2017, 20:30 XVR Цитата(Укушенный воблой @ Jan 19 2017, 23... Jan 20 2017, 09:40  AHTOXA Цитата(XVR @ Jan 20 2017, 14:40) Требую п... Jan 20 2017, 11:19   zltigo Цитата(AHTOXA @ Jan 20 2017, 13:19) Ну вы... Jan 20 2017, 20:21 aiwa Цитата(Alt.F4 @ Jan 19 2017, 09:32) Я не ... Jan 20 2017, 04:17 jcxz Цитата(aiwa @ Jan 20 2017, 07:17) res_yes... Jan 20 2017, 10:03 Укушенный воблой Цитата(aiwa @ Jan 20 2017, 05:17) 2. втор... Jan 21 2017, 09:09  XVR Цитата(Укушенный воблой @ Jan 21 2017, 12... Jan 23 2017, 10:13 ViKo Побейтесь еще за пустой мешок! Jan 20 2017, 09:57 aiwa Цитата(jcxz @ Jan 20 2017, 12:03) Здесь к... Jan 20 2017, 10:28 sigmaN Цитата(Сергей Борщ @ Jan 19 2017, 10:11) ... Jan 22 2017, 17:59 Укушенный воблой Нет.
Если с умом подходить к разработке программ... Jan 25 2017, 15:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|