|
Использование static переменных |
|
|
|
 |
Ответов
|
Oct 10 2010, 10:03
|

Профессионал
    
Группа: Участник
Сообщений: 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 и поэтому из той функции недоступна.
|
|
|
|
Сообщений в этой теме
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 GetSmart Я уже потерял суть спора. Чё не нравится? В смысле... Oct 11 2010, 07:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|