Полная версия этой страницы:
Последовательное сравнение
uragan90
Mar 7 2011, 22:39
Нужно производить чтение средствами мк, данные ацп 8бит с некого устройства хранения этих данных. В этом "буфере" находится 10 выборок ацп! В мк программе две переменные в которых должны сохранятся самое максимальное и минимальное значения из этих десяти выборок. Нужен пример подобного оптимального алгоритма или пинок в нужном направлении. Буду рад любому совету! Заранее спасибо!
rezident
Mar 8 2011, 01:08
Только само значение или еще и номера позиций в буфере этих значений? Какие вообще проблемы с алгоритмом? Последовательно перебираете все значения и записываете в min или max текущее, если оно удовлетворяет условию - меньше меньшего или больше большего.
uragan90
Mar 8 2011, 06:26
Извините если что!
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
}
................
................
Код
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
Mar 8 2011, 10:27
ARV, Огромнейшее спасибо!!!!!!!! Вы меня очень выручили, можно сказать спасли!
uragan90
Mar 8 2011, 12:31
А вы не могли б подсказать откуда взялась и для чего нужна "item"?
В этой строчке
extern unsigned int get_value(unsigned int item);
Цитата(uragan90 @ Mar 8 2011, 15:31)

А вы не могли б подсказать откуда взялась и для чего нужна "item"?
Указывает, какое именно по счёту значение взять из:
Цитата(uragan90 @ Mar 8 2011, 09:26)

1)У меня есть буфер на 3000 выборок ацп.
Цитата(uragan90 @ Mar 8 2011, 15:31)

А вы не могли б подсказать откуда взялась и для чего нужна "item"?
В этой строчке
extern unsigned int get_value(unsigned int item);
я же не знаю, как вы там работаете со своим массивом... написал "абстрактно"... вам ответили уже (опередили). специально старался давать переменным и функциям "говорящие" значения, чтобы вопросов было меньше, ан нет...
uragan90
Mar 8 2011, 18:13
В принципе скорее всего это iten не потребуется... У меня связка мк плис срам! И данные из памяти счетчик выгребает последовательно (друг за другом). Но всё равно огромное спасибо

раскрыли, так сказать, глаза. Помогли взглянуть на проблему с другой стороны! Спасибо всем!!!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.