Например TDA7294

Форум РадиоКот • Просмотр темы - Помогите оттестировать производительность микроконтроллера A
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср янв 07, 2026 20:45:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 29 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Помогите оттестировать производительность микроконтроллера A
СообщениеДобавлено: Сб янв 11, 2014 00:00:34 
Родился

Зарегистрирован: Пт янв 10, 2014 23:57:37
Сообщений: 13
Рейтинг сообщения: 0
Добрый день/ночь!

Прошу помощи форумчан. Хочу использовать микроконтроллер для произведения большого объема вычислений, но не уверен в том, достаточна ли его мощность. Марка микроконтроллера еще не выбрана, скорее всего, на ядре 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);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 15:03:55 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
Во-первых, скажи конкретно, что ты хочешь вычислять, а то вот этот резкий переход от микроконтроллера до мощного ПС
RomanNew писал(а):
Хочу использовать микроконтроллер... Если производительности не хватит, буду вынужден использовать мощный РС...

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

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

В общем называй конкретную задачу, а то у тебя тут смешались в кучу кони, люди...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 18:53:11 
Родился

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

Создать имитационный стенд, который имитирует в реальном времени поведение технологического агрегата (упаковочная машина и т.д.). Назначение стенда - тестирование программ управления этим агрегатом. Программа находится в ПЛК.
Стенд делается для домашнего использования.
Агрегат имеет в своем составе: из 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? или что еще) для обсчета мат модели, а визуализация на отдельном компе. Этот вариант был бы оптимальным, т.к. нет новой ОС, в которую нужно вникать, визуализацию я бы сделал на дельфи, а микроконтроллер, не тратящий ресурсы на ОС, видеоадаптер и т.д., показал бы все, на что он способен.

Отсюда вопрос - насколько быстро производятся вычисления с плавающей точкой?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 19:00:35 
Родился

Зарегистрирован: Пт янв 10, 2014 23:57:37
Сообщений: 13
Рейтинг сообщения: 0
menzoda писал(а):
Аппаратная поддержка инструкций двойной точности есть наверное только во взрослых Cortex-A, но они уже микропроцессоры, с ними совсем другой разговор и ставить их в один ряд с AVR или даже Cortex-M неправильно.



Спасибо. Я в этой области новичок, поэтому действительно, кони с людьми иногда перепутываются

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

То есть, придется самостоятельно делать печатную плату, размещать на ней кучу чипов и писать обмен данными между ними?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 19:45:26 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 56
Зарегистрирован: Вт авг 28, 2012 22:21:33
Сообщений: 535
Рейтинг сообщения: 0
Я с 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.

Ну и конечно ПЛИС, но я с ними тоже не общался и за них ничего сказать не могу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 19:58:19 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
QNX - офегительно дорогая система для домашнего использования.
Драйвера для QNX писать не хотите, а софт для МК с нуля нормально? :) Утрирую, можете не отвечать.

Хочется многопоточности - возьмите realtime linux, Xenomai, RTAI, KURT.
В общем, скормите "realtime linux" посковику...
Хотите на ПК поставьте, хотите на что-нибудь вот такое с экранчиком и кучей интерфейсов типа CAN и RS-485.

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 21:09:06 
Родился

Зарегистрирован: Пт янв 10, 2014 23:57:37
Сообщений: 13
Рейтинг сообщения: 0
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, это уже хорошо


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 21:14:05 
Родился

Зарегистрирован: Пт янв 10, 2014 23:57:37
Сообщений: 13
Рейтинг сообщения: 0
Kavka писал(а):
QNX - офегительно дорогая система для домашнего использования.
Драйвера для QNX писать не хотите, а софт для МК с нуля нормально? :) Утрирую, можете не отвечать.

Хочется многопоточности - возьмите realtime linux, Xenomai, RTAI, KURT.
В общем, скормите "realtime linux" посковику...
Хотите на ПК поставьте, хотите на что-нибудь вот такое с экранчиком и кучей интерфейсов типа CAN и RS-485.


есть некоммерческая лицензия на QNX, я скачал и установил.
А насчет драйверов - просто непонятно, насколько это занятие сложное. Может быть, и зря я этого опасаюсь.
насчет софта для МК - ведь его можно писать на С, без учета конкретных регистров и т.д.? Я же не собираюсь ассемблер использовать

Насчет Linux - сам я не работал, но начитался, что такой быстрый цикл (1-2-3 мсек) непрерывно (это ключевое слово здесь - непрерывно) организовать невозможно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 21:15:08 
Родился

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

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

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

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

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

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

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

Или проверка на взаимные столкновения 30 тел между собой и с рамой машины - тоже куча однотипных расчетов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 21:24:55 
Родился

Зарегистрирован: Пт янв 10, 2014 23:57:37
Сообщений: 13
Рейтинг сообщения: 0
Kavka писал(а):
Хотите на ПК поставьте, хотите на что-нибудь вот такое с экранчиком и кучей интерфейсов типа CAN и RS-485.


