|
Методология опроса массивов. |
|
|
|
Jan 3 2017, 07:37
|
Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jan 3 2017, 10:16
|
Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
Jan 3 2017, 11:50
|
Профессионал
    
Группа: Свой
Сообщений: 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;
|
|
|
|
|
Jan 3 2017, 13:11
|

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

|
Цитата(k155la3 @ Jan 3 2017, 13:50)  на операции индексации массива .... Или да, или нет. Зависит от компилятора и системы команд. Поскольку за последние пару десятков лет со времени K155ЛА3  компиляторы круто развились в сторону оптимизации, то наиболее вероятный ответ - пофиг. Да и старые времена с дерьмовой оптимизацией все зависело от системы команд - вместо инкрементирования какого нибудь 32bit указателя на 16bit платформе, команда косвенной адресации с дополнительным индексным регистром работала быстрее. Ну а Автору вопроса, вместо заваливания форума вопросами ни о чем, следует научиться САМОСТОЯТЕЛЬНО просматривать листинги.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 3 2017, 13:28
|

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

|
Цитата(k155la3 @ Jan 3 2017, 15:23)  Не пару, а 3-4  Да нет, после 2000 года уже я не встречал эффекта у Си компиляторов от использования нативных для Си указателей вместо индексируемых массивов. Ну а в 90x годах, какой нибудь, например, Борлондячий компилятор, тот да, мог.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
Jenya7 Методология опроса массивов. Jan 3 2017, 07:37 k155la3 интрига. Где массивы ? Jan 3 2017, 09:42 alexunder Цитата(k155la3 @ Jan 3 2017, 10:42) интри... Jan 3 2017, 09:46 Jenya7 Цитата(k155la3 @ Jan 3 2017, 15:42) интри... Jan 3 2017, 09:49   Jenya7 Цитата(k155la3 @ Jan 3 2017, 17:50) Что м... Jan 3 2017, 12:09     jcxz Цитата(k155la3 @ Jan 3 2017, 16:23) Желаю... Jan 6 2017, 08:42      ar__systems Цитата(jcxz @ Jan 6 2017, 03:42) Вы удиви... Jan 10 2017, 14:18 ViKo Команды ARM и Cortex разработаны для индексной ари... Jan 6 2017, 09:08
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|