Про SysTick и про DWT - это все понятно, можно, но не для моей реализации. Нужно решить именно эту задачу. Что такое конвейер тоже в курсе, работал. Добавленный акселерометр должен ускорять, а не тормозить процесс. Пробовал отключать и включать акселерометр, не помогает. Отключение ICash к изменению результата не приводит.
Даже если решить эту проблему другим образом, встретить в программе подряд идущих несколько циклов, не обязательно задержек, очень легко. И представьте, что МК, ни с того ни с сего, будет выполнять один из циклов в 5 раз дольше... Это нормально? Я понял бы если +- 20 - 50 тактов куда то уходило... Но столько...
Варианты задержек просьба не предлагать. Все способы реализаций известны. Нужно именно понять почему один из циклов растягивается в 5 раз? Причем с добавлением циклов растянутый может быть любой из них или даже не один.
Появилась новая интересная штука. Если перед циклом, который задерживается вставить NOP тогда все идет нормально. Иногда нужно вставить не один NOP. Похоже на проблему с выравниваниями. Но не факт. Но вот теперь вопрос, как этого избежать? ICache включаю! В отладке вижу, что включен. Не помогает. Может кто знает в Keil-е макрос, который производит выравнивание NOP-ми во флешке автоматически?
Кратно 32, 64 байта...
Сообщение отредактировал Денис555 - Jan 15 2016, 05:38
|