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

 
 
 
Reply to this topicStart new topic
> Последовательное сравнение, Нужна экстренная помощь.
uragan90
сообщение Mar 7 2011, 22:39
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Нужно производить чтение средствами мк, данные ацп 8бит с некого устройства хранения этих данных. В этом "буфере" находится 10 выборок ацп! В мк программе две переменные в которых должны сохранятся самое максимальное и минимальное значения из этих десяти выборок. Нужен пример подобного оптимального алгоритма или пинок в нужном направлении. Буду рад любому совету! Заранее спасибо!

Сообщение отредактировал uragan90 - Mar 7 2011, 22:41
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 8 2011, 01:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Только само значение или еще и номера позиций в буфере этих значений? Какие вообще проблемы с алгоритмом? Последовательно перебираете все значения и записываете в min или max текущее, если оно удовлетворяет условию - меньше меньшего или больше большего.
Go to the top of the page
 
+Quote Post
uragan90
сообщение Mar 8 2011, 06:26
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



Извините если что!
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
}
................
................
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 8 2011, 07:41
Сообщение #4


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Код
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;
   }
}


как-то так, по-моему... кое-что избыточно сделал - в целях наглядности алгоритма...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
uragan90
сообщение Mar 8 2011, 10:27
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



ARV, Огромнейшее спасибо!!!!!!!! Вы меня очень выручили, можно сказать спасли!
Go to the top of the page
 
+Quote Post
uragan90
сообщение Mar 8 2011, 12:31
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



А вы не могли б подсказать откуда взялась и для чего нужна "item"?
В этой строчке
extern unsigned int get_value(unsigned int item);

Сообщение отредактировал uragan90 - Mar 8 2011, 12:32
Go to the top of the page
 
+Quote Post
SysRq
сообщение Mar 8 2011, 15:24
Сообщение #7


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



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

Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 8 2011, 16:24
Сообщение #8


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



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

я же не знаю, как вы там работаете со своим массивом... написал "абстрактно"... вам ответили уже (опередили). специально старался давать переменным и функциям "говорящие" значения, чтобы вопросов было меньше, ан нет...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
uragan90
сообщение Mar 8 2011, 18:13
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 248
Регистрация: 2-02-09
Из: Тверь
Пользователь №: 44 309



В принципе скорее всего это iten не потребуется... У меня связка мк плис срам! И данные из памяти счетчик выгребает последовательно (друг за другом). Но всё равно огромное спасибо sm.gif раскрыли, так сказать, глаза. Помогли взглянуть на проблему с другой стороны! Спасибо всем!!!
Go to the top of the page
 
+Quote Post

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

 


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


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