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

 
 
> Эффективно и быстро управлять линией порта STM32F407
derun
сообщение May 21 2014, 03:11
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 12-01-05
Из: Украина. Чернигов
Пользователь №: 1 908



Мне необходимо быстро менять состояние линии порта (програмно, без таймеров и прочего аппаратного). Пишу кусочек кода для проверки скорости функций управления линией порта portC.13.
Код
while (1)
{

HAL_GPIO_TogglePin(GPIOC, 1 << 13);

}

Получаю меандр с частотой порядка 2.4MHz.
Это очень медленно. Посмотрел как работает функция и переписал код так:
Код
  while (1)
{

      GPIOC->ODR ^= 1 << 13;
}

Получил меандр 8.4 MHz
Уже лучше, но все равно очень медленно. Учитывая что ядро летает на скорости 168 MHz.
Подскажите пожалуйста как сделать управление эффестивнее и быстрее.

Сообщение отредактировал IgorKossak - May 21 2014, 14:49
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение May 21 2014, 03:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Если хочется максимально быстро и именно процессором, то без ассемблера не получится.

Цитата(Golikov A. @ May 21 2014, 12:04) *
скорость ножки задали? Надо задать максимальную частоту переключения ноги, а то будет наружу будет лезть не пойми че!

Неправда. Максимум завалятся фронты, если у осциллографа ёмкость щупа неприлично большая. Частота не изменится.
Go to the top of the page
 
+Quote Post
derun
сообщение May 21 2014, 04:26
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 12-01-05
Из: Украина. Чернигов
Пользователь №: 1 908



Нужно просто быстро. Порт сконфигурирован на 100 MHz.
Попробовал предложенный способ:
Код
  while (1)
{
        GPIOC->BSRRH = (1 << 13);
      GPIOC->BSRRL = (1 << 13);
}

Этот вариант работает быстрее получил частоту 14 MHz
Думаю этого будет вполне достаточно.
Посмотрел код дизассемблером, выглядит прилично думаю врядли смогу его сильно оптимизировать.
Спасибо всем за советы и adnega за его вариант решения.

Сообщение отредактировал IgorKossak - May 21 2014, 14:51
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 21 2014, 04:44
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(derun @ May 21 2014, 11:36) *
Этот вариант работает быстрее получил частоту 14 MHz
Думаю этого будет вполне достаточно.
Посмотрел код дизассемблером, выглядит прилично думаю врядли смогу его сильно оптимизировать.

12 тактов на весь цикл? Многовато. А листинг покажите.
Go to the top of the page
 
+Quote Post
derun
сообщение May 21 2014, 05:00
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 12-01-05
Из: Украина. Чернигов
Пользователь №: 1 908



Цитата(ViKo @ May 21 2014, 10:54) *
12 тактов на весь цикл? Многовато. А листинг покажите.

GPIOC->BSRRL = (1 << 13);
080002d8: ldr r3, [pc, #16] ; (0x80002ec <main+116>)
080002da: mov.w r2, #8192 ; 0x2000
080002de: strh r2, [r3, #24]
117 GPIOC->BSRRH = (1 << 13);
080002e0: ldr r3, [pc, #8] ; (0x80002ec <main+116>)
080002e2: mov.w r2, #8192 ; 0x2000
080002e6: strh r2, [r3, #26]
120 }
080002e8: b.n 0x80002d8 <main+96>

Как-то так
Go to the top of the page
 
+Quote Post
scifi
сообщение May 21 2014, 05:16
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(derun @ May 21 2014, 13:10) *
Как-то так

Плохенький листинг. Четыре инструкции просятся, чтобы их вынесли за цикл. Оптимизация по скорости не была включена, видимо.
Go to the top of the page
 
+Quote Post
derun
сообщение May 21 2014, 05:37
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 133
Регистрация: 12-01-05
Из: Украина. Чернигов
Пользователь №: 1 908



Цитата(scifi @ May 21 2014, 11:26) *
Плохенький листинг. Четыре инструкции просятся, чтобы их вынесли за цикл. Оптимизация по скорости не была включена, видимо.

На самом деле мне цикл и не нужен , нужно просто устанавливать порт в нужное состояние. Я использую цикл для наглядности,
для проверки сколько времени нужно чтобы порт в нужное состояние установить. Хoтя с оптимизацией надо бы разобраться. У меня Eclipse и GNU Tools ARM Embedded
Тут такой опции нет "Speed optimize" есть "Optimize most"

Цитата(scifi @ May 21 2014, 11:34) *
Потому и говорю: оптимальный по скорости результат гарантированно можно получить только при помощи ассемблера.

По видимому дальше можно улучшать только ассемблером.

Подскажите пожалуйста как правильно оформить ассемблерную вставку, например для этой программы. Спасибо.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- derun   Эффективно и быстро управлять линией порта STM32F407   May 21 2014, 03:11
- - adnega   Цитата(derun @ May 21 2014, 11:21) Мне не...   May 21 2014, 03:24
|- - ViKo   Цитата(adnega @ May 21 2014, 10:34) Кодwh...   May 21 2014, 04:06
- - Golikov A.   скорость ножки задали? Надо задать максимальную ча...   May 21 2014, 03:54
|- - demiurg_spb   Цитата(scifi @ May 21 2014, 12:06) Если х...   May 21 2014, 04:08
||- - adnega   Цитата(demiurg_spb @ May 21 2014, 12:18) ...   May 21 2014, 04:27
||- - demiurg_spb   Цитата(adnega @ May 21 2014, 12:37) Bitba...   May 21 2014, 04:52
||- - ViKo   Цитата(demiurg_spb @ May 21 2014, 12:02) ...   May 21 2014, 04:57
||- - demiurg_spb   Цитата(ViKo @ May 21 2014, 13:07) Потому ...   May 21 2014, 05:08
||- - ViKo   Цитата(demiurg_spb @ May 21 2014, 12:18) ...   May 21 2014, 05:14
|||- - derun   Цитата(ViKo @ May 21 2014, 11:24) А оптим...   May 21 2014, 05:20
||||- - scifi   Цитата(derun @ May 21 2014, 13:30) Задава...   May 21 2014, 05:24
||||- - demiurg_spb   Цитата(scifi @ May 21 2014, 13:34) Потому...   May 21 2014, 05:39
||||- - scifi   Цитата(demiurg_spb @ May 21 2014, 13:49) ...   May 21 2014, 05:48
|||- - demiurg_spb   Цитата(ViKo @ May 21 2014, 13:24) Давайте...   May 21 2014, 05:38
||- - ViKo   Цитата(demiurg_spb @ May 21 2014, 12:18) ...   May 21 2014, 05:57
- - scifi   Там ещё одна проблема есть: даже если не нужна точ...   May 21 2014, 05:39
- - adnega   Но всегда нужно помнить, что в любой момент может ...   May 21 2014, 08:10
- - megajohn   и чё тут меряются строками кода, если нигде не нап...   May 21 2014, 08:13
- - scifi   Цитата(megajohn @ May 21 2014, 16:23) и ч...   May 21 2014, 08:27


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:19
Рейтинг@Mail.ru


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