Помогите оттестировать производительность микроконтроллера A

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

Добрый день/ночь!

Прошу помощи форумчан. Хочу использовать микроконтроллер для произведения большого объема вычислений, но не уверен в том, достаточна ли его мощность. Марка микроконтроллера еще не выбрана, скорее всего, на ядре ARM или Cortex.

Прошу счастливых владельцев микроконтроллеров на ядре ARM и/или AVR произвести замер времени выполнения простейшего вычисления с вещественными числами.
Покупать отладочную плату и программатор для этого слишком накладно.

Если производительности не хватит, буду вынужден использовать мощный РС под управлением ОС реального времени. Либо можно запараллелить несколько микроконтроллеров.

Детали кода значения не имеют, нужно просто ПРИМЕРНО оценить длительность вычислений с применением умножения и деления вещественных чисел. Желательно использовать real двойной точности (64 бит), но это не принципиально.

Заранее благодарен всем откликнувшимся!


Пример кода на псевдоязыке

//желательно использовать real двойной точности (64 бит), но это не принципиально
real a = 1;
real b = 1234.567;

//получить текущее значение системного время в мсек или мксек
int StartTime = getCurrentTime();

//рабочий цикл
for (int i=0; i<1000000; i++)
{ a = a + (real(i) / b );
b = b + 0.000001;

//на всякий пожарный
If (a>100000000) {a=1};
}

//итоговая длительность вычислений
int Dur = getCurrentTime() - StartTime;

//используем полученное значение, чтобы слишком умный компилятор не удалил неиспользуемые вычисления
//вместо Print можно сделать что угодно, лишь бы использовать значение!
//например, сохранить в EEPROM
Print(a);
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Во-первых, скажи конкретно, что ты хочешь вычислять, а то вот этот резкий переход от микроконтроллера до мощного ПС
RomanNew писал(а):Хочу использовать микроконтроллер... Если производительности не хватит, буду вынужден использовать мощный РС...
говорит о том, что ты что-то делаешь не так. Если ты назовешь конкретную задачу и дашь требования по времени, то уже сразу можно будет прикинуть справится с ней микроконтроллер или нет, без прогона каких-то непонятных тестов.

Во-вторых, если тебе нужны вычисления с плавающей запятой, то ищи МК с FPU. Про AVR я ничего не знаю, но если говорить про ARM, то Cortex-M4F (еще есть Cortex-R) имеет FPU одинарной точности. Аппаратная поддержка инструкций двойной точности есть наверное только во взрослых Cortex-A, но они уже микропроцессоры, с ними совсем другой разговор и ставить их в один ряд с AVR или даже Cortex-M неправильно.

В общем называй конкретную задачу, а то у тебя тут смешались в кучу кони, люди...
Реклама
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

Реальная задача такова:

Создать имитационный стенд, который имитирует в реальном времени поведение технологического агрегата (упаковочная машина и т.д.). Назначение стенда - тестирование программ управления этим агрегатом. Программа находится в ПЛК.
Стенд делается для домашнего использования.
Агрегат имеет в своем составе: из 10-20 моторов, 10-20 пневмоцилиндров, 30-50 дискретных датчиков и 30-50 перемещающихся в пространстве деталей, плюс органы управления и индикации для оператора (кнопки и лампы).

Рабочий цикл программы стенда должен быть такой:
1 .Стенд получает данные с входов (100 дискретных входов + несколько аналоговых)
2. Затем по математической модели обсчитывается поведение агрегата (перемещение объектов в пространстве, срабатывание датчиков, работа моторов и пневматики)
3. После чего полученные данные выдаются на выходы - примерно 100 дискретных, несколько аналоговых, и несколько (~10) слов данных по CAN или RS485.

Длительность рабочего цикла хочется получить не более 2-3 мсек, а в идеале 1 мсек.

Полученные от стенда данные визуализируются в виде простейшей 2-мерной картинки, где отображены все перемещающиеся объекты, датчики, клапана и моторы.

В данный момент задача частично решена при помощи подручных средств (процессорный модуль фирмы Control Techniques), но имитирует только 5-10% от всех узлов агрегата, причем рабочий цикл составляет 15-20 мсек.
Это явно плохо! Нужно увеличение производительности примерно в 100 раз!
Оптимизация кода уже достала до смерти, хочется простое производительное решение, чтобы быстро решать задачу "в лоб", имея запас по производительности.

