Страница 1 из 1

Распределение ресурсов МК

Добавлено: 04 фев 2014, 12:49
stm32
Добрый день!
Хотелось бы спросить у знатоков.
Есть много данных которые необходимо считать контроллеру stm32f10x.
Все данные я считаю в прерывании, за одно прерывание МК не успевает всё просчитать(нужно целых 10), как мне поступать?
Числа с плавающей запятой не использую, правда есть кубический корень, который считается много раз, и умножение в общем много всего.

Re: Распределение ресурсов МК

Добавлено: 04 фев 2014, 13:53
Keroronsk
В прерывании ставить флаг, обрабатывать всё в main-е?

Re: Распределение ресурсов МК

Добавлено: 04 фев 2014, 16:23
BSVi
Если не нужен сильный рилтайм, можно данные скидывать в буфер, возводить флаг, а мэйн забирает данные и считает что нужно. Так, к примеру, работает звук в большинстве компьютерных ОС.

Re: Распределение ресурсов МК

Добавлено: 04 фев 2014, 19:03
stm32
Да интересная идея, но данные необходимо считать как можно быстрее, желательно влезть в одно прерывание, если не получится то тогда в 2 или 3. Какие могут быть ещё варианты?
Пока время расчёта занимает 10 прерываний 250us, что очень плохо(
Конечно можно взять проц помощнее, но хотелось бы как то оптимизировать, только не знаю как.

Re: Распределение ресурсов МК

Добавлено: 04 фев 2014, 19:10
BSVi
Какие могут быть ещё варианты?

Отдать расчет внешнему устройству, к примеру.

Re: Распределение ресурсов МК

Добавлено: 04 фев 2014, 19:12
stm32
Это компу отдать данные считать?
Я думал меня здесь пошлют к ПЛИСам))
Где то на в инете видел, что ПЛИС если идёт речь о расчётах вне конкуренции по сравнению с МК) Могу ошибаться т.к. с ПЛИС не знаком вообще(

Re: Распределение ресурсов МК

Добавлено: 04 фев 2014, 19:17
BSVi
Можно компу, можно другому МК, можно ПЛИСине. Если важно получить жесткий рилтайм, все методы хороши.

Re: Распределение ресурсов МК

Добавлено: 04 фев 2014, 19:24
stm32
Устройство автономное должно быть, комп сразу отпадает. Другому МК как вариант конечно и плис тоже) Также важна цена)
Попробую конечно пока оптимизировать код, посмотрим что получится.
Всем спасибо за ответы!

Re: Распределение ресурсов МК

Добавлено: 05 фев 2014, 00:12
Qic
Остаётся только оптимизация математики - максимально упростить вычисления.
Перейти на более производительный мк, не менее логично как оптимизация математики.
Ну и от безысходности второй мк / плис. (Суперскалярная архитектура, привет!)

Re: Распределение ресурсов МК

Добавлено: 05 фев 2014, 13:55
N1X
Если не секрет и можете озвучить задачу - вариантов может стать больше ;)

Re: Распределение ресурсов МК

Добавлено: 05 фев 2014, 17:53
stm32
Озвучить задачу к сожалению не могу.
Ещё наверняка кто то пользуется в МК при умножении и делении на 2^n битовыми сдвигами.
Когда то встречал такой способ только применительно к дробям.
Как мне данные с АЦП пересчитывать в напряжени, допустим измеряется напряжение МК на нижнем плече делителя, далее я захожу в прерывание и привожу его к нормальному умножая Данные_АЦП_12бит * K / 4095. Где K дробный коэффициент. Понятия не имею как считать здесь по другому, но я бы сделал так:
1. Можно конечно сделать таблицу где будет 4095 элементов и вообще ничего не считать, зараннее всё просчитав в экселе.
2. Можно как то битовыми сдвигами намутить дробный коэффициент К.
Только вот вариант 2 я не знаю как сделать, точнее не помню.
Есть пару мест в коде где извлекается квадратный и кубический корень.
Для быстрого извлечения квадратного корня наверное есть какие то ускоренные мат. ф-ии нашёл темку для квадратного корня ST Forum

Re: Распределение ресурсов МК

