Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Последовательное сравнение
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
uragan90
Нужно производить чтение средствами мк, данные ацп 8бит с некого устройства хранения этих данных. В этом "буфере" находится 10 выборок ацп! В мк программе две переменные в которых должны сохранятся самое максимальное и минимальное значения из этих десяти выборок. Нужен пример подобного оптимального алгоритма или пинок в нужном направлении. Буду рад любому совету! Заранее спасибо!
rezident
Только само значение или еще и номера позиций в буфере этих значений? Какие вообще проблемы с алгоритмом? Последовательно перебираете все значения и записываете в min или max текущее, если оно удовлетворяет условию - меньше меньшего или больше большего.
uragan90
Извините если что!
1)У меня есть буфер на 3000 выборок ацп.
2)Мне нужно их оттуда выбрать пачками по 10 выборок и сохранить в переменной мин и мах только самое малое и самое большое из этих 10 выборок.
3)Мне нужно получить в итоге всех этих манипуляций массив из 300 минимальных и максимальных значений.
Посмотрите скорее всего не правильно, а как надо не догнать.
unsigned int max0;
unsigned int min0;
unsigned int max1;
unsigned int min1;
unsigned int max2;
unsigned int min2;
..............
..............



DATA_8bit_WR();

unsigned int max0=WR_PORT1;
unsigned int min0=WR_PORT1;

if(max0<WR_PORT1)
{
max0=WR_PORT1
}

if(min0<WR_PORT1)
{
min0=WR_PORT1
}

if(max1<WR_PORT1)
{
max1=WR_PORT1
}

if(min1<WR_PORT1)
{
min1=WR_PORT1
}

if(max2<WR_PORT1)
{
max2=WR_PORT1
}

if(min2<WR_PORT1)
{
min2=WR_PORT1
}
................
................
ARV
Код
typedef struct{
   unsigned int min, max;
} minmax_t;

#define CNT 300
#define GROUPCNT 10

minmax_t minmax[CNT];

extern unsigned int get_value(unsigned int item);

void fill_minmax(void){
   unsigned int max, min, tmp;
   for(unsigned int i=0; i<CNT; i++){
      min = 0xFFFF;
      max = 0;
      for(unsigned char j=0; j<GROUPCNT; j++){
         tmp = get_value(i*GROUPCNT + j);
         if(tmp < min) min = tmp;
         if(tmp > max) max = tmp;
      }
      minmax[i].min = min;
      minmax[i].max = max;
   }
}


как-то так, по-моему... кое-что избыточно сделал - в целях наглядности алгоритма...
uragan90
ARV, Огромнейшее спасибо!!!!!!!! Вы меня очень выручили, можно сказать спасли!
uragan90
А вы не могли б подсказать откуда взялась и для чего нужна "item"?
В этой строчке
extern unsigned int get_value(unsigned int item);
SysRq
Цитата(uragan90 @ Mar 8 2011, 15:31) *
А вы не могли б подсказать откуда взялась и для чего нужна "item"?
Указывает, какое именно по счёту значение взять из:
Цитата(uragan90 @ Mar 8 2011, 09:26) *
1)У меня есть буфер на 3000 выборок ацп.

ARV
Цитата(uragan90 @ Mar 8 2011, 15:31) *
А вы не могли б подсказать откуда взялась и для чего нужна "item"?
В этой строчке
extern unsigned int get_value(unsigned int item);

я же не знаю, как вы там работаете со своим массивом... написал "абстрактно"... вам ответили уже (опередили). специально старался давать переменным и функциям "говорящие" значения, чтобы вопросов было меньше, ан нет...
uragan90
В принципе скорее всего это iten не потребуется... У меня связка мк плис срам! И данные из памяти счетчик выгребает последовательно (друг за другом). Но всё равно огромное спасибо sm.gif раскрыли, так сказать, глаза. Помогли взглянуть на проблему с другой стороны! Спасибо всем!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.