Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Как уйти от постоянной проверки условия if?

Непрочитано 13.05.2011, 08:19  
nikolas_osu
Частый гость
 
Регистрация: 09.09.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
nikolas_osu на пути к лучшему
По умолчанию Как уйти от постоянной проверки условия if?

ARM-контроллер опрашивает по циклу некоторый набор блоков, перед началом цикла опроса контроллер получат команду с номерами блоков которые необходимо опрашивать в цикле. Первое что пришло в голову это опросом конкретного блока проверять по if нужно ли опрашивать данный блок. Не нравиться то что в итерациях цикла придется всегда проверять if несмотря на то что во всех итерациях условие будет одинаковым. Возможно ли обойтись без этих проверок для каждого блока в каждой итерации цикла? Язык программирования Си.
Реклама:
nikolas_osu вне форума  
Сказали "Спасибо" nikolas_osu
warel (27.06.2019)
Непрочитано 13.05.2011, 08:41  
RY723
Заблокирован
 
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
RY723 на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Для этой цели имеется другая конструкция:

switch(‹переменная›)
{
case ‹условие_1›:
{
‹код›
break;
}

case ‹условие_2›:
{
‹код›
break;
}

...
case ‹условие_2›:
{
‹код›
break;
}

default: // Если не подходит ни одно условие
{
‹код›
break;
}
}
RY723 вне форума  
Сказали "Спасибо" RY723
warel (27.06.2019)
Непрочитано 13.05.2011, 09:01  
nikolas_osu
Частый гость
 
Регистрация: 09.09.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
nikolas_osu на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Сообщение от RY723 Посмотреть сообщение
Для этой цели имеется другая конструкция:

switch(‹переменная›)
{
case ‹условие_1›:
{
‹код›
break;
}

case ‹условие_2›:
{
‹код›
break;
}

...
case ‹условие_2›:
{
‹код›
break;
}

default: // Если не подходит ни одно условие
{
‹код›
break;
}
}
Эта конструкция не избавляет от провкрки условия перед запуском опроса каждого блока. И мне не совсем ясно как эту конструкцию можно использовать для решения моей задачи, например всего есть 5 блоков а в цикле нужно опрашивать только блоки 2 и 4?
nikolas_osu вне форума  
Сказали "Спасибо" nikolas_osu
warel (27.06.2019)
Непрочитано 13.05.2011, 09:57  
RY723
Заблокирован
 
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
RY723 на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Сообщение от nikolas_osu Посмотреть сообщение
Эта конструкция не избавляет от провкрки условия перед запуском опроса каждого блока. И мне не совсем ясно как эту конструкцию можно использовать для решения моей задачи, например всего есть 5 блоков а в цикле нужно опрашивать только блоки 2 и 4?
Тогда сначала сформулируйте задачу. Без этого разобраться невозможно.

Иди туда - не знаю куда, принеси того, не знаю чего.

