Перейти к содержанию
    

Эффективно и быстро управлять линией порта STM32F407

А оптимизация не задана?

Задавал : и без оптимизации и максимальная. На код не влияет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задавал : и без оптимизации и максимальная. На код не влияет.

Потому и говорю: оптимальный по скорости результат гарантированно можно получить только при помощи ассемблера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плохенький листинг. Четыре инструкции просятся, чтобы их вынесли за цикл. Оптимизация по скорости не была включена, видимо.

На самом деле мне цикл и не нужен , нужно просто устанавливать порт в нужное состояние. Я использую цикл для наглядности,

для проверки сколько времени нужно чтобы порт в нужное состояние установить. Хoтя с оптимизацией надо бы разобраться. У меня Eclipse и GNU Tools ARM Embedded

Тут такой опции нет "Speed optimize" есть "Optimize most"

 

Потому и говорю: оптимальный по скорости результат гарантированно можно получить только при помощи ассемблера.

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

 

Подскажите пожалуйста как правильно оформить ассемблерную вставку, например для этой программы. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Давайте по-другому.

Давайте:

for (;;)
{
    pin_set(PIN_LED_RED);
    pin_clr(PIN_LED_RED);
}

 8000bae:    6123          str    r3, [r4, #16]
8000bb0:    6163          str    r3, [r4, #20]
8000bb2:    e7fc          b.n    8000bae <Reset_Handler+0xbe>

Да, так на четверть быстрее. Но это не интересно...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Потому и говорю: оптимальный по скорости результат гарантированно можно получить только при помощи ассемблера.
По-прежнему не согласен (если убрать слово гарантированно):)

В обычной жизни на asm разве что процедура delay_cycles написана.

Во всех остальных случаях с вероятностью 99% его использование не оправдано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-прежнему не согласен (если убрать слово гарантированно):)

Отож. Я старался формулировать аккуратно :-)

 

В обычной жизни на asm разве что процедура delay_cycles написана.

Во всех остальных случаях с вероятностью 99% его использование не оправдано.

Поддерживаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Итого по предварительной оценке 18МГц при тактовой 72МГц.

Команда B выполнится за 1 + P тактов.

P The number of cycles required for a pipeline refill. This ranges from 1 to 3

depending on the alignment and width of the target instruction, and whether the

processor manages to speculate the address early.

По моим экспериментам, всегда выполнялась за 3 такта. (Так же работает и условный переход, если он есть. Если нет, то чтобы перейти к следующей команде нужен один такт.)

Итого, в лучшем случае, непрерывно дрыгать ножкой можно за 5 тактов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но всегда нужно помнить, что в любой момент может произойти прерывание...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и чё тут меряются строками кода, если нигде не написано про PCLK, и только CCLK упоминается. И кстати, можно даже умудрится биения получить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и чё тут меряются строками кода, если нигде не написано про PCLK, и только CCLK упоминается. И кстати, можно даже умудрится биения получить.

Для справки: в семействе STM32F4xx GPIO сидит на шине AHB и тактируется на частоте процессора. Обращения к регистрам GPIO происходят без задержек (с точностью до возможных, но маловероятных задержек внутри Multilayer Bus Matrix).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...