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

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

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

Сообщение Apparatchik »

shads писал(а):НО она обрабатывается в прерывании, значит - должна быть volatile.

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

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

Сообщение slavokhire5 »

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

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

Сообщение shads »

Apparatchik писал(а):Если она обрабатывается в прерывании, она должна быть глобальной.

А ну да.... сморосил.
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

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

Сообщение kalobyte »

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

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

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

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

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

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

Сообщение vitalik_1984 »

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

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

Сообщение kalobyte »

vitalik_1984 писал(а):опустили один из пунктов,

какой еще пункт?
vitalik_1984 писал(а):то не нужно задаваться задачей определить свободный номер.

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

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

Сообщение urry »

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

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

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


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

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

Сообщение kalobyte »

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

switch(mode)
case FR_OK:

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

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

Сообщение ut1wpr »

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: Вопросы по С/С++ (СИ)

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

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

Сообщение vitalik_1984 »

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

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

 
if gps(status_ok){ usart_send(status_ok) };

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

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

Сообщение ut1wpr »

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

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

Сообщение kalobyte »

ut1wpr писал(а):Вообще-то наиболее частое применение нумератора - это создание собственного типа данных, а не замена дефайнов.

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

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

Сообщение ut1wpr »

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

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

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

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

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

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

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

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

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

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

Сообщение unalex »

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

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

Сообщение HF_Cat »

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

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

Сообщение shads »

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

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