Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

shads писал(а): НО она обрабатывается в прерывании, значит - должна быть volatile.
Если она обрабатывается в прерывании, она должна быть глобальной.
«И всё-таки она вертится!»
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

Сообщение slavokhire5 »

спасибо, примерно так и думал. *в прерывании она не обрабатывается. только в main()
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Реклама
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

Apparatchik писал(а):Если она обрабатывается в прерывании, она должна быть глобальной.
А ну да.... сморосил.
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

вопрос для владельцев мс вс 2010
вот нет ли у кого своего шаблона solution, который настроен так, чтобы студия не создава кучу всяких мелких файлов?
это очень сильно тормозит сборку каждый раз и мешает, а читать про все параметры мне лень и даже в гугле не могу нормально сделать запрос

может кто уже заранее сделал себе с++ шаблон новых проектов?
тематические ответы только в форуме, в приват не пишите
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

вот еще вопрос про енум
внезапно я кажется понял смысл этой штуки

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
и потом уже тупо юзать эти дефайны?

в быдлокнижках давно читал, но нихера не понял
сейчас смотрел хедер один и вроде бы озарило
правильно ли меня озарило или это мне гавно на бошку упало?
тематические ответы только в форуме, в приват не пишите
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Правильно то правильно озарило, только у енума есть еще один важный плюс- при использовании его внутри оператора switch и вы( случайно или специально ) опустили один из пунктов, то есть вероятность того, что компилятор вас предупредит об этом.
А так же, если вам вдруг понадобится добавить один или несколько пунктов в него, то не нужно задаваться задачей определить свободный номер.
Контактная информация:
Реклама
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

vitalik_1984 писал(а):опустили один из пунктов,
какой еще пункт?
vitalik_1984 писал(а):то не нужно задаваться задачей определить свободный номер.
так при дефайнах я тоже могу тупо в конец дописать и дать новый номер
тематические ответы только в форуме, в приват не пишите
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

можешь. Но чем меньше текста, тем меньше ошибок, при перечислении текста меньше.
И как говорит мой шеф - "никаких абсолютных значений в тексте !!!"
Вариант
switch(mode)
case 0:
funct();
break;

смотрится хуже, чем

switch(mode)
case FR_OK:
funct();
break;


При перечислении может задаваться начальный элемент, он не обязательно равен 0.
Контактная информация:
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

urry писал(а):смотрится хуже, чем

switch(mode)
case FR_OK:
так я и говорю, что я могу FR_OK задефайнить сам без перечислятора
смотрится оно конечно лучше
тематические ответы только в форуме, в приват не пишите
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

kalobyte писал(а):enum {
FT_OK,
FT_INVALID_HANDLE,
FT_DEVICE_NOT_FOUND,
FT_DEVICE_NOT_OPENED,
FT_IO_ERROR,
тут компилятор как бы автоматом присваивает строкам номера от 0?
На всякий случай. Если вам понадобится изменить нумерацию, в любом месте нумератора можете присвоить иное значение счетчика перечисления, следующий элемент будет именно следующим за этим значением. :) Естественно и начинать можно не с нуля. Хозяин барин! Как хочу, так и ворочу. :)
С уважением,
Виктор.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Ещё отличие от дефайнов, в том, что перечисление можно передавать (либо возвращать) в функцию в качестве аргумента:

Код: Выделить всё

/***************************************/
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;
}
}
/***************************************/
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Еще одно важное замечание- с enum можно давать одни и те же названия разным функциям с разным количеством состояний
например

Код: Выделить всё

 
if gps(status_ok){ usart_send(status_ok) };
причем эти два status_ok имеют под собой разные номера. Конечно кто то может сказать, что желательно избегать спорных ситуаций чтения программы, но мы сейчас говорим про отличия использования определений против перечисления.
Контактная информация:
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

Совершенно непонятно.
Как это можно?
можно давать одни и те же названия разным функциям
Как это увязать с приведенным примером?
Вообще-то наиболее частое применение нумератора - это создание собственного типа данных, а не замена дефайнов.
С уважением,
Виктор.
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

ut1wpr писал(а):Вообще-то наиболее частое применение нумератора - это создание собственного типа данных, а не замена дефайнов.
а struct тогда для чего?
в енум нельзя же создать массив, это просто автоматический нумератор для буквенных значений, когда тебе не важно сами значения, а нужны просто буквенные идентификаторы для удобства чтения кода
тематические ответы только в форуме, в приват не пишите
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

kalobyte писал(а):а struct тогда для чего?
Согласно определения - для создания структур. Объяснять назначение структуры и ее отличие от перечисляемого типа не стану. Описано у классиков.
в енум нельзя же создать массив, это просто автоматический нумератор для буквенных значений, когда тебе не важно сами значения, а нужны просто буквенные идентификаторы для удобства чтения кода
Совершенно неправильное понимание. Мне никто не запретит создать массив переменных с перечисляемым типом и работать с ним, как обычно.

ЗЫ Если бы моя воля, я бы за твой ник спецприз бы выдал. Я на полном серъезе. Великолепная игра букв! Я в восторге! :)
С уважением,
Виктор.
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

Код: Выделить всё

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% коктейля "Рекурсивный"...
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Хороший пример, показывающий назначение enum.
Только, наверное, нужно так:

Код: Выделить всё

while(today <= Su)
   {
Иначе Rasslabon будет только в субботу :))
Хотя, может это и хорошо, иначе в понедельник IdiNaRabotu будет невозможно :)))
Мучитель микросхем
Аватара пользователя
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Сообщение unalex »

в воскресенье NeBuhaj(); и счетчик не считает, т.к. воскресенье пролетает незаметно :)))
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Ср июл 28, 2010 20:29:22
Откуда: Ukraine

Сообщение HF_Cat »

Пишу прогу на Си в AVR Studio 4 - динамическую индикацию на 7сегм-ных индикаторах. Нужно оформить вывод данных на этот дисплей как отдельную функцию. Часть программы по выводу на дисплей выполняется в прерывании по OVF_T0, а часть - вне прерывания. Не нашёл как оформить функцию, которая бы вмещала обе части программы по индикации на "дисплей". Подскажите как или скажите где почитать.
СПС
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

Может это как то поможет.....
http://chipenable.ru/index.php/programm ... kator.html
Ответить

Вернуться в «Разные вопросы по МК»