| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Как уйти от постоянной проверки условия if?
13.05.2011, 08:19
|
|
|
Частый гость
Регистрация: 09.09.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Как уйти от постоянной проверки условия if?
ARM-контроллер опрашивает по циклу некоторый набор блоков, перед началом цикла опроса контроллер получат команду с номерами блоков которые необходимо опрашивать в цикле. Первое что пришло в голову это опросом конкретного блока проверять по if нужно ли опрашивать данный блок. Не нравиться то что в итерациях цикла придется всегда проверять if несмотря на то что во всех итерациях условие будет одинаковым. Возможно ли обойтись без этих проверок для каждого блока в каждой итерации цикла? Язык программирования Си.
|
|
|
|
Сказали "Спасибо" nikolas_osu
|
|
|
13.05.2011, 08:41
|
|
|
Заблокирован
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Для этой цели имеется другая конструкция:
switch(‹переменная›)
{
case ‹условие_1›:
{
‹код›
break;
}
case ‹условие_2›:
{
‹код›
break;
}
...
case ‹условие_2›:
{
‹код›
break;
}
default: // Если не подходит ни одно условие
{
‹код›
break;
}
}
|
|
|
|
13.05.2011, 09:01
|
|
|
Частый гость
Регистрация: 09.09.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Сообщение от RY723
|
Для этой цели имеется другая конструкция:
switch(‹переменная›)
{
case ‹условие_1›:
{
‹код›
break;
}
case ‹условие_2›:
{
‹код›
break;
}
...
case ‹условие_2›:
{
‹код›
break;
}
default: // Если не подходит ни одно условие
{
‹код›
break;
}
}
|
Эта конструкция не избавляет от провкрки условия перед запуском опроса каждого блока. И мне не совсем ясно как эту конструкцию можно использовать для решения моей задачи, например всего есть 5 блоков а в цикле нужно опрашивать только блоки 2 и 4?
|
|
|
|
Сказали "Спасибо" nikolas_osu
|
|
|
13.05.2011, 09:57
|
|
|
Заблокирован
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Сообщение от nikolas_osu
|
|
Эта конструкция не избавляет от провкрки условия перед запуском опроса каждого блока. И мне не совсем ясно как эту конструкцию можно использовать для решения моей задачи, например всего есть 5 блоков а в цикле нужно опрашивать только блоки 2 и 4?
|
Тогда сначала сформулируйте задачу. Без этого разобраться невозможно.
Иди туда - не знаю куда, принеси того, не знаю чего.
Вы выбрали для проверки несколько блоков (из набора, допустим 1...100).
Блоки №№ 5, 21. 78. Конструкция switch решает эту задачу просто:
switch(5), switch(21), switch(7  .
Как видите, перебора нет.
Но у вас нет алгоритма выбора этих блоков!
Как вы их выбираете? Тем же перебором?
|
|
|
|
13.05.2011, 10:03
|
|
|
Частый гость
Регистрация: 09.09.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Сообщение от RY723
|
Но у вас нет алгоритма выбора этих блоков!
Как вы их выбираете? Тем же перебором?
|
Номера блоков для опроса задает оператор через ПК перед началом опроса блоков, затем дает команду на запуск опроса.
|
|
|
|
Сказали "Спасибо" nikolas_osu
|
|
|
13.05.2011, 10:06
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 19.10.2010
Сообщений: 1,752
Сказал спасибо: 158
Сказали Спасибо 640 раз(а) в 364 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Сообщение от RY723
|
...
Вы выбрали для проверки несколько блоков (из набора, допустим 1...100).
Блоки №№ 5, 21. 78. Конструкция switch решает эту задачу просто:
switch(5), switch(21), switch(7 .
Как видите, перебора нет.
...
|
Если-б оператор switch(n) был табличным, то перебора не было-бы,
но он вполне может оказаться тем-же if (n) только по другому записанным.
|
|
|
|
Сказали "Спасибо" Ar-Gen-Tum
|
|
|
13.05.2011, 11:48
|
|
|
Заблокирован
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Сообщение от Ar-Gen-Tum
|
Если-б оператор switch(n) был табличным, то перебора не было-бы,
но он вполне может оказаться тем-же if (n) только по другому записанным.
|
А всё зависит от автора. Можно ведь и круглое таскать и квадратное катать...
А ТС указал:
|
Сообщение от nikolas_osu
|
|
Номера блоков для опроса задает оператор через ПК перед началом опроса блоков, затем дает команду на запуск опроса.
|
но не потрудился проанализировать, своё же собственное. И всё стоит с открытым ртом. Что, мне, ещё и глотать за него? А здесь switch идеально подходит, только оформить надо. Но глотать за ТС не буду. Пусть сам хоть немного потрудится...
|
|
|
|
13.05.2011, 15:35
|
|
|
Прописка
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Сообщение от RY723
|
|
здесь switch идеально подходит
|
А я так не думаю. Switch/case делает выбор между несколькими фиксированными значениями одной переменной, а здесь будет список номеров блоков, которые надо опрашивать. Причем, количество этих опрашиваемых блоков может быть разное. Тут одной переменной не обойдешься. Напрашивается все-таки массив, с количеством ячеек по максимальному числу блоков. Каждый элемент этого массива будет признаком, нужно опрашивать блок с таким номером или нет. И в цикле опроса, конечно, проверять этот признак для каждого блока. Будет очень простая и понятная конструкция...
|
|
|
|
13.05.2011, 15:40
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Мдя ну если хотца секса стоя в лыжах в гамаке - сформировать массив указателей на функции (блоки) и перебирать в цикле по порядку. Вызов асмовской вставкой по ICALL.
|
|
|
|
Сказали "Спасибо" _guardianangel
|
|
|
13.05.2011, 21:22
|
|
|
Частый гость
Регистрация: 09.09.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Как уйти от постоянной проверки условия if?
Сообщение от _guardianangel
|
|
Мдя ну если хотца секса стоя в лыжах в гамаке - сформировать массив указателей на функции (блоки) и перебирать в цикле по порядку. Вызов асмовской вставкой по ICALL.
|
Я сейчас склоняюсь к этому варианту, но останавливает то что вместо проверки условия if бутет проверка условия продолжения цикла, переберающего массив с указателями на функции...
|
|
|
|
Сказали "Спасибо" nikolas_osu
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:41.
|
|