Просмотр сообщений
Страниц: [1] 2 3
1  Разработка / Программирование под QNX 4.x / Pre-spawn : Сентября 19, 2005, 03:40:16 pm
Есть perl-скрипт. Запускает его Apache.
В скрипте есть часть инициализации (подгружаются модули, которые он использует) и рабочая часть.
Время выполнения скрипта - 3с.
Из них 2с - собственно запуск perl (time perl -e 'exit'
0.6c - инициализация (проверял путем убирания рабочей части)
Хотелось-бы чтобы все обращение со стороны клиента обрабатывалось за оставшиеся 0.4с .
Существуют решения Speedy-CGI, pperl, FastCGI. Все они  не компилируются под QNX 4.25.
Как решить вопрос в этой операционке?
2  Разработка / Встраиваемые системы / phyCORE-XScale/PXA255 было (System-On-Chip) : Июня 03, 2005, 02:21:38 pm
Грубо говоря в идеале на процессор остается 1.5Вт.
Естественно если возникает IDE диск на борту - то поболее.
Lippert ест 5Вт.
PXA255 судя по описанию 3.3 х 400ма = 1.32Вт.

А по проблемам - я и спрашиваю в рамках поставленной задачи что нас может сильно затормозить.

Если мы действительно с этим быстро не справимся, можно и купить решение. Ну и есть-же форум! .

Программы писать мы умеем . Нашу переферию мы знаем.

Кстати насчет запустить - информация от продавца:
Contents of Delivery Rapid Development Kit Contents:
[скип]
There are three operating systems to choose from:
- Embedded Linux ELinOS
- Microsoft Windows CE.NET 4.2
- QNX
3  Разработка / Встраиваемые системы / phyCORE-XScale/PXA255 было (System-On-Chip) : Июня 03, 2005, 01:26:58 pm
Заказчики все время укоряют нас в энергопотреблении.

Это не новый проект, а создание новой версии процессорного модуля готовых отработанных систем (вся разработка была сделана за 2.5 года). И этот модуль далеко не самая трудоемкая часть...

Ну а без опыта... Простые программы на qnx6 писали, профайлер, отладчик пробовали...
А по ARM, я руководство DBPXA250DP Development Board Support Package прочитал - вроде тоже все понятно.

На крайний случай можно попробовать подвинуть сроки. Или специалиста пригласить...

Ну а вообще - аппаратно такое решение жизнеспособно?
Или лучше в какие-то другие стороны посмотреть?
Все равно с lippert-а надо уходить. Он помимо того что потребляет еще и греет.
4  Разработка / Встраиваемые системы / phyCORE-XScale/PXA255 было (System-On-Chip) : Июня 03, 2005, 12:41:34 pm
Цитата: lestat

А по каким пунктам не реально?
Аппаратно не возможно?
Быстродействия CPU не хватит? Ну а если мы TMS оставим..
Времени мало?
5  Разработка / Встраиваемые системы / phyCORE-XScale/PXA255 было (System-On-Chip) : Июня 03, 2005, 11:13:17 am
Спасибо всем за советы по System-On-Chip.
Похоже остановлюсь на Computer-On-Module (спасибо aluv).
Эта машинка возможно позволит отказаться от всех других  микроконтроллеров в системе.

Я так понял PXA255 не x86.
В QNX6.2.1a есть таржет на dbpxa250dp (armle) это оно или нет?

Хотелось-бы заранее услышать какие есть(могут быть) подводные камни?

Планируется:
1.Опрос 5 АЦП по 8 каналов 800Гц по протоколу SPI (5 Мгц)
2.Редкая (секунды) выработка управляющих воздействий по цифровым выходам.

3.
Опрос внешнего устройства по RS485.
Несложная целочисленная обработка данных.
Сжатие данных. Насколько останется времени CPU...
Либо передача данных по RS485 (>1мбит), либо сохранение на диск (думаю через переходник USB-IDE)
Мониторинг работы через Ethernet (TCP/IP)
Сьем накопленной информации через Ethernet (TCP/IP)

Сейчас первые 2 пункта делает Texas, а 3-й - Lippert.
485 интерфейс(2Мбит) реализован через ISA на PIC-е.

Программирование и отладку хочется делать не через JTAG а по TCP-ip.
Для мониторинга хочется задействовать Bluetooth либо irda.

Все-ли реально сделать на субжевой машинке за 0.5 года, хотя-бы на первый взгляд ?
Если раньше работали с QNX 4.25 ...
6  Разработка / Встраиваемые системы / System-On-Chip : Июня 01, 2005, 03:31:02 pm
phyCore-PXA255 на -40 похоже тоже штучно не продается. Млин.
И что получается только трешки от ICOP-а? С потреблением 2 Вт...
7  Разработка / Встраиваемые системы / System-On-Chip : Июня 01, 2005, 02:58:06 pm
Забыл написать что -40 +85 надо обязательно.
CompuLab это круто ... Мне приглянулся CM-i686

Но я нашел их только в ФИОРД-е, который говорит что с диапазоном -40 +85 только от 50шт...

Может кто знает где можно меньшее количество брать?

phyCore-PXA255 - тоже круто. Но продавец пока молчит...
8  Разработка / Встраиваемые системы / System-On-Chip : Июня 01, 2005, 09:56:34 am
Нужен маленький думатель.
Подскажите есть-ли однокристальные контроллеры на которых QNX работать может?
Желательно чтобы были интегрированны:
Ram,Flash (В который QNX зашить можно).
Интерфейс какой-нибудь с более низкой железкой. От 1мбит/с (USB,Serial бывает быстрый,ISA,..., SPI,USART,).
Ethernet и IDE было-бы неплохо...
Или подскажите какие еще решения есть. Нужен минимальный размер и потребление.
9  Разработка / Программирование под QNX 4.x / MicroTime : Мая 05, 2005, 01:43:54 pm
Дописал я этот пример. Похоже он был рассчитан не на пентиумы. Или на старые QNX-ы.

#define CLOCK_8254   1193182

struct _timesel volatile far *Proc32Time = 0;
long Half_8254;
double NSec_8254;

void Init_8254(void){
   struct _osinfo OSData;
   qnx_osinfo( 0, &OSData );
   Proc32Time = (_timesel far*)MK_FP( OSData.timesel, 0);
   Half_8254 = Proc32Time->cnt8254 / 2;
   NSec_8254 = 1e9;
    NSec_8254 /= CLOCK_8254;
}

int Time_8254(struct timespec *tim) {
   static double InterTime;
   static long InterCount;
   static unsigned Status;
//   read 8254 timer chip timer 0
   _disable();
   tim->tv_sec=Proc32Time->seconds;
   tim->tv_nsec=Proc32Time->nsec;
   outp( 0x43, 0xC2 );      // latch status and count of counter 0
   Status = inp( 0x40 );
   if ( !( Status & 0x40 ) ){   // check for valid count
      if ( Status & 0x36 ){   // check for: mode 3, 2byte binary count
         InterCount = inp( 0x40 );             // lsb
         InterCount |= ( inp( 0x40 ) << 8 );   // msb
         _enable();
         InterCount = Half_8254-InterCount/2;
         if ( !( Status & 0x80) )   // if OUT pin low second sub-cycle
            InterCount += Half_8254;
      }else{   // bad mode - throw away data but do the 2 reads anyway
         _enable();
         inp( 0x40 );
         inp( 0x40 );
         return 1;
      }
   }else{   // bad status - do a bunch of reads to try to return sanity to the 8254
      _enable();
      inp( 0x40 );
      inp( 0x40 );
      inp( 0x40 );
      return 2;
   }
//   convert cycle count to nano-seconds
   InterTime = InterCount;
   InterTime *= NSec_8254;
   tim->tv_nsec += InterTime;
   if(tim->tv_nsec>1e9){
      tim->tv_sec++;
      tim->tv_nsec -= 1e9;
   }
   return 0;
}

void Time_OS(struct timespec *tim){
   _disable();
   tim->tv_sec=Proc32Time->seconds;
   tim->tv_nsec=Proc32Time->nsec;
   _enable();
}

Вызов однократно
Init_8254()
Затем
struct timespec tim
Time_8254(&tim)
Работает в 21 раз быстрее чем
clock_gettime(CLOCK_REALTIME,&tim)
.
10  Разработка / Программирование под QNX 4.x / MicroTime : Мая 05, 2005, 09:21:21 am
А кто-нибудь смотрел пример на ftp.qnx.com/usr/free/qnx4/os/utils/examples/Micro_time.tgz?
Смысл - получение более точного разрешения часов чем TickSize путем добавления к последнему значению счетчиков в Proc32 текущего значения счетчика 8254.

Времена только что-то получаются неправильные.

Там примерно такой код:

static double freq;
static double total_time;
...
qnx_osinfo( 0, &os_data );
tp = MK_FP( os_data.timesel, 0);
freq = tp->cycles_per_sec;//!!!
half_cycle_count = tp->cnt8254 / 2;
...
Получаются текущие значения счетчиков Proc32
cycle[0] = tp->cycle_lo;
cycle[1] = tp->cycle_hi;
...
Далее считыванием регистров таймера получается переменная inter_count
inter_count = inp( 0x40 );          // lsb
inter_count |= ( inp( 0x40 ) << 8 );   // msb
_enable();
inter_count = (tp->cnt8254 - inter_count) / 2;
if ( !( status & 0x80) )   // if OUT pin low second sub-cycle
  inter_count += half_cycle_count;
}

