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

 
 
> Как уйти от постоянной проверки условия 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
MrYuran
сообщение May 13 2011, 11:58
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(nikolas_osu @ May 13 2011, 11:51) *
Совсем нет, просто система сбора данных. Мне как-то не по душе алгоритм в котором постоянно проверяются условия, которые заведомо не меняются.

То есть как не меняются? Константные условия?
Ну так тогда компилятор их и без вас пошинкует.
А вот прыганье по указателям очень плохо сказывается на работе конвейера и кэша (если есть).


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 07:39
Рейтинг@Mail.ru


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