рассматриваю варианты:
1. РС с ОС реального времени. Уже установил QNX, но неохота разбираться с QNX, которая 100% потом никогда в жизни не пригодится. Кроме того, платы ввода-вывода Advantech (и другие) идут без драйверов. Драйвера нужно писать самостоятельно, чего не хотелось бы (хочется быстрый старт!).
2. РС c DOS. Проблема - организовать параллельное выполнение потока обсчета и потока визуализации. Смотрю в сторону расширений реального времени типа RTKernel. Либо, как бы это не было смешно, но использовать выделенный комп с обсчетом, а визуализацию смотреть на инструментальном ноутбуке.
3. Микроконтроллер (ARM? Cortex? DSP? или что еще) для обсчета мат модели, а визуализация на отдельном компе. Этот вариант был бы оптимальным, т.к. нет новой ОС, в которую нужно вникать, визуализацию я бы сделал на дельфи, а микроконтроллер, не тратящий ресурсы на ОС, видеоадаптер и т.д., показал бы все, на что он способен.

Отсюда вопрос - насколько быстро производятся вычисления с плавающей точкой?
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

menzoda писал(а):Аппаратная поддержка инструкций двойной точности есть наверное только во взрослых Cortex-A, но они уже микропроцессоры, с ними совсем другой разговор и ставить их в один ряд с AVR или даже Cortex-M неправильно.
Спасибо. Я в этой области новичок, поэтому действительно, кони с людьми иногда перепутываются

насчет микропроцессора Cortex-A - правильно ли я понимаю, что, в отличие от микроконтроллера, его (микропроцессор) придется самостоятельнос связывать с внешней памятью, микросхемами последовательного обмена (UART CAN и т.д.) и другой периферией, которая обычно уже входит в состав микроконтроллера?

То есть, придется самостоятельно делать печатную плату, размещать на ней кучу чипов и писать обмен данными между ними?
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Я с Cortex-A дела не имел, но обычно вся их периферия - это простенькие таймеры, UART, да PWM может быть, плюс всякие "взрослые" штуки типа Ethernet, графического ускорителя и контроллера DDR, может еще что-то есть. Память придется цеплять внешнюю, да. Корпуса у микропроцессоров обычно BGA типа, поэтому на коленке их не запаяешь, да и не всякое производство сможет это осилить. Зато у них гигагерцы частоты, несколько ядер, мощный FPU и тому подобное.

Судя по описанию моделировать надо много, хотя опять же ты не сказал, что из себя представляет моделирование допустим одного мотора/датчика/чегототам. Если там одно на второе умножить и третье вычесть, то это одно, а если интегралы вычислять да системы дифференциальных уравнений решать, то это другое. В любом случае об AVR мне кажется стоит забыть.

Возможно ты уложишься в Cortex-R4F. Посмотри на Texas Instruments, у них есть 220 МГц варианты микроконтроллеров нашпигованные разной периферией. Сможешь ли ты уложиться в Cortex-M4F не знаю, надо более конкретно смотреть на задачи. Как бы то ни было у STM есть 168МГц их варианты, а у Texas Instruments 150МГц. Про других производителей не знаю.

Еще у все тех же Texas Instruments есть интересные DSP, мощнее Cortex-M и Cortex-R, многоядерные, с хорошей периферией, внутренней памятью (не надо будет внешнюю городить), но может возникнуть проблема с корпусами: у некоторых только BGA.

Ну и конечно ПЛИС, но я с ними тоже не общался и за них ничего сказать не могу.
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

QNX - офегительно дорогая система для домашнего использования.
Драйвера для QNX писать не хотите, а софт для МК с нуля нормально? :) Утрирую, можете не отвечать.

Хочется многопоточности - возьмите realtime linux, Xenomai, RTAI, KURT.
В общем, скормите "realtime linux" посковику...
Хотите на ПК поставьте, хотите на что-нибудь вот такое с экранчиком и кучей интерфейсов типа CAN и RS-485.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

menzoda писал(а):Я с Cortex-A дела не имел, но обычно вся их периферия - это простенькие таймеры, UART, да PWM может быть, плюс всякие "взрослые" штуки типа Ethernet, графического ускорителя и контроллера DDR, может еще что-то есть. Память придется цеплять внешнюю, да. Корпуса у микропроцессоров обычно BGA типа, поэтому на коленке их не запаяешь, да и не всякое производство сможет это осилить. Зато у них гигагерцы частоты, несколько ядер, мощный FPU и тому подобное.

