реклама на сайте
подробности

 
 
> STM32H7+DCMI+DMA+обработка
Eros
сообщение Sep 18 2018, 09:14
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 10-04-17
Пользователь №: 96 446



Всем привет! Кто-нибудь использует в своих проектах STM32H7? Очень интересная диковинка, с которой достаточно не просто разобраться...
Суть вопроса в чем: пытаемся реализовать проект на борде пока что, снимается сигнал с аналоговой линейки, который подается на внешний
АЦП и от этого АЦП идет параллельный интерфейс к DCMI (14 бит). Далее DCMI укладывает по DMA в (u16). Далее, начинается самое интересное...
Чтобы обработать сигнал необходимо найти максимум в массиве.. Массив представляет из себя u16 и 512 кол-во элементов.. Этот цикл занимает по времени около 120 мкс?
Мне кажется это не адекватно, это примерно уровень f4. CPU настроен на 400 МГЦ.
Какие могут быть идеи? Может есть какие-то особенности для H7? Кэш используется
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Sep 18 2018, 11:42
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Eros @ Sep 18 2018, 12:14) *
Этот цикл занимает по времени около 120 мкс?
Мне кажется это не адекватно, это примерно уровень f4. CPU настроен на 400 МГЦ.

На F4@168MHz такой цикл занимает 42мкс. Оптимизацию не забыли включить? И в какой памяти источник данных расположен?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 18 2018, 11:52
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(aaarrr @ Sep 18 2018, 14:42) *
На F4@168MHz такой цикл занимает 42мкс. Оптимизацию не забыли включить? И в какой памяти источник данных расположен?

Вангую, что автор не только оптимизацию забыл включить, но прерывания забыл запретить при "измерении" biggrin.gif
И 168*42/512 = 13.78125 тактов на один элемент - всё равно как-то многовато.....

Цитата(Eros @ Sep 18 2018, 13:44) *
Если есть на чем потестить, просто создайте массив, забейте константными значениями и найдите максимум, интересно за сколько справиться H7

.....и в зависимости от этих значений и результата компиляции цикла, получатся совершенно разные результаты - средняя температура по больнице.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Sep 18 2018, 13:04
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(jcxz @ Sep 18 2018, 14:52) *
.....и в зависимости от этих значений и результата компиляции цикла, получатся совершенно разные результаты - средняя температура по больнице.

Это как от значений?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 18 2018, 13:26
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Tanya @ Sep 18 2018, 16:04) *
Это как от значений?

Так как неизвестно во что скомпилится этот сишный исходник, то возможно там будут команды условного перехода при сравнениях. И тогда: идём по одной ветке после сравнения - одно число тактов, по другой - другое.

Такие простые вещи оптимизировать можно только на ассемблере. Вот например так (вроде этого хочет ТС):
CODE
PUBLIC FindMaxU16
;extern "C" uint FindMaxU16(u32 *);
THUMB
FindMaxU16: PUSH {R4-R9, LR}
MOVS R2, #512 / 16 - 1
MOVS R1, #0
p111: SUBS R2, #1
LDMIA R0!, {R3-R9, R12}
USUB16 LR, R1, R3
SEL R1, R1, R3
USUB16 LR, R1, R4
SEL R1, R1, R4
USUB16 LR, R1, R5
SEL R1, R1, R5
USUB16 LR, R1, R6
SEL R1, R1, R6
USUB16 LR, R1, R7
SEL R1, R1, R7
USUB16 LR, R1, R8
SEL R1, R1, R8
USUB16 LR, R1, R9
SEL R1, R1, R9
USUB16 LR, R1, R12
SEL R1, R1, R12
BPL p111
CMP R1, R1, LSL #16
IT CC
LSLCC R1, R1, #16
LSRS R0, R1, #16
POP {R4-R9, PC}

Указатель (аргумент FindMaxU16()) должен быть выровнен на границу 32 бит. И данные должны быть в диапазоне: 0...32767 (ТС вроде говорил про 14-битные данные - тогда должно подойти).
Этот код выполняется за ~963 такта. Нетрудно пересчитать в мкс если надо. На CPU ТС-а должно быть ~2.5 мкс. И время выполнения от данных тут не зависит.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Sep 18 2018, 13:59
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(jcxz @ Sep 18 2018, 16:26) *
Так как неизвестно во что скомпилится этот сишный исходник, то возможно там будут команды условного перехода при сравнениях. И тогда: идём по одной ветке после сравнения - одно число тактов, по другой - другое.

