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

Все о микроконтроллерах: AVR, PIC, STM8, STM32, Arduino, Altera, Xilinx, все что угодно. Этот раздел для всего что клацает байтиками.
Post Reply
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

Добрый день!
Хотелось бы спросить у знатоков.
Есть много данных которые необходимо считать контроллеру stm32f10x.
Все данные я считаю в прерывании, за одно прерывание МК не успевает всё просчитать(нужно целых 10), как мне поступать?
Числа с плавающей запятой не использую, правда есть кубический корень, который считается много раз, и умножение в общем много всего.
Keroronsk
Posts: 21
Joined: 19 Feb 2013, 06:53

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

Post by Keroronsk »

В прерывании ставить флаг, обрабатывать всё в main-е?
User avatar
BSVi
Адепт
Posts: 3577
Joined: 15 Mar 2011, 12:32
Location: Киев

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

Post by BSVi »

Если не нужен сильный рилтайм, можно данные скидывать в буфер, возводить флаг, а мэйн забирает данные и считает что нужно. Так, к примеру, работает звук в большинстве компьютерных ОС.
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

Да интересная идея, но данные необходимо считать как можно быстрее, желательно влезть в одно прерывание, если не получится то тогда в 2 или 3. Какие могут быть ещё варианты?
Пока время расчёта занимает 10 прерываний 250us, что очень плохо(
Конечно можно взять проц помощнее, но хотелось бы как то оптимизировать, только не знаю как.
Last edited by stm32 on 04 Feb 2014, 19:10, edited 1 time in total.
User avatar
BSVi
Адепт
Posts: 3577
Joined: 15 Mar 2011, 12:32
Location: Киев

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

Post by BSVi »

Какие могут быть ещё варианты?
Отдать расчет внешнему устройству, к примеру.
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

Это компу отдать данные считать?
Я думал меня здесь пошлют к ПЛИСам))
Где то на в инете видел, что ПЛИС если идёт речь о расчётах вне конкуренции по сравнению с МК) Могу ошибаться т.к. с ПЛИС не знаком вообще(
User avatar
BSVi
Адепт
Posts: 3577
Joined: 15 Mar 2011, 12:32
Location: Киев

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

Post by BSVi »

Можно компу, можно другому МК, можно ПЛИСине. Если важно получить жесткий рилтайм, все методы хороши.
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

Устройство автономное должно быть, комп сразу отпадает. Другому МК как вариант конечно и плис тоже) Также важна цена)
Попробую конечно пока оптимизировать код, посмотрим что получится.
Всем спасибо за ответы!
Qic
Posts: 985
Joined: 03 Feb 2012, 00:14

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

Post by Qic »

Остаётся только оптимизация математики - максимально упростить вычисления.
Перейти на более производительный мк, не менее логично как оптимизация математики.
Ну и от безысходности второй мк / плис. (Суперскалярная архитектура, привет!)
User avatar
N1X
Posts: 321
Joined: 20 Sep 2011, 20:11
Location: Беларусь, Гомель

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

Post by N1X »

Если не секрет и можете озвучить задачу - вариантов может стать больше ;)
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

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

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

Post by Proletariat »

Задачу озвучить все равно надо. Не раскрывай всех подробностей. Но что важно: сколько датчиков, какой samplerate нужен, т.е. как много данных в секунду с одного датчика. Если ты это выводишь на экран человеку, то больше 5-10 раз в секунду вообще не нужно, в этом смысле, в прерываниях нужно выставиь флаги, а работать с датчиками в Mainloop. Если нужны все данные, например дляизмерения спектра, то данные нужно собирать сырые, не обрабатывая их, копить и потом уже скопом обрабатывать используя оптимальные алгоритмы. Пока сложно гадать и ответ правильный и оптимальный тяжело найти. Потому как не зная задачу трудно предложить альтернативу используемым методам. Вопрос - нафига нужны данные в объеме 12bit*4kHz (я так понимаю, что это твоя реальная скорость сейчас)?
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

