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

 
 
> Методология опроса массивов.
Jenya7
сообщение Jan 3 2017, 07:37
Сообщение #1


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



У меня есть 20 задач и 20 датчиков. Их надо опросить.
Можно сделать так.
Код
while (1)
{
    for (int I = 0; I < 20; i++)
    {
        EvaluateTask(i);
    }

    for (int I = 0; I < 20; i++)
    {
        ScanSensor(i);
    }
}

или так
Код
while (1)
{
    EvaluateTask(i);

    ScanSensor(i);

    i++;
    if (i >= 20)
        i = 0;
}

Ворос как предпочтительней?
мне кажется второй вариан более риалтаймовый.

Сообщение отредактировал Jenya7 - Jan 3 2017, 07:39
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Jan 3 2017, 10:11
Сообщение #2


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Если реалтайм, то второй вариант лучше - нет накладных расходов на организацию второго цикла.
Если нужен быстрый опрос - лучше использовать не массивы с индексацийе, а указатель с инкриментом.



Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 3 2017, 10:16
Сообщение #3


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

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(k155la3 @ Jan 3 2017, 16:11) *
Если реалтайм, то второй вариант лучше - нет накладных расходов на организацию второго цикла.
Если нужен быстрый опрос - лучше использовать не массивы с индексацийе, а указатель с инкриментом.

а с указателем это как?

Кстати я тут подумал - задачи пользуются показаниями датчиков. Наверное правильней будет так.
Код
while (1)
{    

    for (int i = 0; i < 20; i++)
    {
        ScanSensor(i);
    }

    EvaluateTask(k);
     k++;
     if (k > 20)
         k = 0;

}

Как вы считаете?

Сообщение отредактировал Jenya7 - Jan 3 2017, 10:19
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jan 3 2017, 11:50
Сообщение #4


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Jenya7 @ Jan 3 2017, 13:16) *
. . . .
Как вы считаете?


Что мешает сделать так - по крайней мере читабельно
Код
    for (int i = 0; i < 20; i++)
    {
        ScanSensor(i); - опросить датчик
        EvaluateTask(i); - выполнить расчет (или что там)
    }


По указателям.
на операции индексации массива
Код
a=m[i];
i++;
a=m[i];
уходит больше времени чем на
Код
a=*p_m;
p_m++;
a=*p_m;


Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 3 2017, 13:11
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(k155la3 @ Jan 3 2017, 13:50) *
на операции индексации массива
....

Или да, или нет. Зависит от компилятора и системы команд. Поскольку за последние пару десятков лет со времени K155ЛА3 sm.gif компиляторы круто развились в сторону оптимизации, то наиболее вероятный ответ - пофиг. Да и старые времена с дерьмовой оптимизацией все зависело от системы команд - вместо инкрементирования какого нибудь 32bit указателя на 16bit платформе, команда косвенной адресации с дополнительным индексным регистром работала быстрее.

Ну а Автору вопроса, вместо заваливания форума вопросами ни о чем, следует научиться САМОСТОЯТЕЛЬНО просматривать листинги.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jan 3 2017, 13:23
Сообщение #6


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(zltigo @ Jan 3 2017, 16:11) *
. . . . Поскольку за последние пару десятков лет со времени K155ЛА3 sm.gif
. . . .

Не пару, а 3-4 sm.gif
Желающие помочь оптимизатору компилятра в его нелегких трудах могут это уточнить по листингу асм компилятора sm.gif

Go to the top of the page
 
+Quote Post



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

 


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


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