...
//   convert cycle count to seconds
total_time = cycle[1];
total_time = (total_time*0x10000)*0x10000 + cycle[0] + inter_count;
total_time *= 1/freq;//!!!

//   break (double)seconds to (u_long)seconds and (u_long)nano-seconds
seconds[0] = total_time;
seconds[1] = ( total_time - seconds[0] ) * 1000000000L;
seconds[0] += start_sec;   // convert to local time

Есть подозрения . Переменная inter_count считывается из 8254. Прибавляется к cycles[0]. А затем делится на freq.
А в этой freq число(149688780) - совершенно не похожее на стандартную частоту 8254 (1.19 ... Mhz). Зато это число сильно похоже на частоту моего CPU(150Mhz)...
tp->cnt8254 равно 11931 для ticksize 10ms. И изменяется при изменении ticksize. То есть похоже на правду.
А вот с tp->cycles_per_sec непонятно.
 
Может кто-нибудь подсказать правильный пример или нет?
Или что точно находится в структуре _timesel?
11  Разработка / Программирование под QNX 4.x / MK_FP C++ (было часы отстают) : Мая 05, 2005, 07:17:27 am
int far *tp;
qnx_osinfo( 0, &os_data );
tp=(int far*)MK_FP(os_data.timesel, offsetof(_timesel,seconds));
printf("sec=%d
",*tp);

Секунды пошли. Спасибо.
12  Разработка / Программирование под QNX 4.x / MK_FP C++ (было часы отстают) : Мая 04, 2005, 03:27:18 pm
int far *tp;
qnx_osinfo( 0, &os_data );
tp=(int*)MK_FP(os_data.timesel, offsetof(_timesel,seconds));
printf("sec=%d
",*tp);

Нет секунд. Там 16384009 и не изменяется от запуска к запуску.
Я еще повторюсь - компилируется при помощи С++ т.е. wpp. Файл с расширением cpp.
Там-же вроде нету никаких сегментов... И вообще вроде системная память в адресном пространстве процесса отсутствует... Или я с виндой путаю.
13  Разработка / Программирование под QNX 4.x / MK_FP C++ (было часы отстают) : Мая 03, 2005, 03:24:19 pm
Делаю так
int tp;
qnx_osinfo( 0, &os_data );
tp=(int)MK_FP(os_data.timesel, offsetof_timesel,seconds));
printf("sec=%d
",tp);

В tp не секунды.

Затем так:
int* tp;
qnx_osinfo( 0, &os_data );
tp=(int*)MK_FP(os_data.timesel, offsetof_timesel,seconds));
printf("sec=%d
",*tp);

Тоже не секунды.
А должны быть? В модели FLAT и при компиляции C++?
14  Разработка / Программирование под QNX 4.x / MK_FP C++ (было часы отстают) : Мая 03, 2005, 02:43:02 pm
Увеличил я TickSize до 1/10s стало сильно лучше.
Но все равно нужна дискретность 1/1000s.
Посмотрел примерчик на ftp.qnx.com/usr/free/qnx4/os/utils/examples/Micro_time.tgz. Кажется то что нужно,но есть там такой участок кода

qnx_osinfo( 0, &os_data );
tp = MK_FP(os_data.timesel,0);

timesel - есть сегмент в котором время хранится. У меня он всегда равен 177(Dec).
Как его в C++ прочитать?
Пробовал

tp = (_timesel*)MK_FP(os_data.timesel,0);
tp = (_timesel*)(os_data.timesel,0);
tp = (_timesel*)(os_data.timesel*256,0);
tp = (_timesel*)(os_data.timesel*256*256,0);

Подумал
И попробовал

Сначала
fd = shm_open("Physical", O_RDWR, 0777);
Затем
tp = (_timesel*)mmap(0, PAGESIZE, PROT_READ | PROT_WRITE,
MAP_SHARED, fd,os_data.timesel);
tp = (_timesel*)mmap(0, PAGESIZE, PROT_READ | PROT_WRITE,
MAP_SHARED, fd,os_data.timesel*256);
tp = (_timesel*)mmap(0, PAGESIZE, PROT_READ | PROT_WRITE,
MAP_SHARED, fd,os_data.timesel*256*256);

Все это не работает. Модель памяти FLAT.
Подскажите, пожалуйста, что не так делаю?
15  Разработка / Программирование под QNX 4.x / Часы отстают : Апреля 29, 2005, 02:38:54 pm
Похоже что действительно теряются прерывания таймера. Железка, регистрирующая события, может прилично тормозить процессор (ISA Удержание шины).
А интервалы между событиями и времена этих событий мерить надо. В том числе и те интервалы в которых эти торможения происходили.
Требуемая точность 1с за 24 часа. Вроде не так уж много. Часы в CMOS намного точнее. Как это можно сделать?
Требуемая дискретность 1/1000c.
Пробовал RDTSC. За 1 секунду получаю 149.5-150.1 млн тиков. Так за час может уйти на 10с. Может такое быть? Работает-ли этот счетчик во время удержания шины?
И еще в эти 24 часа нет доступа к другим часам. Система полностью автономна. А при возможности применения GPS была-бы не нужна .
Страниц: [1] 2 3