Перейти к содержанию
    

stm32 запрет прерывания

1 час назад, piroman сказал:

Спасибо.
Наверное, тогда быстрее (т.к. NVIC часть ядра) и правильнее будет запретить прерывание через NVIC->ICER...

SCS-область ядра имеет атрибут памяти Strongly-ordered.

Однако, это не исключает побочных эффектов при доступе в эту область.

NVIC почти всеми своими регистрами лежит в области SCS, поэтому после записи регистра ICER нужно сделать DSB + ISB.

Только тогда можно быть уверенным, что после барьеров прерывание точно не возникнет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разрешите вкоиниться со своим вопросом.

А если я на Cortex-M4 глобально запрещаю прерывания __disable_irq();

Код из CMSIS

__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
{
  __ASM volatile ("cpsid i" : : : "memory");
}

 
DSB + ISB тоже надо делать ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отвечу вопросом на вопрос:

17 minutes ago, dimka76 said:

cpsid i

здесь есть операции с памятью?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, aaarrr said:

Отвечу вопросом на вопрос:

здесь есть операции с памятью?

ОК

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверное, тогда быстрее (т.к. NVIC часть ядра) и правильнее будет запретить прерывание через NVIC->ICER...


Правильнее управлять причиной: флаги в периферии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ldr R1,[R0]
ldr R2,[R0,#4]
movs R3,#4
add R1,R3
add R1,R2

ldr R1,[R0]
movs R3,#4
add R1,R3
ldr R2,[R0,#4]
add R1,R2

Вот два варианта кода, делающих одно и то же, с одним набором команд, но в разной последовательности. Как вы считаете - время выполнения будет одинаковым или разным?

Изменено пользователем piroman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

1 час назад, piroman сказал:

Вот два варианта кода, делающих одно и то же, с одним набором команд, но в разной последовательности. Как вы считаете - время выполнения будет одинаковым или разным?

Зависит от работы конвейера. Вроде первый вариант отработает быстрее, но это не точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...