АЦП, график
От: Аноним  
Дата: 03.02.06 07:48
Оценка:
Здравствуйте.
Люди кто сталкивался с такой задачей:
Есть АЦП с которого поступают данные в буфер, затем он записывается на диск.
Необходимо добавить функцию которая будет строить график в отдельном окне.
Помогите с алгоритмом (или ткните носом на похожие программы).
Какие подводные камни могут быть?
И как и/или чем лучше рисовать?

Вот основной блок кода в котором происходит чтение и запись:

void func(adc::dev::IReadDevice* la, adc::dev::IWriteDevice *file)
{
  HRESULT hr;
  HANDLE  ev[2];                         // Объекты синхронизации для чтения/записи
  size_t  r_offset,w_offset;             // Смещение от начала буфера для чтения/записи
  bool    r_swap = true;                 // Флаг переключающий смещение от начала буфера для чтения
  bool    w_swap = true;                 // Флаг переключающий смещение от начала буфера для записи
  boost::timer timer;
  time_t  run_time = adc::util::Global::params().getTime();
  size_t  size = adc::util::Global::params().getBufferSize();        // Размер буфера в байтах
  char*   buf = (char*)_aligned_malloc(size*4, 16); // Один общий массив данных выравненный на 2 байта

  ev[0] = ::CreateEvent(NULL, FALSE, FALSE, NULL); // Чтение
  ev[1] = ::CreateEvent(NULL, FALSE, FALSE, NULL); // Запись

  timer.restart();
  la->read(buf, size, (HANDLE)ev[0]);

  while(run_time == 0 || timer.elapsed() < run_time)
  {
    printf("\rProcess: total %.2f s | current %.2f s | elapsed %.2f s", 
           (float)run_time, (float)timer.elapsed(), (float)(run_time - timer.elapsed()));

    LOG_DBG("main: try wait...");

    hr = ::WaitForMultipleObjects(2, (HANDLE*)&ev, FALSE, INFINITE);
    switch (hr)
    {
    case WAIT_OBJECT_0: // Чтение завершено
      LOG_DBG("main: send to write");
      r_offset = (r_swap) ? 0 : size;
      w_offset = (w_swap) ? size*2 : size*3;
      
      adc::util::fast_memcpy(buf+w_offset, buf+r_offset, size);
      file->write(buf+w_offset, size, (HANDLE)ev[1]);
      
      w_swap = !w_swap;
      r_swap = !r_swap;
      break;

    case WAIT_OBJECT_0+1: // Запись завершена
      LOG_DBG("main: send to read");
      r_offset = (r_swap) ? 0 : size;
      la->read(buf+r_offset, size, (HANDLE)ev[0]);
      break;

    default:
      LOG_DBG("main: error wait");
    }
  }
  _aligned_free((void*)buf);
}
Re: АЦП, график
От: Zimy4  
Дата: 05.02.06 17:16
Оценка:
ммм....печально....вообще никаких мыслей????
Кто хочет что-то сделать ищет возможность, кто не хочет — причину.
Re[2]: АЦП, график
От: ArtDenis Россия  
Дата: 06.02.06 12:10
Оценка:
Z> ммм....печально....вообще никаких мыслей????

В качестве универсального (не не обязательно удачного) решения могу посоветовать MSChart
Posted via RSDN NNTP Server 2.0
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re: АЦП, график
От: Stoune  
Дата: 07.02.06 15:58
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте.

А>Люди кто сталкивался с такой задачей:
А>Есть АЦП с которого поступают данные в буфер, затем он записывается на диск.
А>Необходимо добавить функцию которая будет строить график в отдельном окне.
А>Помогите с алгоритмом (или ткните носом на похожие программы).
А>Какие подводные камни могут быть?
А>И как и/или чем лучше рисовать?

А>Вот основной блок кода в котором происходит чтение и запись:


Вариантов много, можеш использовать готовые компоненты, тот же Excell, MSChart мошешь написать свой вариант, ключевое слово апрокмация (сплайнами например)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.