Судя по описанию моделировать надо много, хотя опять же ты не сказал, что из себя представляет моделирование допустим одного мотора/датчика/чегототам. Если там одно на второе умножить и третье вычесть, то это одно, а если интегралы вычислять да системы дифференциальных уравнений решать, то это другое. В любом случае об AVR мне кажется стоит забыть.

Возможно ты уложишься в Cortex-R4F. Посмотри на Texas Instruments, у них есть 220 МГц варианты микроконтроллеров нашпигованные разной периферией. Сможешь ли ты уложиться в Cortex-M4F не знаю, надо более конкретно смотреть на задачи. Как бы то ни было у STM есть 168МГц их варианты, а у Texas Instruments 150МГц. Про других производителей не знаю.

Еще у все тех же Texas Instruments есть интересные DSP, мощнее Cortex-M и Cortex-R, многоядерные, с хорошей периферией, внутренней памятью (не надо будет внешнюю городить), но может возникнуть проблема с корпусами: у некоторых только BGA.

Ну и конечно ПЛИС, но я с ними тоже не общался и за них ничего сказать не могу.
спасибо, почитаю в заданном направлении. Получается, что однозначно не AVR, это уже хорошо
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

Kavka писал(а):QNX - офегительно дорогая система для домашнего использования.
Драйвера для QNX писать не хотите, а софт для МК с нуля нормально? :) Утрирую, можете не отвечать.

Хочется многопоточности - возьмите realtime linux, Xenomai, RTAI, KURT.
В общем, скормите "realtime linux" посковику...
Хотите на ПК поставьте, хотите на что-нибудь вот такое с экранчиком и кучей интерфейсов типа CAN и RS-485.
есть некоммерческая лицензия на QNX, я скачал и установил.
А насчет драйверов - просто непонятно, насколько это занятие сложное. Может быть, и зря я этого опасаюсь.
насчет софта для МК - ведь его можно писать на С, без учета конкретных регистров и т.д.? Я же не собираюсь ассемблер использовать

Насчет Linux - сам я не работал, но начитался, что такой быстрый цикл (1-2-3 мсек) непрерывно (это ключевое слово здесь - непрерывно) организовать невозможно.
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

А теперь про математическую модель.

Обсчитывается перемещение самых разных объектов в пространстве. Самый сложный случай - по всем трем измерениям по второму закону ньютона. То есть, определяется сумма сил, действующих на объект и в соответствии с ней рассчитывается ускорение, скорость и позиция объекта. На тело могут действовать сила трения о конвейер (трение покоя и скольжения, разная в различных направлениях), сила от пневмоцилиндра (воздух в обоих полостях которого подается отнюдь не мгновенно, так же как и стравливается), сила от конвейера управляемого асинхронным мотором, удар смежной детали и т.д.. много всего. Кроме того, учитываются жесткие ограничения (упор), которые не дают перемещаться телу.

Такой обсчет применен только для нескольких деталей, т.к. он весьма сложен. Многие детали обсчитываются по 1 или двум координатам, не всегда с учетом 2-го закона ньютона, а бывает и проще: если тело находится на конвейере и не упирается ни во что, значит, оно перемещается вместе с ним.

Обсчитывается поведение пневмоцилиндров. На его катушки подается сигнал, значит, через Х мсек золотник переместится в другое положение, значит воздух через пневмотрубки с условным сопротивлением Х пойдет наполнять полость цилиндра, при этом давление внутри одной плости будет возрастать, а из другой воздух при этом плавно стравливается в атмосферу. Отсюда считаем сумму сил, действующих на поршень цилиндра, отсюда считаем перемещение штока цилиндра по 2-му закону ньютона с учетом мгновенной внешней нагрузки сил трения в цилиндре.

Аналогично с асинхронными моторами. Имеем частоту, поданную на мотор, имеем мгновенную скорость вращения, считаем скольжение ротора, отсюда ток и момент на валу, отсюда по 2-му З.Н считаем перемещение вала мотора. На валу мотора стоит энкодер, он выдает сигнал в частотник, ПИД регулятор которого тоже изменяет частоту выходного тока, подаваемого на мотор. Это тоже моделируется (хотя, наверное, уже зря).

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

