Распределение ресурсов МК
Распределение ресурсов МК
Добрый день!
Хотелось бы спросить у знатоков.
Есть много данных которые необходимо считать контроллеру stm32f10x.
Все данные я считаю в прерывании, за одно прерывание МК не успевает всё просчитать(нужно целых 10), как мне поступать?
Числа с плавающей запятой не использую, правда есть кубический корень, который считается много раз, и умножение в общем много всего.
Хотелось бы спросить у знатоков.
Есть много данных которые необходимо считать контроллеру stm32f10x.
Все данные я считаю в прерывании, за одно прерывание МК не успевает всё просчитать(нужно целых 10), как мне поступать?
Числа с плавающей запятой не использую, правда есть кубический корень, который считается много раз, и умножение в общем много всего.
Re: Распределение ресурсов МК
В прерывании ставить флаг, обрабатывать всё в main-е?
Re: Распределение ресурсов МК
Если не нужен сильный рилтайм, можно данные скидывать в буфер, возводить флаг, а мэйн забирает данные и считает что нужно. Так, к примеру, работает звук в большинстве компьютерных ОС.
Re: Распределение ресурсов МК
Да интересная идея, но данные необходимо считать как можно быстрее, желательно влезть в одно прерывание, если не получится то тогда в 2 или 3. Какие могут быть ещё варианты?
Пока время расчёта занимает 10 прерываний 250us, что очень плохо(
Конечно можно взять проц помощнее, но хотелось бы как то оптимизировать, только не знаю как.
Пока время расчёта занимает 10 прерываний 250us, что очень плохо(
Конечно можно взять проц помощнее, но хотелось бы как то оптимизировать, только не знаю как.
Last edited by stm32 on 04 Feb 2014, 19:10, edited 1 time in total.
Re: Распределение ресурсов МК
Отдать расчет внешнему устройству, к примеру.Какие могут быть ещё варианты?
Re: Распределение ресурсов МК
Это компу отдать данные считать?
Я думал меня здесь пошлют к ПЛИСам))
Где то на в инете видел, что ПЛИС если идёт речь о расчётах вне конкуренции по сравнению с МК) Могу ошибаться т.к. с ПЛИС не знаком вообще(
Я думал меня здесь пошлют к ПЛИСам))
Где то на в инете видел, что ПЛИС если идёт речь о расчётах вне конкуренции по сравнению с МК) Могу ошибаться т.к. с ПЛИС не знаком вообще(
Re: Распределение ресурсов МК
Можно компу, можно другому МК, можно ПЛИСине. Если важно получить жесткий рилтайм, все методы хороши.
Re: Распределение ресурсов МК
Устройство автономное должно быть, комп сразу отпадает. Другому МК как вариант конечно и плис тоже) Также важна цена)
Попробую конечно пока оптимизировать код, посмотрим что получится.
Всем спасибо за ответы!
Попробую конечно пока оптимизировать код, посмотрим что получится.
Всем спасибо за ответы!
Re: Распределение ресурсов МК
Остаётся только оптимизация математики - максимально упростить вычисления.
Перейти на более производительный мк, не менее логично как оптимизация математики.
Ну и от безысходности второй мк / плис. (Суперскалярная архитектура, привет!)
Перейти на более производительный мк, не менее логично как оптимизация математики.
Ну и от безысходности второй мк / плис. (Суперскалярная архитектура, привет!)
Re: Распределение ресурсов МК
Если не секрет и можете озвучить задачу - вариантов может стать больше 
Re: Распределение ресурсов МК
Озвучить задачу к сожалению не могу.
Ещё наверняка кто то пользуется в МК при умножении и делении на 2^n битовыми сдвигами.
Когда то встречал такой способ только применительно к дробям.
Как мне данные с АЦП пересчитывать в напряжени, допустим измеряется напряжение МК на нижнем плече делителя, далее я захожу в прерывание и привожу его к нормальному умножая Данные_АЦП_12бит * K / 4095. Где K дробный коэффициент. Понятия не имею как считать здесь по другому, но я бы сделал так:
1. Можно конечно сделать таблицу где будет 4095 элементов и вообще ничего не считать, зараннее всё просчитав в экселе.
2. Можно как то битовыми сдвигами намутить дробный коэффициент К.
Только вот вариант 2 я не знаю как сделать, точнее не помню.
Есть пару мест в коде где извлекается квадратный и кубический корень.
Для быстрого извлечения квадратного корня наверное есть какие то ускоренные мат. ф-ии нашёл темку для квадратного корня ST Forum
Ещё наверняка кто то пользуется в МК при умножении и делении на 2^n битовыми сдвигами.
Когда то встречал такой способ только применительно к дробям.
Как мне данные с АЦП пересчитывать в напряжени, допустим измеряется напряжение МК на нижнем плече делителя, далее я захожу в прерывание и привожу его к нормальному умножая Данные_АЦП_12бит * K / 4095. Где K дробный коэффициент. Понятия не имею как считать здесь по другому, но я бы сделал так:
1. Можно конечно сделать таблицу где будет 4095 элементов и вообще ничего не считать, зараннее всё просчитав в экселе.
2. Можно как то битовыми сдвигами намутить дробный коэффициент К.
Только вот вариант 2 я не знаю как сделать, точнее не помню.
Есть пару мест в коде где извлекается квадратный и кубический корень.
Для быстрого извлечения квадратного корня наверное есть какие то ускоренные мат. ф-ии нашёл темку для квадратного корня ST Forum
-
Proletariat
- Posts: 88
- Joined: 03 Feb 2012, 17:41
- Location: Москва-Киров
Re: Распределение ресурсов МК
Задачу озвучить все равно надо. Не раскрывай всех подробностей. Но что важно: сколько датчиков, какой samplerate нужен, т.е. как много данных в секунду с одного датчика. Если ты это выводишь на экран человеку, то больше 5-10 раз в секунду вообще не нужно, в этом смысле, в прерываниях нужно выставиь флаги, а работать с датчиками в Mainloop. Если нужны все данные, например дляизмерения спектра, то данные нужно собирать сырые, не обрабатывая их, копить и потом уже скопом обрабатывать используя оптимальные алгоритмы. Пока сложно гадать и ответ правильный и оптимальный тяжело найти. Потому как не зная задачу трудно предложить альтернативу используемым методам. Вопрос - нафига нужны данные в объеме 12bit*4kHz (я так понимаю, что это твоя реальная скорость сейчас)?
Re: Распределение ресурсов МК
12bit * 40kHz
Ацп в стм32 быстрый успевает за 1/4 периода обмерить что нужно если не меньше, всё это нужно для быстродействия системы, если что то пойдёт не так чтобы можно было вовремя всё запретить и все ключи закрыть.
Данные никому не выводятся и не планируется.
Просто АЦП считывает напряжение и по определённым формулам рассчитывает скважности, формулы правда огроменные.
Ацп в стм32 быстрый успевает за 1/4 периода обмерить что нужно если не меньше, всё это нужно для быстродействия системы, если что то пойдёт не так чтобы можно было вовремя всё запретить и все ключи закрыть.
Данные никому не выводятся и не планируется.
Просто АЦП считывает напряжение и по определённым формулам рассчитывает скважности, формулы правда огроменные.
Last edited by stm32 on 06 Feb 2014, 13:25, edited 2 times in total.
Re: Распределение ресурсов МК
А нельзя от обратного пойти? Постчитать порог безопасного уровня и просто сравнивать?
Re: Распределение ресурсов МК
Можно. Я правильно понимаю вы про то чтобы не считать Данные_АЦП_12бит * K / 4095, а привести порог к АЦП. Можно да, но дальше значение Данные_АЦП_12бит * K / 4095 используется при расчётах, и есть места где оказывается под кубическим корнем в квадрате.
Re: Распределение ресурсов МК
Ну а К что такое? Оноже не каждый раз новое, только при его изменении пересчитывать K/4096. Уже меньше времени занято.
Re: Распределение ресурсов МК
В К уже учтено 1/4096.
Re: Распределение ресурсов МК
Удалось сократить до 175us.
Однако не избавился от корней что очен плохо.
Смотрел в файле math.h там ф-ии извлечения корней только для флоат и дабл типов и имеют существенное отличие по времени друг от друга, а я везде использую целочисленные значения. Может кто то испльзовал альтернативные ф-ии чтобы извлекать строго инты, наверняка они будут раза в 2 быстрей, если не в 3.
Однако не избавился от корней что очен плохо.
Смотрел в файле math.h там ф-ии извлечения корней только для флоат и дабл типов и имеют существенное отличие по времени друг от друга, а я везде использую целочисленные значения. Может кто то испльзовал альтернативные ф-ии чтобы извлекать строго инты, наверняка они будут раза в 2 быстрей, если не в 3.
Re: Распределение ресурсов МК
Стоит углубиться в математику, и, в особенности, в CORDIC
Re: Распределение ресурсов МК
То есть чтобы даже в вычислениях были только целые?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
Ну и дальше можно еще просмотреть в похожих темах на СО, но этих должно хватить, имхо
Re: Распределение ресурсов МК
Спасибо за ссылки, буду смотреть.
-
Proletariat
- Posts: 88
- Joined: 03 Feb 2012, 17:41
- Location: Москва-Киров
Re: Распределение ресурсов МК
Так, все равно не понятно, из всего что написано понял следующее
1. Данные АЦП служат для высчитывания неких крайних условий, по которым необходимо запарковать всю систему. Нельзя ли свести задачу к обратной, как это предлагалось ранее. Заранее высчитать какие пороговые значения должны быть у АЦП, при выходе за пределы - парковать систему. Не надо вычислять никаких корней, просто преобразовать ваши пороговые значения к константам АЦП и определить пороги срабатывания для всех каналов.
2. Какая должна быть реакция на события? Сколько времени занимает парковка системы? Время реакции, как я понял у вас составляет 170мкс, Его можно смело увеличивать до времени парковки системы. Поскольку быстрее вы все равно не запаркуетесь, а значит необходимости получать раньше на 100 мкс сигнал на парковку не имеет смысла. Время парковки системы подразумевает ввод-вывод токов, замыкание размыкание ключей и оно будет зависеть от конкретной схемы. Непонятно. В реальноссти поток данных в 500кбит/сек для того чтобы вовремя запарковать систему - это очень жирно.
1. Данные АЦП служат для высчитывания неких крайних условий, по которым необходимо запарковать всю систему. Нельзя ли свести задачу к обратной, как это предлагалось ранее. Заранее высчитать какие пороговые значения должны быть у АЦП, при выходе за пределы - парковать систему. Не надо вычислять никаких корней, просто преобразовать ваши пороговые значения к константам АЦП и определить пороги срабатывания для всех каналов.
2. Какая должна быть реакция на события? Сколько времени занимает парковка системы? Время реакции, как я понял у вас составляет 170мкс, Его можно смело увеличивать до времени парковки системы. Поскольку быстрее вы все равно не запаркуетесь, а значит необходимости получать раньше на 100 мкс сигнал на парковку не имеет смысла. Время парковки системы подразумевает ввод-вывод токов, замыкание размыкание ключей и оно будет зависеть от конкретной схемы. Непонятно. В реальноссти поток данных в 500кбит/сек для того чтобы вовремя запарковать систему - это очень жирно.
Re: Распределение ресурсов МК
"Корни" - заготовить табличку готовую, нэ, не годится?