Так ведь исходник будет независимо от чисел, которые должны быть перемолоты, оттранслирован при прочих равных условиях. Или нет?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 18 2018, 14:10
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Tanya @ Sep 18 2018, 16:59) *
Так ведь исходник будет независимо от чисел, которые должны быть перемолоты, оттранслирован при прочих равных условиях. Или нет?

Исходник независимо - ну и что? Выполняться он будет за разное число тактов, в зависимости от данных. Я говорил о том, что тест проведённый ТС-ом для его исходника - некорректен, так как выполнение его исходника будет зависеть от данных. А значит нужно указывать - на каком наборе данных тестировать, или тестировать для самого худшего случая.

PS: Код, который я привёл - он для CM4. Возможно на CM7 появились ещё какие-то новые команды, с помощью которых можно ещё оптимизировать. Не знаю. Всё в руках ТС-а. cool.gif
Go to the top of the page
 
+Quote Post
Eros
сообщение Sep 19 2018, 05:38
Сообщение #8





Группа: Участник
Сообщений: 7
Регистрация: 10-04-17
Пользователь №: 96 446



Цитата(jcxz @ Sep 18 2018, 17:10) *
Исходник независимо - ну и что? Выполняться он будет за разное число тактов, в зависимости от данных. Я говорил о том, что тест проведённый ТС-ом для его исходника - некорректен, так как выполнение его исходника будет зависеть от данных. А значит нужно указывать - на каком наборе данных тестировать, или тестировать для самого худшего случая.

PS: Код, который я привёл - он для CM4. Возможно на CM7 появились ещё какие-то новые команды, с помощью которых можно ещё оптимизировать. Не знаю. Всё в руках ТС-а. cool.gif

Я указывал, что изначально массив заполняется по возрастанию, т.е. это и будет по сути самый худший случай. Еще что у меня получилось: собрал с максимальной оптимизации (мой косяк, не заметил) получилось 65 мкс, и потом попробовал запретить прерывания получилось 50 мкс. Спасибо за совет, сейчас попробую ради интереса на ассемблере и использовать TCM RAM.

Сообщение отредактировал Eros - Sep 19 2018, 05:44
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 19 2018, 05:52
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Eros @ Sep 19 2018, 08:38) *
Спасибо за совет, сейчас попробую ради интереса на ассемблере и использовать TCM RAM.

А за сколько у Вас мой ассемблерный вариант выполняется?
PS: Мерить время лучше в отладчике по отладочному таймеру (в ядре).
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Eros   STM32H7+DCMI+DMA+обработка   Sep 18 2018, 09:14
- - Forger   На первой странице даташита есть такая фраза: 192 ...   Sep 18 2018, 10:14
|- - Eros   Цитата(Forger @ Sep 18 2018, 13:14) На пе...   Sep 18 2018, 10:16
|- - Forger   А какой компилятор используется?   Sep 18 2018, 10:31
|- - Eros   Цитата(Forger @ Sep 18 2018, 13:31) А как...   Sep 18 2018, 10:33
|- - Forger   Цитата(Eros @ Sep 18 2018, 13:33) Пользую...   Sep 18 2018, 10:34
|- - Eros   Цитата(Forger @ Sep 18 2018, 13:34) Да я ...   Sep 18 2018, 10:44
|- - Forger   Цитата(Eros @ Sep 18 2018, 13:44) Ну кеил...   Sep 18 2018, 10:50
|- - Eros   Цитата(Forger @ Sep 18 2018, 13:50) В 5й ...   Sep 18 2018, 10:58
|- - jcxz   Цитата(Eros @ Sep 18 2018, 13:58) Линейны...   Sep 18 2018, 11:15
|- - Forger   Цитата(Tanya @ Sep 18 2018, 16:59) Или не...   Sep 18 2018, 14:08
|- - Eros   Цитата(jcxz @ Sep 19 2018, 08:52) А за ск...   Sep 19 2018, 05:55
- - Obam   У вас в "LDMIA R0, {R3-R9, R12}" одни и ...   Sep 18 2018, 19:38
|- - jcxz   Цитата(Obam @ Sep 18 2018, 22:38) У вас в...   Sep 18 2018, 19:58
- - klen   здравсвуйте! а частота семплирования ацп какая...   Sep 19 2018, 13:49


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 13:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016