Откуда берется большой объем вычислений? - например, Имея 30 тел и 30 датчиков, приходится сравнивать положение каждого датчика с позицией каждого тела, отсюда цикл в 900 итераций.

Или проверка на взаимные столкновения 30 тел между собой и с рамой машины - тоже куча однотипных расчетов.
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

Kavka писал(а): Хотите на ПК поставьте, хотите на что-нибудь вот такое с экранчиком и кучей интерфейсов типа CAN и RS-485.
Думал я про такие варианты, но не понял, зачем мне дорогой одноплатный уникальный комп, если можно купить обычный ПК в 5 раз дешевле в любом магазине.
Я же не собираюсь его ставить в электрошкаф на производстве, нет, мне сугубо домашнее использование. Требований компактности, виброустойчивости и т.л. нет.
Чем одноплатный комп лучше обычного ПК в случае домашнего использования?

P/S - у нас на производстве используются только ПЛК, никаких РС-совместимых устройств. Хорошая штука. но стоит неподъемных денег (один контроллер AllenBradley с езернетом, девай-нетом, несколько модулей ввода-вывода - тянет почти под 500-800 тыщ рублей, точнее не помню). Причем можно в шину вставить несколько процессорных модулей и тем самым распараллелить все вычисления. Одна проблема - 4 тыщи евро за ЦПУ. И еще софт за 300-400 тыщ руб.
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

Kavka писал(а): Хотите на ПК поставьте, хотите на что-нибудь вот такое с экранчиком и кучей интерфейсов типа CAN и RS-485.
сорри, сейчас посмотрел повнимательнее, и вижу, что очень интересные устройства.
Спасибо, покопаю и в данном направлении!
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Подобные компы делают все кому не лень. Можно на любой вкус и цвет найти.
Вот ещё из другой весовой категории, например, http://www.hardkernel.com
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.

Сообщение da-nie »

1. РС с ОС реального времени. Уже установил QNX, но неохота разбираться с QNX, которая 100% потом никогда в жизни не пригодится. Кроме того, платы ввода-вывода Advantech (и другие) идут без драйверов. Драйвера нужно писать самостоятельно, чего не хотелось бы (хочется быстрый старт!).
А вот это вы зря. Довольно простая в освоении ОС. Особенно, если вам нужно просто в текстовом режиме работать с оборудованием. Никаких драйверов можно вообще не писать - можно сразу в порты платы писать - никто не запрещает (впрочем, с PCI-платами я не работал, только с ISA).
QNX - офегительно дорогая система для домашнего использования.
Ну... Есть кейген. :) До версии 6.4 работает. Но моя любимая 6.3.1.
А насчет драйверов - просто непонятно, насколько это занятие сложное.
А ничего там особо сложного нет. Перехват стандартных функций open,close,devctrl,read,write. Вот фактически и весь драйвер в QNX. Он запускается, регистрируется в каталоге /dev/, и... всё.
Длительность рабочего цикла хочется получить не более 2-3 мсек, а в идеале 1 мсек.
Имейте в виду, в QNX есть много особенностей поведения системы. Скажем, есть такт ядра. И, насколько я помню, в пределах одного такта нельзя выполнять больше одной операции с мьютексом и им подобными объектами. Такт этот настраиваемый, но обычно, 1 мс. Впрочем, этот момент я не очень помню - тут вам читать надо будет.
Полученные от стенда данные визуализируются в виде простейшей 2-мерной картинки, где отображены все перемещающиеся объекты, датчики, клапана и моторы.
Это на микроконтроллере?! :shock: Однозначно QNX и приложение под Photon.

Пример драйвера под QNX:

Фрагмент регистрирующий мой драйвер CAN и перенаправляющий запросы в мой класс CDriverCover (этот класс является оболочкой для класса CDriver - в оболочке сделан доступ к функциям класса CDriver через мьютекс):
Спойлер

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <sys/iofunc.h>
#include <sys/dispatch.h>
#include <string.h> //memset;

