Если она обрабатывается в прерывании, она должна быть глобальной.shads писал(а): НО она обрабатывается в прерывании, значит - должна быть volatile.
Вопросы по С/С++ (СИ)
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: Вопросы по С/С++ (СИ)
«И всё-таки она вертится!»
- Реклама
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Вопросы по С/С++ (СИ)
спасибо, примерно так и думал. *в прерывании она не обрабатывается. только в main()
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
Re: Вопросы по С/С++ (СИ)
А ну да.... сморосил.Apparatchik писал(а):Если она обрабатывается в прерывании, она должна быть глобальной.
Re: Вопросы по С/С++ (СИ)
вопрос для владельцев мс вс 2010
вот нет ли у кого своего шаблона solution, который настроен так, чтобы студия не создава кучу всяких мелких файлов?
это очень сильно тормозит сборку каждый раз и мешает, а читать про все параметры мне лень и даже в гугле не могу нормально сделать запрос
может кто уже заранее сделал себе с++ шаблон новых проектов?
вот нет ли у кого своего шаблона solution, который настроен так, чтобы студия не создава кучу всяких мелких файлов?
это очень сильно тормозит сборку каждый раз и мешает, а читать про все параметры мне лень и даже в гугле не могу нормально сделать запрос
может кто уже заранее сделал себе с++ шаблон новых проектов?
тематические ответы только в форуме, в приват не пишите
Re: Вопросы по С/С++ (СИ)
вот еще вопрос про енум
внезапно я кажется понял смысл этой штуки
enum {
FT_OK,
FT_INVALID_HANDLE,
FT_DEVICE_NOT_FOUND,
FT_DEVICE_NOT_OPENED,
FT_IO_ERROR,
тут компилятор как бы автоматом присваивает строкам номера от 0?
т.е. я мог бы тупо сделать так:
#define FT_OK 0
#define FT_INVALID_HANDLE 1
и потом уже тупо юзать эти дефайны?
в быдлокнижках давно читал, но нихера не понял
сейчас смотрел хедер один и вроде бы озарило
правильно ли меня озарило или это мне гавно на бошку упало?
внезапно я кажется понял смысл этой штуки
enum {
FT_OK,
FT_INVALID_HANDLE,
FT_DEVICE_NOT_FOUND,
FT_DEVICE_NOT_OPENED,
FT_IO_ERROR,
тут компилятор как бы автоматом присваивает строкам номера от 0?
т.е. я мог бы тупо сделать так:
#define FT_OK 0
#define FT_INVALID_HANDLE 1
и потом уже тупо юзать эти дефайны?
в быдлокнижках давно читал, но нихера не понял
сейчас смотрел хедер один и вроде бы озарило
правильно ли меня озарило или это мне гавно на бошку упало?
тематические ответы только в форуме, в приват не пишите
- Реклама
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Правильно то правильно озарило, только у енума есть еще один важный плюс- при использовании его внутри оператора switch и вы( случайно или специально ) опустили один из пунктов, то есть вероятность того, что компилятор вас предупредит об этом.
А так же, если вам вдруг понадобится добавить один или несколько пунктов в него, то не нужно задаваться задачей определить свободный номер.
А так же, если вам вдруг понадобится добавить один или несколько пунктов в него, то не нужно задаваться задачей определить свободный номер.
Re: Вопросы по С/С++ (СИ)
какой еще пункт?vitalik_1984 писал(а):опустили один из пунктов,
так при дефайнах я тоже могу тупо в конец дописать и дать новый номерvitalik_1984 писал(а):то не нужно задаваться задачей определить свободный номер.
тематические ответы только в форуме, в приват не пишите
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
можешь. Но чем меньше текста, тем меньше ошибок, при перечислении текста меньше.
И как говорит мой шеф - "никаких абсолютных значений в тексте !!!"
Вариант
switch(mode)
case 0:
funct();
break;
смотрится хуже, чем
switch(mode)
case FR_OK:
funct();
break;
При перечислении может задаваться начальный элемент, он не обязательно равен 0.
И как говорит мой шеф - "никаких абсолютных значений в тексте !!!"
Вариант
switch(mode)
case 0:
funct();
break;
смотрится хуже, чем
switch(mode)
case FR_OK:
funct();
break;
При перечислении может задаваться начальный элемент, он не обязательно равен 0.
Re: Вопросы по С/С++ (СИ)
так я и говорю, что я могу FR_OK задефайнить сам без перечислятораurry писал(а):смотрится хуже, чем
switch(mode)
case FR_OK:
смотрится оно конечно лучше
тематические ответы только в форуме, в приват не пишите
Re: Вопросы по С/С++ (СИ)
На всякий случай. Если вам понадобится изменить нумерацию, в любом месте нумератора можете присвоить иное значение счетчика перечисления, следующий элемент будет именно следующим за этим значением.kalobyte писал(а):enum {
FT_OK,
FT_INVALID_HANDLE,
FT_DEVICE_NOT_FOUND,
FT_DEVICE_NOT_OPENED,
FT_IO_ERROR,
тут компилятор как бы автоматом присваивает строкам номера от 0?
С уважением,
Виктор.
Виктор.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Ещё отличие от дефайнов, в том, что перечисление можно передавать (либо возвращать) в функцию в качестве аргумента:
Код: Выделить всё
/***************************************/
typedef enum{
FT_OK,
FT_INVALID_HANDLE,
FT_DEVICE_NOT_FOUND,
FT_DEVICE_NOT_OPENED,
FT_IO_ERROR,
}en_t;
/***************************************/
/***************************************/
void fun(en_t en){
switch(en){
case FT_OK:
break;
case FT_INVALID_HANDLE:
break;
case FT_DEVICE_NOT_FOUND:
break;
case FT_DEVICE_NOT_OPENED:
break;
case FT_IO_ERROR:
break;
}
}
/***************************************/
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Еще одно важное замечание- с enum можно давать одни и те же названия разным функциям с разным количеством состояний
например
причем эти два status_ok имеют под собой разные номера. Конечно кто то может сказать, что желательно избегать спорных ситуаций чтения программы, но мы сейчас говорим про отличия использования определений против перечисления.
например
Код: Выделить всё
if gps(status_ok){ usart_send(status_ok) };
Re: Вопросы по С/С++ (СИ)
Совершенно непонятно.
Как это можно?
Вообще-то наиболее частое применение нумератора - это создание собственного типа данных, а не замена дефайнов.
Как это можно?
Как это увязать с приведенным примером?можно давать одни и те же названия разным функциям
Вообще-то наиболее частое применение нумератора - это создание собственного типа данных, а не замена дефайнов.
С уважением,
Виктор.
Виктор.
Re: Вопросы по С/С++ (СИ)
а struct тогда для чего?ut1wpr писал(а):Вообще-то наиболее частое применение нумератора - это создание собственного типа данных, а не замена дефайнов.
в енум нельзя же создать массив, это просто автоматический нумератор для буквенных значений, когда тебе не важно сами значения, а нужны просто буквенные идентификаторы для удобства чтения кода
тематические ответы только в форуме, в приват не пишите
Re: Вопросы по С/С++ (СИ)
Согласно определения - для создания структур. Объяснять назначение структуры и ее отличие от перечисляемого типа не стану. Описано у классиков.kalobyte писал(а):а struct тогда для чего?
Совершенно неправильное понимание. Мне никто не запретит создать массив переменных с перечисляемым типом и работать с ним, как обычно.в енум нельзя же создать массив, это просто автоматический нумератор для буквенных значений, когда тебе не важно сами значения, а нужны просто буквенные идентификаторы для удобства чтения кода
ЗЫ Если бы моя воля, я бы за твой ник спецприз бы выдал. Я на полном серъезе. Великолепная игра букв! Я в восторге!
С уважением,
Виктор.
Виктор.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Вопросы по С/С++ (СИ)
Код: Выделить всё
typedef enum {Mo, Tu, We, Th, Fr, Sa, Su}days
days today = Mo;
while(1)
{
while(today < Su)
{
if(today <= Fr) IdiNaRabotu();
else Rasslabon();
if(today == Fr) PosleRabotyBuhaj();
today++;
}
NeBuhaj();
today = Mo;
}Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Хороший пример, показывающий назначение enum.
Только, наверное, нужно так:Иначе Rasslabon будет только в субботу 
Хотя, может это и хорошо, иначе в понедельник IdiNaRabotu будет невозможно
Только, наверное, нужно так:
Код: Выделить всё
while(today <= Su)
{
Хотя, может это и хорошо, иначе в понедельник IdiNaRabotu будет невозможно
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Вопросы по С/С++ (СИ)
в воскресенье NeBuhaj(); и счетчик не считает, т.к. воскресенье пролетает незаметно 
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
-
HF_Cat
- Первый раз сказал Мяу!
- Сообщения: 37
- Зарегистрирован: Ср июл 28, 2010 20:29:22
- Откуда: Ukraine
Re: Вопросы по С/С++ (СИ)
Пишу прогу на Си в AVR Studio 4 - динамическую индикацию на 7сегм-ных индикаторах. Нужно оформить вывод данных на этот дисплей как отдельную функцию. Часть программы по выводу на дисплей выполняется в прерывании по OVF_T0, а часть - вне прерывания. Не нашёл как оформить функцию, которая бы вмещала обе части программы по индикации на "дисплей". Подскажите как или скажите где почитать.
СПС
СПС
Re: Вопросы по С/С++ (СИ)
Может это как то поможет.....
http://chipenable.ru/index.php/programm ... kator.html
http://chipenable.ru/index.php/programm ... kator.html


