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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> Библиотека атомарных операций для STM32
ArtDenis
сообщение Jun 24 2015, 09:31
Сообщение #46


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318



Цитата(AHTOXA @ Jun 24 2015, 14:19) *
Ну, вроде всё вполне согласуется с моими опытами.
Единственный момент, ADC_<1>::clear_eoc_flag() - наверняка делает STR в область периферии. Для чистоты эксперимента хорошо бы сделать совсем пустой обработчик прерывания.

Так вроде как область адресов периферии не относится к ОЗУ, которое защищает монитор?

И без ADC_<1>::clear_eoc_flag() флаг не сбросится и прерывание будет происходить снова и снова как только оно завершиться. Убрал ADC_<1>::clear_eoc_flag(). Поток выполнения перестал доходить до
Код
bool res = __STREXW(10, &var) == 0;

Есть в STM32 такие прерывания для которых не надо сбрасывать флаг при выходе из обработчика?

Сообщение отредактировал ArtDenis - Jun 24 2015, 09:36


--------------------
http://ufa-darts.ru/ - собираем дартс-лигу в Уфе
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 24 2015, 09:42
Сообщение #47


Гуру
******

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



Цитата(ArtDenis @ Jun 24 2015, 14:00) *
PS: критика крайне приветствуется ))

Все тесты, кроме test4() бессмысленны. Непонятно - что там тестируется? LDREX/STREX призваны для обнаружения нарушения эксклюзивного доступа
(когда при работе одного процесса с переменной, происходит доступ к ней другого процесса). Везде кроме test4() имеется только работа одного процесса.

Цитата(ArtDenis @ Jun 24 2015, 15:31) *
Есть в STM32 такие прерывания для которых не надо сбрасывать флаг при выходе из обработчика?

Все прерывания M-ядра квитируются (переходят в разряд обслуживаемых со снятием запроса).
Путаете мух с котлетами. Сбрасывать возможно нужно флаги периферии, вызвавшие срабатывание этих прерываний.
Ничего не мешает возбудить эти прерывания программно через NVIC. Читайте мануал на M-ядро.
Go to the top of the page
 
+Quote Post
ArtDenis
сообщение Jun 24 2015, 09:49
Сообщение #48


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318



Цитата(jcxz @ Jun 24 2015, 14:42) *
Все тесты, кроме test4() бессмысленны. Непонятно - что там тестируется? LDREX/STREX призваны для обнаружения нарушения эксклюзивного доступа
(когда при работе одного процесса с переменной, происходит доступ к ней другого процесса). Везде кроме test4() имеется только работа одного процесса.

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

Цитата(jcxz @ Jun 24 2015, 14:42) *
Все прерывания M-ядра квитируются (переходят в разряд обслуживаемых со снятием запроса).
Путаете мух с котлетами. Сбрасывать возможно нужно флаги периферии, вызвавшие срабатывание этих прерываний.
Ничего не мешает возбудить эти прерывания программно через NVIC. Читайте мануал на M-ядро.

Так что мне сделать, чтобы был пустой обработчик прерывания, в котором не надо сбрасывать флаг? И кстати, я не понял что именно я путаю и в каком месте ))


--------------------
http://ufa-darts.ru/ - собираем дартс-лигу в Уфе
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jun 24 2015, 10:27
Сообщение #49


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(ArtDenis @ Jun 24 2015, 14:31) *
Так вроде как область адресов периферии не относится к ОЗУ, которое защищает монитор?

Ну, для полноты охвата тестамиsm.gif
Цитата(ArtDenis @ Jun 24 2015, 14:31) *
Есть в STM32 такие прерывания для которых не надо сбрасывать флаг при выходе из обработчика?

Например, SysTick. Или, вот, PendSV. Взводится вот так:
Код
SCB->ICSR = SCB_ICSR_PENDSVSET_Msk;


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 24 2015, 10:34
Сообщение #50


Гуру
******

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



Цитата(ArtDenis @ Jun 24 2015, 15:49) *
Вообще тестируется работа монитора эксклюзивного доступа, которому все эти потоки и процессы по барабану. Он вообще не знает о таких вещах.

Вообще этот монитор как раз и создан для этих процессов и потоков. Если что.

Цитата(ArtDenis @ Jun 24 2015, 15:49) *
Так что мне сделать, чтобы был пустой обработчик прерывания, в котором не надо сбрасывать флаг? И кстати, я не понял что именно я путаю и в каком месте ))

Программно активировать любое прерывание через NVIC. Открываете мануал на M-ядро и читаете про "Interrupt Set-Pending Register".
Путаете NVIC с периферией посылающей запросы к NVIC.
Go to the top of the page
 
+Quote Post
ArtDenis
сообщение Jun 24 2015, 10:44
Сообщение #51


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318



Цитата(jcxz @ Jun 24 2015, 15:34) *
Вообще этот монитор как раз и создан для этих процессов и потоков. Если что.

Если он создан для процессов и потоков, это ещё не означает, что для тестирования и проверки как он работает, нам надо обязательно использовать процессы и потоки.

Цитата(jcxz @ Jun 24 2015, 15:34) *
Программно активировать любое прерывание через NVIC.
Путаете NVIC с периферией посылающей запросы к NVIC.

А в каком конкретно месте путаю?

Цитата(AHTOXA @ Jun 24 2015, 15:27) *
Ну, для полноты охвата тестамиsm.gif

Например, SysTick. Или, вот, PendSV. Взводится вот так:
Код
SCB->ICSR = SCB_ICSR_PENDSVSET_Msk;


О. Отлично.

Код
static void test4()
{
    NVIC_EnableIRQ(PendSV_IRQn);

    volatile uint32_t var = 0;
    __LDREXW(&var);

    SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk;
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();

    bool res = __STREXW(10, &var) == 0;
    led_on(res);
}

extern "C" void PendSV_Handler()
{
}


Монитор отловил нарушение доступа


--------------------
http://ufa-darts.ru/ - собираем дартс-лигу в Уфе
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:53
Рейтинг@Mail.ru


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