Проблема с оператором switch

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Проблема с оператором switch

Сообщение IfoR »

Psych писал(а):Break - всего лишь даёт "ускорение" оператора switch. Как только совпадет sec с каким то case остальные case проверяться не будут.
:)
Если не использовать break, тогда пойдёт выполняться весь тот нижеследующий код, который выполняться не должен.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: Проблема с оператором switch

Сообщение Psych »

Тут была хня...
Последний раз редактировалось Psych Чт июл 28, 2011 21:24:32, всего редактировалось 1 раз.
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Проблема с оператором switch

Сообщение IfoR »

Да ну?

Вот примеры, скомпилируй их и посмотри:
С бряками:

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

#include <iostream>


int main()
{
 int A=0;
 int B=2;

 switch (B)
 {
  case 0:
   A=10;
   break;

  case 1:
   A=20;
   break;

  case 2:
   A=30;
   break;

  case 3:
   A=40;
   break;

  case 4:
   A=50;
   break;
 }
 
 std::cout << A << '\n';

 return 0;
}
И без:

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

#include <iostream>


int main()
{
 int A=0;
 int B=2;

 switch (B)
 {
  case 0:
   A=10;

  case 1:
   A=20;

  case 2:
   A=30;

  case 3:
   A=40;

  case 4:
   A=50;
 }
 
 std::cout << A << '\n';

 return 0;
}
До сих пор думаешь, что результат и в первом и во втором будет 30? ;)
case-ы - это лишь метки. Сами они ничего не проверяют. Проверяет switch.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: Проблема с оператором switch

Сообщение Psych »

Эхххх блин, мой косяк.....хотя не мой, а там где я читал :)))

И смайлик в тему :facepalm: :facepalm: :facepalm:
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Проблема с оператором switch

Сообщение IfoR »

Пользуйтесь проверенными источниками! :))
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Реклама
Аватара пользователя
Rimsky
Грызет канифоль
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск
Контактная информация:

Re: Проблема с оператором switch

Сообщение Rimsky »

IfoR писал(а): А вообще тут ещё бы не помещало бы вводить процессор в Idle режим, после каждой проверки: :))
Интересно. А не могли бы Вы подсказать, как вывести mega16 из режима idle по timer0 ?
Реклама
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Проблема с оператором switch

Сообщение IfoR »

Так в Idle режиме он выходит из спячки по любому поводу. Выполнение программы, после просыпания, продолжается после команды SLEEP. Вот выдержка из даташита.
Изображение
Вложения
SleepModes.png
(40.33 КБ) 468 скачиваний
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Аватара пользователя
Rimsky
Грызет канифоль
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск
Контактная информация:

Re: Проблема с оператором switch

Сообщение Rimsky »

IfoR писал(а):Так в Idle режиме он выходит из спячки по любому поводу. Выполнение программы, после просыпания, продолжается после команды SLEEP. Вот выдержка из даташита.
Это я видел. А где здесь сказано, что Timer0 учавствует в процессе?
Аватара пользователя
IfoR
Поставщик валерьянки для Кота
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула
Контактная информация:

Re: Проблема с оператором switch

Сообщение IfoR »

/me нервно тягает компилятор.

Ну, ИМХО, раз прерывание от таймера должно сработать и выполниться, то тогда нужно активировать тактовый счётчик ядра, а значит выйти из спячки. :dont_know:
В железе я 0-й таймер не проверял (использовал 2 таймер), но в симуляторе работает.
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»