Вы выбрали для проверки несколько блоков (из набора, допустим 1...100).
Блоки №№ 5, 21. 78. Конструкция switch решает эту задачу просто:
switch(5), switch(21), switch(7.
Как видите, перебора нет.
Но у вас нет алгоритма выбора этих блоков!
Как вы их выбираете? Тем же перебором?
RY723 вне форума  
Сказали "Спасибо" RY723
warel (27.06.2019)
Непрочитано 13.05.2011, 10:03  
nikolas_osu
Частый гость
 
Регистрация: 09.09.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
nikolas_osu на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Сообщение от RY723 Посмотреть сообщение
Но у вас нет алгоритма выбора этих блоков!
Как вы их выбираете? Тем же перебором?
Номера блоков для опроса задает оператор через ПК перед началом опроса блоков, затем дает команду на запуск опроса.
nikolas_osu вне форума  
Сказали "Спасибо" nikolas_osu
warel (27.06.2019)
Непрочитано 13.05.2011, 10:06  
Ar-Gen-Tum
Почётный гражданин KAZUS.RUN
 
Регистрация: 19.10.2010
Сообщений: 1,752
Сказал спасибо: 158
Сказали Спасибо 640 раз(а) в 364 сообщении(ях)
Ar-Gen-Tum на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Сообщение от RY723 Посмотреть сообщение
...
Вы выбрали для проверки несколько блоков (из набора, допустим 1...100).
Блоки №№ 5, 21. 78. Конструкция switch решает эту задачу просто:
switch(5), switch(21), switch(7.
Как видите, перебора нет.
...
Если-б оператор switch(n) был табличным, то перебора не было-бы,
но он вполне может оказаться тем-же if (n) только по другому записанным.
Ar-Gen-Tum вне форума  
Сказали "Спасибо" Ar-Gen-Tum
warel (27.06.2019)
Непрочитано 13.05.2011, 11:48  
RY723
Заблокирован
 
Регистрация: 08.08.2007
Сообщений: 2,820
Сказал спасибо: 375
Сказали Спасибо 1,364 раз(а) в 744 сообщении(ях)
RY723 на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Сообщение от Ar-Gen-Tum Посмотреть сообщение
Если-б оператор switch(n) был табличным, то перебора не было-бы,
но он вполне может оказаться тем-же if (n) только по другому записанным.
А всё зависит от автора. Можно ведь и круглое таскать и квадратное катать...

А ТС указал:
Сообщение от nikolas_osu
Номера блоков для опроса задает оператор через ПК перед началом опроса блоков, затем дает команду на запуск опроса.
но не потрудился проанализировать, своё же собственное. И всё стоит с открытым ртом. Что, мне, ещё и глотать за него? А здесь switch идеально подходит, только оформить надо. Но глотать за ТС не буду. Пусть сам хоть немного потрудится...
RY723 вне форума  
Сказали "Спасибо" RY723
warel (27.06.2019)
Непрочитано 13.05.2011, 15:35  
tsb
Прописка
 
Аватар для tsb
 
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
tsb на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Сообщение от RY723 Посмотреть сообщение
здесь switch идеально подходит
А я так не думаю. Switch/case делает выбор между несколькими фиксированными значениями одной переменной, а здесь будет список номеров блоков, которые надо опрашивать. Причем, количество этих опрашиваемых блоков может быть разное. Тут одной переменной не обойдешься. Напрашивается все-таки массив, с количеством ячеек по максимальному числу блоков. Каждый элемент этого массива будет признаком, нужно опрашивать блок с таким номером или нет. И в цикле опроса, конечно, проверять этот признак для каждого блока. Будет очень простая и понятная конструкция...
tsb вне форума  
Сказали "Спасибо" tsb
warel (27.06.2019)
Непрочитано 13.05.2011, 15:40  
_guardianangel
Почётный гражданин KAZUS.RUN
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,138
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Мдя ну если хотца секса стоя в лыжах в гамаке - сформировать массив указателей на функции (блоки) и перебирать в цикле по порядку. Вызов асмовской вставкой по ICALL.
_guardianangel вне форума  
Сказали "Спасибо" _guardianangel
warel (27.06.2019)
Непрочитано 13.05.2011, 21:22  
nikolas_osu
Частый гость
 
Регистрация: 09.09.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
nikolas_osu на пути к лучшему
По умолчанию Re: Как уйти от постоянной проверки условия if?

Сообщение от _guardianangel Посмотреть сообщение
Мдя ну если хотца секса стоя в лыжах в гамаке - сформировать массив указателей на функции (блоки) и перебирать в цикле по порядку. Вызов асмовской вставкой по ICALL.
Я сейчас склоняюсь к этому варианту, но останавливает то что вместо проверки условия if бутет проверка условия продолжения цикла, переберающего массив с указателями на функции...
nikolas_osu вне форума  
Сказали "Спасибо" nikolas_osu
warel (27.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] Так, рассказик :)) Я долго ржал :)) DK Отвлекитесь, эмбеддеры! 7 31.08.2007 22:33
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49
[Решено] про блоки питания бу-га-га! zalman Отвлекитесь, эмбеддеры! 12 29.01.2007 10:46


Часовой пояс GMT +4, время: 13:41.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.