//!!!!!!!!!! выравнивание структур нужно задавать везде!!!!!!!!!!
#pragma pack(1)
#include "cdrivercover.h"
extern CDriverCover *cDriverCoverPtr;
//----------------------------------------------------------------------------------------------------
//сигналы
void Signal_Exit(int s_code);//уничтожение процесса
//назначенные функции обработки
int daemon_open(resmgr_context_t *ctp,io_open_t *msg,iofunc_attr_t *attr,void *extra);
int daemon_close_dup(resmgr_context_t* ctp,io_close_t* msg,iofunc_ocb_t* ocb);
int daemon_devctl(resmgr_context_t *ctp,io_devctl_t *msg,iofunc_ocb_t *ocb);
//----------------------------------------------------------------------------------------------------

int main(int argc, char *argv[])
{
 //запускаемся	
 pid_t pid=fork();
 if (pid<0) exit(EXIT_FAILURE);//если ошибка создания - выходим
 if (pid>0) exit(EXIT_SUCCESS);//выходим из родительского процесса
 umask(0);//задаём файловую маску
 //создаём новый SID (идентификатор сессии) для дочернего процесса
 pid_t sid=setsid();
 if (sid<0) exit(EXIT_FAILURE);//ошибка  

 ThreadCtl(_NTO_TCTL_IO,NULL);
 //проверим отсутствие файла устройства
 printf("\n\nStarting CAN driver...\n"); 
 FILE *file=fopen("/dev/can","rb");
 if (file!=NULL)
 {
  fclose(file);
  printf("Multiple declaration can!\n");
  exit(EXIT_FAILURE);
 }
 cDriverCoverPtr=new CDriverCover("/usr/bin/CANDriver");
 if (cDriverCoverPtr==NULL) exit(EXIT_FAILURE); 
 if (cDriverCoverPtr->GetDriverEnabled()==false) exit(EXIT_FAILURE); 
 
 //регистрируем драйвер
 dispatch_t *dpp;
 resmgr_attr_t resmgr_attr;
 resmgr_context_t *ctp;
 resmgr_connect_funcs_t connect_func;
 resmgr_io_funcs_t io_func;
 iofunc_attr_t attr;
 if ((dpp=dispatch_create())==NULL)
 {
  //завершение работы
  printf("Error create dispatch !\n");
  printf("CAN driver exit\n");
  exit(EXIT_FAILURE);
 }
 memset(&resmgr_attr,0,sizeof(resmgr_attr));
 resmgr_attr.nparts_max=1;
 resmgr_attr.msg_max_size=65536;
 iofunc_func_init(_RESMGR_CONNECT_NFUNCS,&connect_func,_RESMGR_IO_NFUNCS,&io_func);
 iofunc_attr_init(&attr,S_IFNAM|0666,0,0);
 io_func.devctl=&daemon_devctl;
 connect_func.open=&daemon_open;
 io_func.close_dup=&daemon_close_dup;
 if (resmgr_attach(dpp,&resmgr_attr,"/dev/can",_FTYPE_ANY,0,&connect_func,&io_func,&attr)==-1)
 {
  //завершение работы
  printf("Error registering CAN driver !\n");
  printf("CAN driver exit\n");
  exit(EXIT_FAILURE);
 }
 //подключим сигналы
 signal(SIGINT,Signal_Exit);
 signal(SIGTERM,Signal_Exit);
 signal(SIGKILL,Signal_Exit);
 signal(SIGCLD,Signal_Exit);
 signal(SIGQUIT,Signal_Exit);   
 ctp=resmgr_context_alloc(dpp);
 
  //основной цикл драйвера
 while(1)
 {
  if ((ctp=resmgr_block(ctp))==NULL)
  {
   //просим драйвер завершить работу 	
   cDriverCoverPtr->Exit();
   //завершение работы
   printf("Error in regmgr_block !\n");
   printf("CAN driver exit\n");   
   delete(cDriverCoverPtr);
   exit(EXIT_FAILURE);
  }
  resmgr_handler(ctp);
 }
 delete(cDriverCoverPtr);
 exit(EXIT_SUCCESS);
}
//----------------------------------------------------------------------------------------------------
//сигналы
//----------------------------------------------------------------------------------------------------
//уничтожение подчинённого процесса
void Signal_Exit(int s_code)
{
 //просим драйвер завершить работу 	
 cDriverCoverPtr->Exit();
 printf("CAN driver exit\n");
 if (cDriverCoverPtr!=NULL) delete(cDriverCoverPtr); 
 exit(EXIT_SUCCESS);
}