Думал я про такие варианты, но не понял, зачем мне дорогой одноплатный уникальный комп, если можно купить обычный ПК в 5 раз дешевле в любом магазине.
Я же не собираюсь его ставить в электрошкаф на производстве, нет, мне сугубо домашнее использование. Требований компактности, виброустойчивости и т.л. нет.
Чем одноплатный комп лучше обычного ПК в случае домашнего использования?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 21:30:49 
Родился

Зарегистрирован: Пт янв 10, 2014 23:57:37
Сообщений: 13
Рейтинг сообщения: 0
Kavka писал(а):
Хотите на ПК поставьте, хотите на что-нибудь вот такое с экранчиком и кучей интерфейсов типа CAN и RS-485.


сорри, сейчас посмотрел повнимательнее, и вижу, что очень интересные устройства.
Спасибо, покопаю и в данном направлении!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 21:42:59 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
Подобные компы делают все кому не лень. Можно на любой вкус и цвет найти.
Вот ещё из другой весовой категории, например, http://www.hardkernel.com

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 22:06:53 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 1
Цитата:
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 KiB]
Скачиваний: 213

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 22:45:51 
Родился

Зарегистрирован: Пт янв 10, 2014 23:57:37
Сообщений: 13
Рейтинг сообщения: 0
da-nie писал(а):
Никаких драйверов можно вообще не писать - можно сразу в порты платы писать - никто не запрещает (впрочем, с PCI-платами я не работал, только с ISA).

Имейте в виду, в QNX есть много особенностей поведения системы. Скажем, есть такт ядра. И, насколько я помню, в пределах одного такта нельзя выполнять больше одной операции с мьютексом и им подобными объектами. Такт этот настраиваемый, но обычно, 1 мс. Впрочем, этот момент я не очень помню - тут вам читать надо будет.

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


Это на микроконтроллере?! :shock: Однозначно QNX и приложение под Photon.


спасибо за кучу интересной информации

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 22:50:28 
Родился

Зарегистрирован: Пт янв 10, 2014 23:57:37
Сообщений: 13
Рейтинг сообщения: 0
Kavka писал(а):
Подобные компы делают все кому не лень. Можно на любой вкус и цвет найти.
Вот ещё из другой весовой категории, например, http://www.hardkernel.com


Однако же, в чем все-таки плюс подобного решения для домашнего использования?
Чем это лучше ПК с установленным Win CE или Linux с процессором в 3-5 раз быстрее?
Я не придираюсь никаким образом, мне реально интересно, в чем моя ошибка?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 23:02:44 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 1
Цитата:
Не подскажете, как организовать использование 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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 23:13:57 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 24
Зарегистрирован: Вс янв 18, 2009 20:15:27
Сообщений: 256
Откуда: UA ZT
Рейтинг сообщения: 0
Цитата:
Создать имитационный стенд, который имитирует .... Назначение стенда - тестирование программ управления этим агрегатом. Программа находится в ПЛК.
...
Агрегат имеет в своем составе: из 10-20 моторов, 10-20 пневмоцилиндров, 30-50 дискретных датчиков и 30-50 перемещающихся в пространстве деталей,..


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

З.Ы. Создавайте имитатор на том же ПЛС что и в железе стоит ))

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


на производстве такой херней никто не занимается, кажется мне что топикастер диплом или курсовую пишет )))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 23:19:45 
Говорящий с текстолитом
Аватар пользователя

Карма: 33
Рейтинг сообщений: 148
Зарегистрирован: Вс июн 24, 2012 16:07:00
Сообщений: 1590
Откуда: Лен.Обл.
Рейтинг сообщения: 0
Цитата:
на производстве такой херней никто не занимается,


Такой хернёй могут заниматься в НИИ. 8)

_________________
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Сб янв 11, 2014 23:23:38 
Грызет канифоль
Аватар пользователя

Карма: 2
Рейтинг сообщений: 24
Зарегистрирован: Вс янв 18, 2009 20:15:27
Сообщений: 256
Откуда: UA ZT
Рейтинг сообщения: 0
ну да, как то не подумал :)) , чем же еще им заниматься осталось :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Помогите оттестировать производительность микроконтролле
СообщениеДобавлено: Вс янв 12, 2014 10:33:10 
Мудрый кот
Аватар пользователя

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
RomanNew писал(а):
Однако же, в чем все-таки плюс подобного решения для домашнего использования?
Чем это лучше ПК с установленным Win CE или Linux с процессором в 3-5 раз быстрее?
Я не придираюсь никаким образом, мне реально интересно, в чем моя ошибка?

Преимущества... Ну, например, если вы собираетесь экономить время на всём, в том числе и на доступе в GPIO и прочей переферии, то на подобных компьютерах такой доступ может быть сделан по-другому - там он может быть сделан не через PCI/PCIe/USB, что может быть в каких то ситуациях существенным. Например, известно, что на старых пентиумах доступ к параллельному порту (принтерному) работает быстрее, потому что на новых используются доп. мосты (прослойка между процессорной шиной, PCI/PCEe и непосредственно чипом с физическим интерфейсом).

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y