Добавлено: 05 фев 2014, 21:42
Proletariat
Задачу озвучить все равно надо. Не раскрывай всех подробностей. Но что важно: сколько датчиков, какой samplerate нужен, т.е. как много данных в секунду с одного датчика. Если ты это выводишь на экран человеку, то больше 5-10 раз в секунду вообще не нужно, в этом смысле, в прерываниях нужно выставиь флаги, а работать с датчиками в Mainloop. Если нужны все данные, например дляизмерения спектра, то данные нужно собирать сырые, не обрабатывая их, копить и потом уже скопом обрабатывать используя оптимальные алгоритмы. Пока сложно гадать и ответ правильный и оптимальный тяжело найти. Потому как не зная задачу трудно предложить альтернативу используемым методам. Вопрос - нафига нужны данные в объеме 12bit*4kHz (я так понимаю, что это твоя реальная скорость сейчас)?

Re: Распределение ресурсов МК

Добавлено: 05 фев 2014, 23:44
stm32
12bit * 40kHz
Ацп в стм32 быстрый успевает за 1/4 периода обмерить что нужно если не меньше, всё это нужно для быстродействия системы, если что то пойдёт не так чтобы можно было вовремя всё запретить и все ключи закрыть.
Данные никому не выводятся и не планируется.
Просто АЦП считывает напряжение и по определённым формулам рассчитывает скважности, формулы правда огроменные.

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 11:24
N1X
А нельзя от обратного пойти? Постчитать порог безопасного уровня и просто сравнивать?

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 13:27
stm32
Можно. Я правильно понимаю вы про то чтобы не считать Данные_АЦП_12бит * K / 4095, а привести порог к АЦП. Можно да, но дальше значение Данные_АЦП_12бит * K / 4095 используется при расчётах, и есть места где оказывается под кубическим корнем в квадрате.

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 13:37
Qic
Ну а К что такое? Оноже не каждый раз новое, только при его изменении пересчитывать K/4096. Уже меньше времени занято.

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 14:48
stm32
В К уже учтено 1/4096.

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 19:19
stm32
Удалось сократить до 175us.
Однако не избавился от корней что очен плохо.
Смотрел в файле math.h там ф-ии извлечения корней только для флоат и дабл типов и имеют существенное отличие по времени друг от друга, а я везде использую целочисленные значения. Может кто то испльзовал альтернативные ф-ии чтобы извлекать строго инты, наверняка они будут раза в 2 быстрей, если не в 3.

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 19:23
BSVi
Стоит углубиться в математику, и, в особенности, в CORDIC

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 20:26
gylka
stm32 писал(а):Смотрел в файле math.h там ф-ии извлечения корней только для флоат и дабл типов и имеют существенное отличие по времени друг от друга, а я везде использую целочисленные значения. Может кто то испльзовал альтернативные ф-ии чтобы извлекать строго инты, наверняка они будут раза в 2 быстрей, если не в 3.

То есть чтобы даже в вычислениях были только целые?
Я конечно понимаю что тупо слать нагугленное, так как наверное автор сам искал, но вряд ли найдется больше инфы чем на СО (тему оптимальных корней поднимали в инете миллион раз :) )
http://stackoverflow.com/questions/1100 ... arm-thumb2
http://stackoverflow.com/questions/4930 ... t-of-sqrtn
http://www.finesse.demon.co.uk/steven/sqrt.html

Ну и дальше можно еще просмотреть в похожих темах на СО, но этих должно хватить, имхо

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 20:36
stm32
Спасибо за ссылки, буду смотреть.

Re: Распределение ресурсов МК

Добавлено: 06 фев 2014, 21:43
Proletariat
Так, все равно не понятно, из всего что написано понял следующее
1. Данные АЦП служат для высчитывания неких крайних условий, по которым необходимо запарковать всю систему. Нельзя ли свести задачу к обратной, как это предлагалось ранее. Заранее высчитать какие пороговые значения должны быть у АЦП, при выходе за пределы - парковать систему. Не надо вычислять никаких корней, просто преобразовать ваши пороговые значения к константам АЦП и определить пороги срабатывания для всех каналов.
2. Какая должна быть реакция на события? Сколько времени занимает парковка системы? Время реакции, как я понял у вас составляет 170мкс, Его можно смело увеличивать до времени парковки системы. Поскольку быстрее вы все равно не запаркуетесь, а значит необходимости получать раньше на 100 мкс сигнал на парковку не имеет смысла. Время парковки системы подразумевает ввод-вывод токов, замыкание размыкание ключей и оно будет зависеть от конкретной схемы. Непонятно. В реальноссти поток данных в 500кбит/сек для того чтобы вовремя запарковать систему - это очень жирно.

Re: Распределение ресурсов МК

Добавлено: 24 фев 2015, 18:47
piroJ0KE
"Корни" - заготовить табличку готовую, нэ, не годится?