//----------------------------------------------------------------------------------------------------
//назначенные функции обработки
//----------------------------------------------------------------------------------------------------
int daemon_open(resmgr_context_t *ctp,io_open_t *msg,iofunc_attr_t *attr,void *extra)
{
 if (cDriverCoverPtr==NULL) return(ENOSYS);
 return(cDriverCoverPtr->Open(ctp,msg,attr,extra));	
}
int daemon_close_dup(resmgr_context_t* ctp,io_close_t* msg,iofunc_ocb_t* ocb)
{
 if (cDriverCoverPtr==NULL) return(ENOSYS);
 return(cDriverCoverPtr->CloseDup(ctp,msg,ocb));	
}
int daemon_devctl(resmgr_context_t *ctp,io_devctl_t *msg,iofunc_ocb_t *ocb)
{
 if (cDriverCoverPtr==NULL) return(ENOSYS);
 return(cDriverCoverPtr->DevCtl(ctp,msg,ocb));
}
CANDriver.rar
(172.05 КБ) 224 скачивания
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Контактная информация:
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

da-nie писал(а):Никаких драйверов можно вообще не писать - можно сразу в порты платы писать - никто не запрещает (впрочем, с PCI-платами я не работал, только с ISA).

Имейте в виду, в QNX есть много особенностей поведения системы. Скажем, есть такт ядра. И, насколько я помню, в пределах одного такта нельзя выполнять больше одной операции с мьютексом и им подобными объектами. Такт этот настраиваемый, но обычно, 1 мс. Впрочем, этот момент я не очень помню - тут вам читать надо будет.
Полученные от стенда данные визуализируются в виде простейшей 2-мерной картинки, где отображены все перемещающиеся объекты, датчики, клапана и моторы.
Это на микроконтроллере?! :shock: Однозначно QNX и приложение под Photon.
спасибо за кучу интересной информации

Если можно прямо писать/читать из портов платы, то это меняет все дело! На фиг тогда драйверы.
Не подскажете, как организовать использование ISA плат ввода-вывода, где брать материнские платы под это дело? Ведь на современных мат.платах даже PCI уже идет ненастоящий, он из PCI-Express преобразуется (чипсеты не поддерживают).

А визуализация по любому должна быть на ПК, понятно что по другому не очень реально, тем более простота рисования на дельфи...

И все равно все ОС имеют мелкие неприятные особенности, например. указанное вами ограничение в 1 мсек, и сколько там еще мелких ограничений откроется? Хотелось бы вообще без ОС, чтоб никаких гвоздей. Приложение же у меня будет однозадачное, только обсчет мат.модели и ввод вывод, и все это синхронно, зачем тут ОС? Только для осуществления самого факта работа на ПК, получается.
Если бы я видел хоть какое-то применение QNX в будущем, без колебаний выбрал бы эту платформу. Надо подумать.
Родился
Сообщения: 13
Зарегистрирован: Пт янв 10, 2014 23:57:37

Сообщение RomanNew »

Kavka писал(а):Подобные компы делают все кому не лень. Можно на любой вкус и цвет найти.
Вот ещё из другой весовой категории, например, http://www.hardkernel.com
Однако же, в чем все-таки плюс подобного решения для домашнего использования?
Чем это лучше ПК с установленным Win CE или Linux с процессором в 3-5 раз быстрее?
Я не придираюсь никаким образом, мне реально интересно, в чем моя ошибка?
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.

Сообщение da-nie »

Не подскажете, как организовать использование ISA плат ввода-вывода, где брать материнские платы под это дело? Ведь на современных мат.платах даже PCI уже идет ненастоящий, он из PCI-Express преобразуется (чипсеты не поддерживают).
Можно покупать платы в формате PC-104 (и процессорный модуль тоже! Всё это собирается в этажерку друг над другом). А вообще, есть материнки с ISA-слотами - вам надо просто поискать - мы покупали. Но стоят дорого - около 10 тыс. за плату уровня Core Duo.
А визуализация по любому должна быть на ПК, понятно что по другому не очень реально, тем более простота рисования на дельфи...
Если использовать AppBuilder можно рисовать в QNX на форме почти как в Delphi. Там интерфейс рисуется в этом самом построителе интерфейсов. Но в отличие от делфи все обработчики и функционал писать надо ручками.
Ах да, QNX 6.4 НЕ СТАВЬТЕ! У него исключена среда разработки в QNX. Ставьте 6.3.1 - лучший из всех, что я видел.

