-
- а процессор случайно не сбрасывается периодически? очень на то похоже, как раз время на инициализацию - AVF(15.01.2016 19:59)
- Instruction cache не включаете в стартапе, похоже? Тогда если цикл попадает на 32-байтную границу, он резко замедлится. мимокрокодил(306 знак., 15.01.2016 00:50, )
- Что то было похожее, не помню на каком STM32F. Пришлось вручную допиливать SetSysClock. - АПМ(15.01.2016 00:45)
- Вставить __ISB(); - Vit(15.01.2016 00:00)
- Это очень интересно... Что вы под этим имели ввиду __ISB(); ? shides(68 знак., 15.01.2016 13:27)
- Например, в случае последовательного неоднократного обращения к GPIO приходится вставлять после каждого обращения к порту. Иначе огребал не просто недетерминированное время переключения(хотя оно меня не сильно волновало), но и вааще невыполнение. Vit(685 знак., 16.01.2016 09:49 - 14:57)
- Точно __ISB(), а не __DSB()? Надо ведь буферы записи на шине данных прочистить/ - vmp(16.01.2016 10:38)
- точно. насчет __DSB() - ещё ни разу не применил, хотя разок предполагал необходимость - Vit(16.01.2016 14:54)
- Точно __ISB(), а не __DSB()? Надо ведь буферы записи на шине данных прочистить/ - vmp(16.01.2016 10:38)
- Например, в случае последовательного неоднократного обращения к GPIO приходится вставлять после каждого обращения к порту. Иначе огребал не просто недетерминированное время переключения(хотя оно меня не сильно волновало), но и вааще невыполнение. Vit(685 знак., 16.01.2016 09:49 - 14:57)
- Это очень интересно... Что вы под этим имели ввиду __ISB(); ? shides(68 знак., 15.01.2016 13:27)
- хе, чот мне кажется, что это всё потому, что порт не напрямую к ядру подключён, а через шину, а шина - через мост. а на мосту - 11 мастеров и 8 слейвов. и какая-то херота на шине получает свой тайм-слот управления. а ещё может быть, что записи по Mahagam(268 знак., 14.01.2016 23:49 - 23:51)
- Попробуйте тот же код разместить в ОЗУ, для исключения влияния контроллера флеша. А потом поиграться включением/выключением кешей. Лень искать - там предсказание переходов отключить можно? - vmp(14.01.2016 20:57)
- Если это из флеша выполняется - там же хитрая схема предвыборки и кеширования. Может зависеть от выравнивания инструкции по границе 256 бит и чего-нибудь ещё. - SciFi(14.01.2016 19:26)
- Импульс длительностью в 5 мкс превращается в 25 мкс. Если бы была задержка или ускорение на 50 - 100 тактов, а то элементарный пустой цикл в итоге задерживается в совокупности на 20 мкс (4000 тактов) как то много... shides(120 знак., 14.01.2016 19:47)
- А нельзя ли взглянуть на исходный код? - SciFi(14.01.2016 20:16)
- Ну, если это сишный код, компилятор может по-разному код сгенерить. Но на 4000 тактов? Загадка природы. Но я всё равно попробовал бы то же самое на ассемблере. - SciFi(14.01.2016 19:53)
- Открывал ассемблерный листинг там придраться не к чему. Ассемблерные вставки компилятор оставляет как есть, меняет только РОН. В отладке тоже пробегает все ровно. shides(146 знак., 14.01.2016 19:56 - 20:02)
- В инициализации действительно всё лишнее принудительно выключаете? - Antimouse(14.01.2016 20:58)
- Совсем спотолочная версия: а там настройка PLL перед этим не происходит? Если да, то не дать ли ему устаканиться? - SciFi(14.01.2016 20:03)
- Настройка тактирования проходит как положено, со всеми ожиданиями. Осциллографом начинаю смотреть на импульсы спустя уже большое (более 1 секунды) время. Даже если сразу не устаканилась, то спустя несколько секунд уже должна бы. - shides(14.01.2016 20:06)
- Подождать полсекунды. На некоторых МК, невзирая на флаг, сигнализирующий о выходе PLL на режим, наблюдал чудеса. Ожидание помогло. Подаю питание- жду- инициализирую PLL- жду- работает. - KLIM83(14.01.2016 20:14 - 20:20)
- Мы, этА, не гордые, ну спилили топик, так спилили :(. Повторим вопрос, тип МК можно озвучить Сказали "А", говорте "Б". P.S, Если чего, так просто интересно, ничего личного. Можно же было как-то по-людски, ну не нравится вопрос, ответить уклончиво, Chum_A(70 знак., 15.01.2016 19:54 - 20:00)
- Не понял о чем вы...? Но на всякий случай повторюсь: shides(908 знак., 15.01.2016 20:20)
- Если по делу, то не приходится ли 5-Й импульс на возврат в начало цикла? Лирика: "Давно баловался с короткой задержкой на Cortex-M3 имеющим ускоритель Flash. Гнилое дело, стабильность не предсказуемая, что удивительно, при запуске кода из ОЗУ Chum_A(106 знак., 15.01.2016 20:33)
- Поясняю, уважаемый KLIM сообщил, что на некоторых МК флаг готовности PLL опережает собственно готовность такового. Я имел неосторожность (и не только из любопытства) поинтересоваться, на каких собственно МК. Упомянутый KLIM, имея звезду Chum_A(96 знак., 15.01.2016 20:25)
- Личные сообщения- читаем? А именно туда и ответил. - _KLIM83(16.01.2016 10:44, )
- Не понял о чем вы...? Но на всякий случай повторюсь: shides(908 знак., 15.01.2016 20:20)
- Попробую. Хотя если бы с тактами была проблема, то на протяжении работы всего кода, а то в одном месте есть задержка в пустом цикле в следующем может уже не быть. shides(113 знак., 14.01.2016 20:30 - 15.01.2016 08:35)
- Дизассемблер - в студию! И чтобы умещалось на одной странице, иначе сомневаюсь, что кто-то там будет копаться. - SciFi(15.01.2016 09:03)
- Вечером выложу. shides(457 знак., 15.01.2016 09:52)
- Да-да, выложите. И осциллограмму тоже. - SciFi(15.01.2016 10:21)
- Осциллограмка №2: Перед проблемным циклом вставлено NOP - 2 раза shides(16.01.2016 08:09)
- Осциллограмка №1 на 10 выходных импульсов: shides(16.01.2016 08:07)
- Осциллограммы обязательно выложу с утра. Флешку в осциллографе, на работе забыл) - shides(15.01.2016 19:10)
- Это main из которого вызывается та подпрограмма: shides(894 знак., 15.01.2016 19:08)
- А сишный код есть? - SciFi(15.01.2016 19:23)
- С код написан в Keil-е с использованием HAL. shides(7000 знак., 15.01.2016 19:47 - 19:51)
- А сишный код есть? - SciFi(15.01.2016 19:23)
- Это подпрограмма, собственно которая и выдает 6 импульсов: shides(1944 знак., 15.01.2016 19:04)
- 2 вопроса: 1) в каком месте там тормоз возникает? 2) зачем там "CPSID i"? - SciFi(15.01.2016 19:14)
- Всем спасибо! Проблема решилась. Все импульсы стали ровные как только перевел выполнение программы с шины AXIM на шину ITCM. Разумеется с включеным ART-акселератором. - shides(16.01.2016 19:56)
- 1. Тормозит насколько помню в третьем цикле. Но если перед этими циклами вставить еще кода (любого), то может затормозить в любом другом или даже в нескольких. shides(399 знак., 15.01.2016 19:29 - 16.01.2016 19:56)
- 2 вопроса: 1) в каком месте там тормоз возникает? 2) зачем там "CPSID i"? - SciFi(15.01.2016 19:14)
- Да-да, выложите. И осциллограмму тоже. - SciFi(15.01.2016 10:21)
- Вечером выложу. shides(457 знак., 15.01.2016 09:52)
- Дизассемблер - в студию! И чтобы умещалось на одной странице, иначе сомневаюсь, что кто-то там будет копаться. - SciFi(15.01.2016 09:03)
- Мы, этА, не гордые, ну спилили топик, так спилили :(. Повторим вопрос, тип МК можно озвучить Сказали "А", говорте "Б". P.S, Если чего, так просто интересно, ничего личного. Можно же было как-то по-людски, ну не нравится вопрос, ответить уклончиво, Chum_A(70 знак., 15.01.2016 19:54 - 20:00)
- Подождать полсекунды. На некоторых МК, невзирая на флаг, сигнализирующий о выходе PLL на режим, наблюдал чудеса. Ожидание помогло. Подаю питание- жду- инициализирую PLL- жду- работает. - KLIM83(14.01.2016 20:14 - 20:20)
- Настройка тактирования проходит как положено, со всеми ожиданиями. Осциллографом начинаю смотреть на импульсы спустя уже большое (более 1 секунды) время. Даже если сразу не устаканилась, то спустя несколько секунд уже должна бы. - shides(14.01.2016 20:06)
- Открывал ассемблерный листинг там придраться не к чему. Ассемблерные вставки компилятор оставляет как есть, меняет только РОН. В отладке тоже пробегает все ровно. shides(146 знак., 14.01.2016 19:56 - 20:02)
- Импульс длительностью в 5 мкс превращается в 25 мкс. Если бы была задержка или ускорение на 50 - 100 тактов, а то элементарный пустой цикл в итоге задерживается в совокупности на 20 мкс (4000 тактов) как то много... shides(120 знак., 14.01.2016 19:47)