12bit * 40kHz
Ацп в стм32 быстрый успевает за 1/4 периода обмерить что нужно если не меньше, всё это нужно для быстродействия системы, если что то пойдёт не так чтобы можно было вовремя всё запретить и все ключи закрыть.
Данные никому не выводятся и не планируется.
Просто АЦП считывает напряжение и по определённым формулам рассчитывает скважности, формулы правда огроменные.
Last edited by stm32 on 06 Feb 2014, 13:25, edited 2 times in total.
User avatar
N1X
Posts: 321
Joined: 20 Sep 2011, 20:11
Location: Беларусь, Гомель

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

Post by N1X »

А нельзя от обратного пойти? Постчитать порог безопасного уровня и просто сравнивать?
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

Можно. Я правильно понимаю вы про то чтобы не считать Данные_АЦП_12бит * K / 4095, а привести порог к АЦП. Можно да, но дальше значение Данные_АЦП_12бит * K / 4095 используется при расчётах, и есть места где оказывается под кубическим корнем в квадрате.
Qic
Posts: 985
Joined: 03 Feb 2012, 00:14

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

Post by Qic »

Ну а К что такое? Оноже не каждый раз новое, только при его изменении пересчитывать K/4096. Уже меньше времени занято.
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

В К уже учтено 1/4096.
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

Удалось сократить до 175us.
Однако не избавился от корней что очен плохо.
Смотрел в файле math.h там ф-ии извлечения корней только для флоат и дабл типов и имеют существенное отличие по времени друг от друга, а я везде использую целочисленные значения. Может кто то испльзовал альтернативные ф-ии чтобы извлекать строго инты, наверняка они будут раза в 2 быстрей, если не в 3.
User avatar
BSVi
Адепт
Posts: 3577
Joined: 15 Mar 2011, 12:32
Location: Киев

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

Post by BSVi »

Стоит углубиться в математику, и, в особенности, в CORDIC
gylka
Posts: 14
Joined: 17 Sep 2013, 23:37
Location: Киев

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

Post by gylka »

stm32 wrote:Смотрел в файле 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

Ну и дальше можно еще просмотреть в похожих темах на СО, но этих должно хватить, имхо
User avatar
stm32
Posts: 101
Joined: 13 May 2013, 07:11

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

Post by stm32 »

Спасибо за ссылки, буду смотреть.
Proletariat
Posts: 88
Joined: 03 Feb 2012, 17:41
Location: Москва-Киров

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

Post by Proletariat »

Так, все равно не понятно, из всего что написано понял следующее
1. Данные АЦП служат для высчитывания неких крайних условий, по которым необходимо запарковать всю систему. Нельзя ли свести задачу к обратной, как это предлагалось ранее. Заранее высчитать какие пороговые значения должны быть у АЦП, при выходе за пределы - парковать систему. Не надо вычислять никаких корней, просто преобразовать ваши пороговые значения к константам АЦП и определить пороги срабатывания для всех каналов.
2. Какая должна быть реакция на события? Сколько времени занимает парковка системы? Время реакции, как я понял у вас составляет 170мкс, Его можно смело увеличивать до времени парковки системы. Поскольку быстрее вы все равно не запаркуетесь, а значит необходимости получать раньше на 100 мкс сигнал на парковку не имеет смысла. Время парковки системы подразумевает ввод-вывод токов, замыкание размыкание ключей и оно будет зависеть от конкретной схемы. Непонятно. В реальноссти поток данных в 500кбит/сек для того чтобы вовремя запарковать систему - это очень жирно.
User avatar
piroJ0KE
Posts: 130
Joined: 03 Sep 2013, 19:46
Location: Киёв

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

Post by piroJ0KE »

"Корни" - заготовить табличку готовую, нэ, не годится?
Post Reply