Посматривал код операционки freeRTOS , и обнаружил там __dsb( portSY_FULL_READ_WRITE ); __wfi(); __isb( portSY_FULL_READ_WRITE ); как я понимаю, перед остановкой процессора команда dsb дожидается завершения всех текущих команд в конвеере. что делает isb после выхода из сна понимаю совсем смутно. Не понимаю, почему именно эти две команды, ведь в описании ядра есть и другие подобные команды-барьеры. Очень хотелось бы понять эту премудрость.
И вот ещё: При переключении тактовой частоты с 1MHz на 16MHz и обратно процессор иногда зависает. А если между 1 и 16 МГц включать "промежуточную" 4МГц, то проблемы нет. Может как раз при переключении частоты и нужно применить какую-то барьерную команду ?
Заранее спасибо за ответы !
--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
|