реклама на сайте
подробности

 
 
> Как уйти от постоянной проверки условия if?
nikolas_osu
сообщение May 13 2011, 04:17
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 101
Регистрация: 6-12-07
Из: Оренбург
Пользователь №: 33 046



ARM-контроллер опрашивает по циклу некоторый набор блоков, перед началом цикла опроса контроллер получат команду с номерами блоков которые необходимо опрашивать в цикле. Первое что пришло в голову это опросом конкретного блока проверять по if нужно ли опрашивать данный блок. Не нравиться то что в итерациях цикла придется всегда проверять if несмотря на то что во всех итерациях условие будет одинаковым. Возможно ли обойтись без этих проверок для каждого блока в каждой итерации цикла? Язык программирования Си.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
smalcom
сообщение May 13 2011, 04:27
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



вектор функций опроса. тебе как раз приходят индексы функций в векторе.
Go to the top of the page
 
+Quote Post
nikolas_osu
сообщение May 13 2011, 04:57
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 101
Регистрация: 6-12-07
Из: Оренбург
Пользователь №: 33 046



Цитата(smalcom @ May 13 2011, 10:27) *
вектор функций опроса. тебе как раз приходят индексы функций в векторе.

А можно поподробнее как это реализовать?

Цитата
Массив указателей на функции блоков, а лучше массив структур с полем-флагом активности блока.

Будет один цикл с одним условием в теле цикла.
Код
block[0].active = 0;
block[1].active = 1;
....
for (int i=0; i<BLOCKS_QTY; i++)
{
if (block[i].active)
{
block[i].callback();
}
}


Это совсем не то, проверка условия перед запуском опроса конкретного блока как была так и осталась, только добавились еще проверка условия цикла и вызов элемента массива.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 13 2011, 07:24
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(nikolas_osu @ May 13 2011, 07:57) *
А можно поподробнее как это реализовать?

Это совсем не то, проверка условия перед запуском опроса конкретного блока как была так и осталась, только добавились еще проверка условия цикла и вызов элемента массива.


RTOS ваяете?

Номера блоков надо привести к смещению от базы до функции блока. Это делается на промежуточных константных массивах.
Как-то так wink.gif))
Go to the top of the page
 
+Quote Post
nikolas_osu
сообщение May 13 2011, 07:51
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 101
Регистрация: 6-12-07
Из: Оренбург
Пользователь №: 33 046



Цитата(AlexandrY @ May 13 2011, 13:24) *
RTOS ваяете?

Номера блоков надо привести к смещению от базы до функции блока. Это делается на промежуточных константных массивах.
Как-то так wink.gif))

Совсем нет, просто система сбора данных. Мне как-то не по душе алгоритм в котором постоянно проверяются условия, которые заведомо не меняются.

Думаю сделать через массив указателей на функции, но не знаю насколько это будет быстрее чем простой if.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 13 2011, 08:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(nikolas_osu @ May 13 2011, 10:51) *
не знаю насколько это будет быстрее чем простой if.

Не будет быстрее.
Если if оскорбляет художественный вкус, его можно куда-нить спрятать, в макрос какой-нибудь.



--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 10:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01407 секунд с 7
ELECTRONIX ©2004-2016