derun 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба А оптимизация не задана? Задавал : и без оптимизации и максимальная. На код не влияет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Задавал : и без оптимизации и максимальная. На код не влияет. Потому и говорю: оптимальный по скорости результат гарантированно можно получить только при помощи ассемблера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
derun 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Плохенький листинг. Четыре инструкции просятся, чтобы их вынесли за цикл. Оптимизация по скорости не была включена, видимо. На самом деле мне цикл и не нужен , нужно просто устанавливать порт в нужное состояние. Я использую цикл для наглядности, для проверки сколько времени нужно чтобы порт в нужное состояние установить. Хoтя с оптимизацией надо бы разобраться. У меня Eclipse и GNU Tools ARM Embedded Тут такой опции нет "Speed optimize" есть "Optimize most" Потому и говорю: оптимальный по скорости результат гарантированно можно получить только при помощи ассемблера. По видимому дальше можно улучшать только ассемблером. Подскажите пожалуйста как правильно оформить ассемблерную вставку, например для этой программы. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Давайте по-другому. Давайте: 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> Да, так на четверть быстрее. Но это не интересно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Там ещё одна проблема есть: даже если не нужна точная времянка, а нужно просто успеть за какое-то время, нет никакой гарантии, что при изменении версии компилятора или его настроек код будет продолжать успевать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Потому и говорю: оптимальный по скорости результат гарантированно можно получить только при помощи ассемблера. По-прежнему не согласен (если убрать слово гарантированно):) В обычной жизни на asm разве что процедура delay_cycles написана. Во всех остальных случаях с вероятностью 99% его использование не оправдано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба По-прежнему не согласен (если убрать слово гарантированно):) Отож. Я старался формулировать аккуратно :-) В обычной жизни на asm разве что процедура delay_cycles написана. Во всех остальных случаях с вероятностью 99% его использование не оправдано. Поддерживаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Итого по предварительной оценке 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 тактов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба Но всегда нужно помнить, что в любой момент может произойти прерывание... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 5 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба и чё тут меряются строками кода, если нигде не написано про PCLK, и только CCLK упоминается. И кстати, можно даже умудрится биения получить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scifi 1 21 мая, 2014 Опубликовано 21 мая, 2014 · Жалоба и чё тут меряются строками кода, если нигде не написано про PCLK, и только CCLK упоминается. И кстати, можно даже умудрится биения получить. Для справки: в семействе STM32F4xx GPIO сидит на шине AHB и тактируется на частоте процессора. Обращения к регистрам GPIO происходят без задержек (с точностью до возможных, но маловероятных задержек внутри Multilayer Bus Matrix). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться