реклама на сайте
подробности

 
 
> STM32L151 инструкции dsb isb и т.п., Хочу понять, зачем нужны.
MiklPolikov
сообщение May 4 2014, 04:50
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Посматривал код операционки freeRTOS , и обнаружил там
__dsb( portSY_FULL_READ_WRITE );
__wfi();
__isb( portSY_FULL_READ_WRITE );
как я понимаю, перед остановкой процессора команда dsb дожидается завершения всех текущих команд в конвеере.
что делает isb после выхода из сна понимаю совсем смутно.
Не понимаю, почему именно эти две команды, ведь в описании ядра есть и другие подобные команды-барьеры.
Очень хотелось бы понять эту премудрость.

И вот ещё:
При переключении тактовой частоты с 1MHz на 16MHz и обратно процессор иногда зависает. А если между 1 и 16 МГц включать "промежуточную" 4МГц, то проблемы нет.
Может как раз при переключении частоты и нужно применить какую-то барьерную команду ?

Заранее спасибо за ответы !


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 20)
demiurg_spb
сообщение Feb 25 2015, 10:08
Сообщение #16


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MiklPolikov @ Feb 24 2015, 23:01) *
Хочу понять, в каких случаях они нужны.
В контексте STM32 использовал их лишь перед выходом из прерывания сразу после очистки его флага-запроса, чтобы при выходе снова не влететь в уже отработанное прерывание. Так на память больше ничего не приходит.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Feb 25 2015, 10:25
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(demiurg_spb @ Feb 25 2015, 13:08) *
В контексте STM32 использовал их лишь перед выходом из прерывания сразу после очистки его флага-запроса, чтобы при выходе снова не влететь в уже отработанное прерывание. Так на память больше ничего не приходит.

Полезный совет ! К примеру, у меня многочисленные прерывания от дребезга кнопок всегда глючно обрабатываются, приходится RC ячейку ставить. Причём глючность очень походила на ту ситуацию, которую Вы описали. Использовали ISB ?


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 25 2015, 10:34
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Feb 25 2015, 08:45) *
Для создания такого кода, достаточно указать функции модификатор __ramfunc в IAR wink.gif

Однократное копирование и модификация в процессе выполнения - это не одно и то же.


Цитата(MiklPolikov @ Feb 25 2015, 13:25) *
Полезный совет ! К примеру, у меня многочисленные прерывания от дребезга кнопок всегда глючно обрабатываются, приходится RC ячейку ставить. Причём глючность очень походила на ту ситуацию, которую Вы описали. Использовали ISB ?

У Вас кнопки на десятках МГц дребезжат?

Лучше обратиться к мануалу. Там перечислены все те немногочисленные случаи, когда барьеры нужны на Cortex-M.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 25 2015, 15:00
Сообщение #19


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MiklPolikov @ Feb 25 2015, 13:25) *
Использовали ISB ?
DSB


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 26 2015, 03:52
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(aaarrr @ Feb 25 2015, 16:34) *
Однократное копирование и модификация в процессе выполнения - это не одно и то же.

Однократное или многократное - не важно, какая разница - один раз сбой может произойти или много раз?
Если есть самомодификация (хоть одна) - нужен барьер. ISB.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 26 2015, 06:41
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(jcxz @ Feb 26 2015, 06:52) *
Однократное или многократное - не важно, какая разница - один раз сбой может произойти или много раз?

Просто ситуация с немедленным переходом на только что скопированный код очень маловероятна.

Цитата(jcxz @ Feb 26 2015, 06:52) *
Если есть самомодификация (хоть одна) - нужен барьер. ISB.

Тогда уж DSB + ISB.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 11:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016