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

 
 
> Запрещение и разрешение прерываний
Tarbal
сообщение Jan 25 2016, 02:55
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Я сгенерировал кубом код для STM32F429 и добавляю в него необходимые мне функции.

Обнаружил, что вопреки ожиданиям не запрещались прерывания когда следовало их запретить. На 100 процентов не уверен, что это так, но другого обюяснения поведения найти не могу.

Вот так определены функции управления запрещением прерывания.
Код
/** \brief  Enable IRQ Interrupts

  This function enables IRQ interrupts by clearing the I-bit in the CPSR.
  Can only be executed in Privileged modes.
*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __enable_irq(void)
{
  __ASM volatile ("cpsie i" : : : "memory");
}


/** \brief  Disable IRQ Interrupts

  This function disables IRQ interrupts by setting the I-bit in the CPSR.
  Can only be executed in Privileged modes.
*/
__attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void)
{
  __ASM volatile ("cpsid i" : : : "memory");
}


В дисассемблерном коде я не вижу ничего похожего на них.
Или я чего-то не разглядел?
Посмотрите пожалуйста свежим взглядом.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rudy_b
сообщение Jan 25 2016, 15:25
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 888
Регистрация: 25-09-08
Из: Питер
Пользователь №: 40 458



Кстати, еще вопрос по той же теме. Нужна функция запрета прерываний, которая при последующем разрешении прерываний сможет точно восстановить предыдущее состояние разрешения прерываний ( I-bit CPSR) для кортекса М3 (stm32f207).

Проблема в том, что если я ручками задвину регистр CPSR в стек и, затем, запрещу прерывания, то при возникновении прерывания между этими двумя командами (а оно может изменить параметры прерываний), я получу не то состояние и не смогу восстановить реальное исходное состояние параметров прерываний.

Может есть команда, которая сразу и запомнит текущее состояние разрешения прерываний в стеке и запретит их? Ну, хотя бы, сохранит регистр CPSR или только его I-bit?
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jan 25 2016, 19:01
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(rudy_b @ Jan 25 2016, 19:25) *
Кстати, еще вопрос по той же теме. Нужна функция запрета прерываний, которая при последующем разрешении прерываний сможет точно восстановить предыдущее состояние разрешения прерываний ( I-bit CPSR) для кортекса М3 (stm32f207).

Проблема в том, что если я ручками задвину регистр CPSR в стек и, затем, запрещу прерывания, то при возникновении прерывания между этими двумя командами (а оно может изменить параметры прерываний), я получу не то состояние и не смогу восстановить реальное исходное состояние параметров прерываний.

Может есть команда, которая сразу и запомнит текущее состояние разрешения прерываний в стеке и запретит их? Ну, хотя бы, сохранит регистр CPSR или только его I-bit?


http://stm32f4-discovery.com/2015/06/how-t...n-arm-cortex-m/


Цитата(Сергей Борщ @ Jan 25 2016, 16:19) *
Отожмите иконку "Show Source" на рамке окна дизассемблера. Пропавшие команды появятся. Правда исчезнут вкрапления исходного текста в дизассемблер.
Не, это у нас движок на форуме такой. В следующий раз нажимайте "расширенная форма" и там будет возможность прикрепить файл прямо в сообщение, без внешних файлохранилищ. После выбора и загрузки файла появится возможность вставить его в нужное место сообщения, разберетесь.


Спасибо
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Tarbal   Запрещение и разрешение прерываний   Jan 25 2016, 02:55
- - SII   Похоже, в дизассемблере команды разрешения-запреще...   Jan 25 2016, 04:41
- - johnshadow   Регулярно наблюдаю такие приколы у кокосовского де...   Jan 25 2016, 07:32
- - Tarbal   Спасибо за ответы. Картинку я залил воспользовав...   Jan 25 2016, 11:47
|- - Сергей Борщ   Отожмите иконку "Show Source" на рамке о...   Jan 25 2016, 12:19
|- - GetSmart   Цитата(rudy_b @ Jan 25 2016, 19:25) Пробл...   Jan 26 2016, 00:24
|- - rudy_b   Цитата(GetSmart @ Jan 26 2016, 03:24) Как...   Jan 26 2016, 03:42
|- - GetSmart   Цитата(rudy_b @ Jan 26 2016, 07:42) В дан...   Jan 26 2016, 06:37
- - smalcom   Цитата__disable_irq() оно?   Jan 25 2016, 18:04
|- - rudy_b   Цитата(smalcom @ Jan 25 2016, 21:04) __di...   Jan 25 2016, 21:22
|- - Сергей Борщ   Цитата(rudy_b @ Jan 25 2016, 23:22) Честн...   Jan 25 2016, 23:11
||- - Tarbal   Цитата(Сергей Борщ @ Jan 26 2016, 02:11) ...   Jan 27 2016, 14:20
||- - Сергей Борщ   Цитата(Tarbal @ Jan 27 2016, 16:20) Разре...   Jan 27 2016, 22:08
||- - Tarbal   Цитата(Сергей Борщ @ Jan 28 2016, 01:08) ...   Jan 28 2016, 12:15
||- - Сергей Борщ   Цитата(Tarbal @ Jan 28 2016, 14:15) Но по...   Jan 28 2016, 12:43
|- - Непомнящий Евгений   Цитата(rudy_b @ Jan 26 2016, 00:22) Нет, ...   Jan 26 2016, 05:37
|- - rudy_b   Цитата(Непомнящий Евгений @ Jan 26 2016, 08...   Jan 26 2016, 13:28
|- - Непомнящий Евгений   Цитата(rudy_b @ Jan 26 2016, 16:28) Это у...   Jan 26 2016, 13:32
||- - rudy_b   Цитата(Непомнящий Евгений @ Jan 26 2016, 16...   Jan 26 2016, 20:00
||- - Непомнящий Евгений   Цитата(rudy_b @ Jan 26 2016, 23:00) Зато ...   Jan 27 2016, 05:02
||- - GetSmart   Цитата(Непомнящий Евгений @ Jan 27 2016, 09...   Jan 27 2016, 08:50
||- - Сергей Борщ   Цитата(GetSmart @ Jan 27 2016, 10:50) то ...   Jan 27 2016, 10:07
||- - GetSmart   Цитата(Сергей Борщ @ Jan 27 2016, 14:07) ...   Jan 27 2016, 13:00
|- - GetSmart   Цитата(rudy_b @ Jan 26 2016, 17:28) Кодpr...   Jan 26 2016, 21:02
- - rudy_b   Мы говорим о разных вещах. Попробую более узко сфо...   Jan 27 2016, 14:11
|- - GetSmart   Цитата(rudy_b @ Jan 27 2016, 18:11) Но фу...   Jan 27 2016, 22:52
- - AVI-crak   Цитата(Tarbal @ Jan 25 2016, 09:55) Я сге...   Jan 27 2016, 18:59
- - rudy_b   Все совершенно справедливо. Но переписывать стек н...   Jan 28 2016, 04:00
|- - GetSmart   Цитата(rudy_b @ Jan 28 2016, 08:00) Да и ...   Jan 28 2016, 04:51
- - GetSmart   У NXP ARM7 была такая особенность ARM spurious IRQ...   Jan 29 2016, 02:01


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:29
Рейтинг@Mail.ru


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