И все равно все ОС имеют мелкие неприятные особенности, например. указанное вами ограничение в 1 мсек,
Системный тик настраивается хоть до наносекунд. Но там нужно следить, чтобы система успевала обрабатывать все процессы и прерывания за это время. Иначе QNX виснет - ядро постоянно занято.
Не подскажете, как организовать использование ISA плат ввода-вывода,
А вот так:

Код: Выделить всё

ThreadCtl(_NTO_TCTL_IO,NULL); //разрешаем доступ к портам и памяти

// в membaseaddress - физический адрес памяти
// в BaseAddressPointerChannel - будет адрес для доступа - в него нужно будет писать и из него читать

unsigned char *BaseAddressPointerChannel=(unsigned char*)mmap_device_memory(0,0xFF,PROT_READ|PROT_WRITE|PROT_NOCACHE,0,membaseaddress);
 if (BaseAddressPointerChannel==MAP_FAILED)
 {
  BaseAddressPointerChannel=NULL;
  return(false);//ошибка
 }

//Когда надо закрывать приложение возвращаем адрес в систему:
if (BaseAddressPointerChannel!=NULL) munmap_device_memory(BaseAddressPointerChannel,0xFF);


// а вот так пишут в порты
//BaseAddress - адрес порта
//Port - полученный адрес для работы с портом

uintptr_t Port=mmap_device_io(1,BaseAddress);	
//запись в порт байта
out8(Port,2);
//чтение из порта байта
in8(Port);

Если бы я видел хоть какое-то применение QNX в будущем
Для себя можно использовать для управления чем угодно. :) Но в целом не очень нужно дома, конечно.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 256
Зарегистрирован: Вс янв 18, 2009 20:15:27
Откуда: UA ZT

Сообщение ozzy »

Создать имитационный стенд, который имитирует .... Назначение стенда - тестирование программ управления этим агрегатом. Программа находится в ПЛК.
...
Агрегат имеет в своем составе: из 10-20 моторов, 10-20 пневмоцилиндров, 30-50 дискретных датчиков и 30-50 перемещающихся в пространстве деталей,..
создаем имитатор для такого количества датчиков и прочего )) ну, ну, только возник вопросик, а как правильность работы имитатора проверятся будет при таком количестве переменных.

З.Ы. Создавайте имитатор на том же ПЛС что и в железе стоит ))
Обсчитывается поведение пневмоцилиндров. На его катушки подается сигнал, значит, через Х мсек золотник переместится в другое положение, значит воздух через пневмотрубки с условным сопротивлением Х пойдет наполнять полость цилиндра, ..... Отсюда считаем сумму сил, действующих на поршень цилиндра, отсюда считаем перемещение штока цилиндра по 2-му закону ньютона ....
на производстве такой херней никто не занимается, кажется мне что топикастер диплом или курсовую пишет )))
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1590
Зарегистрирован: Вс июн 24, 2012 16:07:00
Откуда: Лен.Обл.

Сообщение da-nie »

на производстве такой херней никто не занимается,
Такой хернёй могут заниматься в НИИ. 8)
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 256
Зарегистрирован: Вс янв 18, 2009 20:15:27
Откуда: UA ZT

Сообщение ozzy »

ну да, как то не подумал :)) , чем же еще им заниматься осталось :beer:
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

RomanNew писал(а):Однако же, в чем все-таки плюс подобного решения для домашнего использования?
Чем это лучше ПК с установленным Win CE или Linux с процессором в 3-5 раз быстрее?
Я не придираюсь никаким образом, мне реально интересно, в чем моя ошибка?
Преимущества... Ну, например, если вы собираетесь экономить время на всём, в том числе и на доступе в GPIO и прочей переферии, то на подобных компьютерах такой доступ может быть сделан по-другому - там он может быть сделан не через PCI/PCIe/USB, что может быть в каких то ситуациях существенным. Например, известно, что на старых пентиумах доступ к параллельному порту (принтерному) работает быстрее, потому что на новых используются доп. мосты (прослойка между процессорной шиной, PCI/PCEe и непосредственно чипом с физическим интерфейсом).
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Ответить

Вернуться в «ARM»