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

 
 
> Обычная переменная для ISR и volatile для всех остальных, как лучше реализовать?
sonycman
сообщение Jan 24 2009, 15:32
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Что-то вот задумался над одной мелочью, в принципе.
Есть переменная таймера, которая объявлена как volatile, так как модифицируется в обработчике прерывания.

Всё бы хорошо, да только хотелось бы, чтобы эта переменная была volatile для всех, кроме самого обработчика прерываний, так как лишние сохранения/загрузки в нём - это совершенно лишнее. smile.gif

Есть мысля сделать так:
Код
union {
dword isr_timer;
volatile dword timer;
}

и в ISR юзать isr_timer, а в других местах - просто timer.

Что скажете?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kimstik
сообщение Jan 25 2009, 17:31
Сообщение #2


Участник
*

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



точно не помню sad.gif но нарывался уже на непонимание анонимного union, и вроде как даже не в одном месте. И это был С без плюсов.
zltigo: вам виднее,и спорить не хочется. мне лично две длинные переменные вместо одной короткой - лишняя сущность (по оккаму).
Тем не менее хочется отметить что вы везунчик - у вас есть выбор как минимум из 3х подходов реализации задачи smile.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 25 2009, 18:48
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(kimstik @ Jan 25 2009, 21:31) *
точно не помню sad.gif но нарывался уже на непонимание анонимного union, и вроде как даже не в одном месте. И это был С без плюсов.

Но разве безымянные объединения не являются фичей исключительно C++?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 25 2009, 19:50
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(sonycman @ Jan 25 2009, 21:48) *
Но разве безымянные объединения не являются фичей исключительно C++?
Не только.
Насколько я ничего не помню, в С безымянные структуры могут быть,
но они должны обязательно включаться в конечном итоге в именованные структуры или объединения.
типа:
Код
struct
{
  union
  {
    int a;
    char c[2];
  };
  int b;
} w;

только с безымянными объединениями нужно в любом случае быть очень аккуратными...
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 25 2009, 21:08
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



И раз уж зашла речь о безымянных обединениях и структурах, вот такой пример:
Код
volatile union
{
  struct
  {
    int a;
    union
    {
      int a;
      int b;
    };
  };
  int b;
  int c;
} t;

volatile int A, B, C;

int main()
{
  t.a = 1;
  t.b = 2;
  t.c = 3;

  A = t.a;
  B = t.b;
  C = t.c;

  return 0;
}
Чему будут равны A,B,C в конце main ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 25 2009, 21:19
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Jan 26 2009, 00:08) *
Чему будут ...

Для начала эта мусорная структура не должна откомпилироваться.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 25 2009, 21:40
Сообщение #7


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Jan 26 2009, 00:19) *
Для начала эта мусорная структура не должна откомпилироваться.

во-первых многие компиляторы сожрут и не подавятся... я пробовал.
хотя согласен что я слегка перестарался...

а что скажут компиляторы на вот такую структуру:
Код
volatile union
{
  struct
  {
    int b;
    union
    {
      int a;
      int b;
    };
  };
  int c;
} t;
?
только попробуйте сначала реально скомпилить прежде чем говорить что не скомпилит.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 25 2009, 21:51
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(singlskv @ Jan 26 2009, 00:40) *
только попробуйте сначала реально скомпилить прежде чем говорить что не скомпилит.
1. Multiple declaration for 'b'
2. "b" has already been declared in the current scope
3. Duplicate name 'b' not allowed in struct or union
Что было видно и без попыток скомпилировать сие тремя компиляторами. Начиная с самого древнего и кривого BCC.

 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sonycman   Обычная переменная для ISR и volatile для всех остальных   Jan 24 2009, 15:32
- - kimstik   ISR сделай в отдельном файле и используй как dword...   Jan 24 2009, 16:43
|- - sonycman   Цитата(kimstik @ Jan 24 2009, 20:43) ISR ...   Jan 24 2009, 17:47
|- - ReAl   Цитата(sonycman @ Jan 24 2009, 19:47) А я...   Jan 24 2009, 20:39
- - Сергей Борщ   Цитата(sonycman @ Jan 24 2009, 17:32) Что...   Jan 24 2009, 18:33
|- - sonycman   Цитата(Сергей Борщ @ Jan 24 2009, 22:33) ...   Jan 24 2009, 19:51
- - singlskv   А я вот чего-то совсем не припоминаю из стандарта ...   Jan 24 2009, 18:55
|- - Сергей Борщ   Цитата(singlskv @ Jan 24 2009, 20:55) А я...   Jan 24 2009, 19:39
|- - singlskv   Цитата(Сергей Борщ @ Jan 24 2009, 22:39) ...   Jan 24 2009, 19:53
|- - sonycman   Цитата(singlskv @ Jan 24 2009, 23:53) Без...   Jan 24 2009, 19:55
- - zltigo   Цитата(sonycman @ Jan 24 2009, 18:32) Что...   Jan 24 2009, 19:04
- - sonycman   Хм, спасибо! Если будут проблемы с extern, то ...   Jan 24 2009, 22:12
- - kimstik   Я стараюсь union реже использовать - это одна из с...   Jan 25 2009, 11:43
|- - sonycman   Цитата(kimstik @ Jan 25 2009, 15:43) Я ст...   Jan 25 2009, 12:42
|- - zltigo   Цитата(kimstik @ Jan 25 2009, 14:43) Длин...   Jan 25 2009, 13:21
|- - 777777   А ты не пробовал объявлять ее вообще без volatile?...   Jan 26 2009, 07:51
|- - Сергей Борщ   Цитата(777777 @ Jan 26 2009, 09:51) А ты ...   Jan 26 2009, 08:20
||- - 777777   Цитата(Сергей Борщ @ Jan 26 2009, 11:20) ...   Jan 26 2009, 17:45
||- - sonycman   Цитата(777777 @ Jan 26 2009, 21:45) Но с ...   Jan 26 2009, 18:56
||- - Сергей Борщ   Цитата(777777 @ Jan 26 2009, 19:45) А так...   Jan 26 2009, 19:18
|- - sonycman   Цитата(777777 @ Jan 26 2009, 11:51) А ты ...   Jan 26 2009, 11:38
|- - _Pasha   Цитата(sonycman @ Jan 26 2009, 14:38) Код...   Jan 26 2009, 11:55
|- - Сергей Борщ   Цитата(_Pasha @ Jan 26 2009, 13:55) Порти...   Jan 26 2009, 13:24
|- - sonycman   Цитата(_Pasha @ Jan 26 2009, 15:55) Пусть...   Jan 26 2009, 14:02
|- - _Pasha   Цитата(sonycman @ Jan 26 2009, 18:02) Тог...   Jan 26 2009, 14:40
|- - Сергей Борщ   Цитата(_Pasha @ Jan 26 2009, 16:40) Согла...   Jan 26 2009, 15:20
|- - _Pasha   Цитата(Сергей Борщ @ Jan 26 2009, 18:20) ...   Jan 26 2009, 15:40
|- - singlskv   Цитата(zltigo @ Jan 26 2009, 00:51) Что б...   Jan 25 2009, 22:10
|- - zltigo   Цитата(singlskv @ Jan 26 2009, 01:10) Vis...   Jan 25 2009, 22:33
|- - singlskv   Цитата(zltigo @ Jan 26 2009, 01:33) Ну фи...   Jan 25 2009, 22:39
|- - zltigo   Цитата(singlskv @ Jan 26 2009, 01:39) Стр...   Jan 25 2009, 22:42
- - kimstik   живодеры!! вот увидете - перестанет компил...   Jan 25 2009, 21:53


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

 


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


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