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

 
 
> Использование static переменных
777777
сообщение Oct 7 2010, 15:41
Сообщение #1


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Сергей Борщ @ Oct 7 2010, 00:09)
Оптимизатор вполне может выкинуть запись в любую переменную, будь то обычный int или массив, если он видит, что результат такой записи не используется (а с его точки зрения он не используется).


Насчет любой переменной вы погорячились - значения static переменных сохраняются даже после выхода из функции и будут иметь его при повторном входе в эту функцию.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Oct 9 2010, 22:17
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Чтобы прерывания правильно обрабатывали глобальные переменные, меняющиеся вне прерывания, эти переменные должны быть волатильными. Есть такое правило.
Формально, p_a является волатильной и даже указывает (должна) на волатильную переменную, но в реале указывает на неволатильную. При присваивании p_a = &a должен был появиться варнинг. А в остальном, компилятор работая с "а" всё делает верно. Если бы между cli/sti был вызов функции, то перед вызовом в "а" была бы записана двойка.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
777777
сообщение Oct 10 2010, 10:03
Сообщение #3


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(GetSmart @ Oct 10 2010, 02:17) *
Чтобы прерывания правильно обрабатывали глобальные переменные, меняющиеся вне прерывания, эти переменные должны быть волатильными. Есть такое правило.

Обалденное определение, мне нравится. А что значит "правильно обрабатывали"? А как можно обрабатывать неправильно?
Вообще-то у него есть строго определенное значение: оно заставляет компилятор предполагать, что значение этой переменной может меняться само по себе, помимо хода выполнения программы:
Цитата
An object that has volatile-qualified type may be modified in ways unknown to the implementation or have other unknown side effects. Therefore any expression referring to such an object shall be evaluated strictly according to the rules of the abstract machine, as described in 5.1.2.3. Furthermore, at every sequence point the value last stored in the object shall agree with that prescribed by the abstract machine, except as modified by the unknown factors mentioned previously. What constitutes an access to an object that has volatile-qualified type is implementation-defined.

Таким образом, volatile должны быть объявлены только те переменные, которые с точки зрения компилятора не меняются исходя из транслироемого кода.


Цитата(GetSmart @ Oct 10 2010, 02:17) *
Если бы между cli/sti был вызов функции, то перед вызовом в "а" была бы записана двойка.

Вообще говоря да, компилятор обязан предположить, что 'a' может потребоваться в той функции, но в данном случае она static и поэтому из той функции недоступна.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 777777   Использование static переменных   Oct 7 2010, 15:41
- - rezident   Не совсем понятно из какого топика вырвана эта цит...   Oct 7 2010, 16:14
|- - 777777   Цитата(rezident @ Oct 7 2010, 20:14) Не с...   Oct 7 2010, 16:32
|- - rezident   Цитата(777777 @ Oct 7 2010, 22:32) И обра...   Oct 7 2010, 16:43
- - Сергей Борщ   Цитата(777777 @ Oct 7 2010, 18:41) Насчет...   Oct 7 2010, 17:11
|- - 777777   Ну раз пошла такая пьянка (с привлечением стандарт...   Oct 8 2010, 09:46
|- - aesok   Цитата(777777 @ Oct 8 2010, 13:46) Таким ...   Oct 8 2010, 10:02
||- - 777777   Цитата(aesok @ Oct 8 2010, 14:02) Проверт...   Oct 8 2010, 10:16
||- - aesok   ну и еще один пример тогда, конечно с -Os: Код#in...   Oct 8 2010, 10:22
|||- - aesok   Код#include <avr/io.h> #include <avr/i...   Oct 9 2010, 22:02
|||- - 777777   Цитата(aesok @ Oct 10 2010, 02:02) Правил...   Oct 10 2010, 08:57
|||- - demiurg_spb   Цитата(777777 @ Oct 10 2010, 12:57) Разум...   Oct 10 2010, 12:31
|||- - 777777   Цитата(demiurg_spb @ Oct 10 2010, 16:31) ...   Oct 11 2010, 04:30
|||- - GetSmart   Цитата(777777 @ Oct 11 2010, 09:30) Стати...   Oct 11 2010, 04:41
||||- - 777777   Цитата(GetSmart @ Oct 11 2010, 08:41) Ста...   Oct 11 2010, 07:36
|||- - demiurg_spb   Цитата(777777 @ Oct 11 2010, 08:30) А для...   Oct 11 2010, 08:58
||||- - 777777   Цитата(demiurg_spb @ Oct 11 2010, 12:58) ...   Oct 11 2010, 10:20
||||- - demiurg_spb   Цитата(777777 @ Oct 11 2010, 14:20) Ну, е...   Oct 11 2010, 12:49
|||- - halfdoom   Цитата(777777 @ Oct 11 2010, 07:30) Стати...   Oct 11 2010, 10:52
|||- - GetSmart   Цитата(halfdoom @ Oct 11 2010, 15:52) Ори...   Oct 11 2010, 10:58
|||- - 777777   Цитата(halfdoom @ Oct 11 2010, 14:52) Ори...   Oct 11 2010, 11:10
|||- - halfdoom   Цитата(777777 @ Oct 11 2010, 14:10) Ключе...   Oct 11 2010, 11:18
|||- - GetSmart   Цитата(777777 @ Oct 11 2010, 16:10) ... П...   Oct 11 2010, 11:25
||- - Petka   Цитата(777777 @ Oct 8 2010, 14:16) Код#in...   Oct 8 2010, 12:28
|- - ReAl   Цитата(777777 @ Oct 8 2010, 12:46) Понрав...   Oct 8 2010, 12:46
|- - SasaVitebsk   Цитата(777777 @ Oct 8 2010, 12:46) Понрав...   Oct 8 2010, 23:03
- - SasaVitebsk   В целом я согласен с Сергей Борщ. Особенно зная ег...   Oct 7 2010, 18:19
|- - Itch   Цитата(SasaVitebsk @ Oct 8 2010, 01:19) Н...   Oct 8 2010, 01:01
- - rezident   Цитата(aesok @ Oct 8 2010, 16:02) Проверт...   Oct 8 2010, 11:52
|- - Сергей Борщ   Цитата(rezident @ Oct 8 2010, 14:52) Она ...   Oct 8 2010, 13:46
|- - rezident   Цитата(Сергей Борщ @ Oct 8 2010, 19:46) Д...   Oct 8 2010, 13:54
|- - Petka   Цитата(rezident @ Oct 8 2010, 17:54) Не е...   Oct 8 2010, 14:10
||- - rezident   Цитата(Petka @ Oct 8 2010, 20:10) На любо...   Oct 8 2010, 15:01
||- - MALLOY2   Не зряж в IAR введен Extended keyword __root с пом...   Oct 8 2010, 15:21
|- - Oldring   Цитата(rezident @ Oct 8 2010, 17:54) Не е...   Oct 8 2010, 14:51
|- - MrYuran   Цитата(rezident @ Oct 8 2010, 17:54) Не е...   Oct 11 2010, 08:10
|- - aesok   Цитата(GetSmart @ Oct 10 2010, 02:17) Что...   Oct 9 2010, 22:32
|- - _Pasha   Цитата(777777 @ Oct 10 2010, 14:03) компи...   Oct 10 2010, 12:07
- - GetSmart   Я уже потерял суть спора. Чё не нравится? В смысле...   Oct 11 2010, 07:55


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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:13
Рейтинг@Mail.ru


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