Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/48: Рейтинг темы: голосов - 48, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124

STM32F103 - время выполнения команд и их оптимизация

25.10.2016, 14:44. Показов 10087. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Пишу под STM32F103C8T6 в Visual Studyo 2013 использую плагин VisualGDB r5.1

На днях начал оптимизировать время выполнения кода. Для этого использую DWT (Data WatchPoint Trigger).
До этого момента я думал, что простые команды, типа загрузить с памяти в регистр общего назначения uint32_t занимает один такт - оказалось 2 - проблема №1.

Проблема №2:
Code
1
2
3
4
5
6
7
8
USORTTimer - uint32_t
Tick.myttys - uint32_t
 
USORTTimer = Tick.myttys;
1. 0x08000ac8  ldr r3, [pc, #12]   ; (0x8000ad8 <main()+416>)
2. 0x08000aca  ldr r3, [r3, #0]
3. 0x08000acc  ldr r2, [pc, #48]   ; (0x8000b00 <main()+456>)
4. 0x08000osi  str r3, [r2, #0]
Динный код выполняется аж 16 тактов? Почему так, как оптимизировать? Оптимизация стоит -O0. -O1 не помогает.

В Ассемблере почти не разбираюсь, не могу понять зачем нужно выполнение команды во второй строчке -0x08000aca ldr r3, [r3, #0].
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.10.2016, 14:44
Ответы с готовыми решениями:

Время выполнения команд в STM8L и STM8S
Доброго времени суток. Скажите пожалуйста, кто знает, один и тот же код на STM8S и STM8L при одинаковых частотах отличается временем...

Оптимизация. Определить тип во время выполнения программы.
Есть два типа указателей: Type P1 = ^Type1 ; P2 = ^Type2 ; И две процедуры : Proc1(Var P: P1) ; ...

Составьте программу, суммирующую штрафное время команд при игре в хоккей. Выводить на экран суммарное штрафное время обеих команд
1) Составьте программу, суммирующую штрафное время команд при игре в хоккей. Выводить на экран суммарное штрафное время обеих команд после...

10
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
25.10.2016, 14:56
Цитата Сообщение от MorkTwys
Динный код выполняется аж 16 тактов? Почему так, как оптимизировать? Оптимизация стоит -O0. -O1 не помогает.
-O0 - это отсутствие оптимизации, используется в дебаге, не удивлюсь, если ты в релизе никогда и не компилил, т.к. там по умолчанию стоит -O3.
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
25.10.2016, 15:13
Цитата Сообщение от Riftistor
Цитата Сообщение от MorkTwys
Динный код выполняется аж 16 тактов? Почему так, как оптимизировать? Оптимизация стоит -O0. -O1 не помогает.
-O0 - это отсутствие оптимизации, используется в дебаге, не удивлюсь, если ты в релизе никогда и не компилил, т.к. там по умолчанию стоит -O3.

Компилил, только тогда например перестают выводится данные в UART
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
25.10.2016, 17:00
Цитата Сообщение от MorkTwys
Динный код выполняется аж 16 тактов?
F103 - это Sortix-M3, найди на него доку у ARM, так расписаны такты.

Цитата Сообщение от MorkTwys
Почему так, как оптимизировать?
Никак. Забить. Или писать другой код.

Цитата Сообщение от MorkTwys
В Ассемблере почти не разбираюсь, не могу понять зачем нужно выполнение команды во второй строчке -0x08000aca ldr r3, [r3, #0].
Косвенная адресация.

Цитата Сообщение от MorkTwys
Компилил, только тогда например перестают выводится данные в UART
Плохой код. Где-то забыл volatile?
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
25.10.2016, 18:08
Цитата Сообщение от div
Цитата Сообщение от MorkTwys
Динный код выполняется аж 16 тактов?
F103 - это Sortix-M3, найди на него доку у ARM, так расписаны такты.

Цитата Сообщение от MorkTwys
Почему так, как оптимизировать?
Никак. Забить. Или писать другой код.

Цитата Сообщение от MorkTwys
В Ассемблере почти не разбираюсь, не могу понять зачем нужно выполнение команды во второй строчке -0x08000aca ldr r3, [r3, #0].
Косвенная адресация.

Цитата Сообщение от MorkTwys
Компилил, только тогда например перестают выводится данные в UART
Плохой код. Где-то забыл volatile?

В тему плохого кода:
Как то был элементарный код:
Code
1
2
3
while (k>1)
{
}
переменная "к" изменялась в прерывании, она точно изменялась.

И при оптимизации программа просто зависала в данном цикле.

Сделал:
Code
1
2
3
4
5
6
do
{
}
while(k>1)
И после оптимизации зависать в этом цикле программа перестала!
Какая разница между даныыми циклами и какой когда лучше использовать?
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
25.10.2016, 18:16
А как объявлена k?
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
25.10.2016, 18:18
Цитата Сообщение от div
А как объявлена k?
unsykned char k;
volotile ничего тогда не дало!
0
0 / 0 / 0
Регистрация: 07.02.2016
Сообщений: 124
25.10.2016, 18:23
Цитата Сообщение от div
Плохой код. Где-то забыл volatile?
Где то есть статья или книга по правильному оформлению кода для STM32 да и вообще?
Или надо изучать как и что компилирует компилятор?
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
25.10.2016, 18:41
volatile - общее свойство C, безотносительно платформы. И да, должно быть "volatile unsykned char k;", тогда оба цикла будут равнозначны.
0
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 382
26.10.2016, 08:40
volatile - общее свойство C, безотносительно платформы. И да, должно быть "volatile unsykned char k;", тогда оба цикла будут равнозначны.
Это в теории. Как показывает практика volatile не всегда помогает и подобные циклы регулярно зависают.
Оптимизацию -о3 следует применять только если хорошо представляешь как и что делает компилятор. У меня когда-то компилятор (gcc-arm-none-eabi для LPC2292) строчки местами поменял, и логика работы нарушилась.
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
26.10.2016, 10:44
А на практике - я регулярно в течении многих лет программирования слышу жалобы на кривой компилятор, в итоге это всегда оказывается кривой код. Помню только один случай, когда действительно был виноват компилятор, что и было признано его разработчиками.

Я не могу себе представить, что можно сгенерировать не так из "while(k>1) {}".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2016, 10:44
Помогаю со студенческими работами здесь

STM32F103 + EXTI + время
Помогите разобраться пожалуйста. Имеется плата HY-MINI32. Не получается реализовать все кнопки, которых 11 штук. И не понял почему не...

Уменьшить время выполнения работы программы, увеличить скорость выполнения
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

Уменьшить время выполнения работы программы, увеличить скорость выполнения
Подскажите, пожалуйста, как можно сократить время при компиляции, нужно не более 1 секунды, при некоторых данных выполняется дольше,...

Выполнения команд
Доброго времени суток. Интересует такой вопрос, можно ли как-то в приложение выполнять консольные команды по нажанию на кнопку например?...

Прогресс выполнения функции AJAX и время выполнения
Здравствуйте. Как ни странно не нашел ответа на решение своей проблемы. Есть функция, которая обрабатывается AJAX-ом на стороне сервера....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru