|
__LDREX __STREX в STM32F407 |
|
|
|
Jun 4 2017, 13:18
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 23-03-15
Пользователь №: 85 852

|
Всем доброе время суток! IDE - IAR+плагин IAR для eclipse+eclipse. Решил проверить, как работает синхронизация с использованием __LDREX/__STREX. Пишем следующий код CODE typedef struct { ... volatile unsigned long sync; //переменная для синхонизации доступа к данному элементу } burst_measur;
burst_measur cur_mes;
void mpu_cfg_test() { //настраиваем область внутренней RAM, как разделяемую __DMB(); SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; MPU->CTRL = 0U;
MPU->RNR = 0UL; MPU->RBAR = 0x20000000UL; MPU->RASR = (0x10UL << MPU_RASR_SIZE_Pos) | MPU_RASR_C_Msk | MPU_RASR_S_Msk | (0x3 << MPU_RASR_AP_Pos) | MPU_RASR_ENABLE_Msk;
MPU->CTRL = MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk; SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; __DSB(); __ISB();
//выполняем запрос эксклюзивного доступа к переменной cur_mes.sync DWORD sync=0; sync = __LDREX(&cur_mes.sync); __DMB(); soft_int_ini(); //настойка программного прерывания soft_int_on(); //вызов программного прерывания __WFI(); } в обработчике программного прерывания: CODE DWORD sync; do { sync = __LDREX(&cur_mes.sync); sync++; sync = __STREX(sync, &cur_mes.sync); } while (sync); Т.е. сначала выполняется __LDREX(&cur_mes.sync), потом происходит прерывание и выполняется __LDREX(&cur_mes.sync) + __STREX(sync, &cur_mes.sync). По всем документациям, как я их понял, __STREX(sync, &cur_mes.sync) должна возвратить "не ноль", однако возвращает "ноль". Помогите, пожалуйста, разобраться, что я делаю не правильно?
|
|
|
|
|
 |
Ответов
|
Jun 8 2017, 05:01
|
Профессионал
    
Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882

|
AHTOXA, спасибо, ознакомился. Но, опять противоречивые результаты: AVI-crak говорит, что флаг сбрасывает любая запись по адресу, хоть DMA. ArtDenis в своих тестах показывает, что даже явная запись не сбрасывает. AlexandrY утверждает, что у него явная запись сбрасывает флаг, а неявная (PUSH) - не меняет состояние. Походу, собака порылась в Цитата(ARM ® v7-M Architecture Reference Manual) A3.4.5 Load-Exclusive and Store-Exclusive usage restrictions The Load-Exclusive and Store-Exclusive instructions are designed to work together, as a pair, for example a LDREX/STREX pair or a LDREXB/STREXB pair. As mentioned in Context switch support, ARM recommends that the Store-Exclusive instruction always follows within a few instructions of its associated Load-Exclusive instructions. In order to support different implementations of these functions, software must follow the notes and restrictions given here. ... В частности, по поводу простой записи: Цитата • An explicit store to memory can cause the clearing of exclusive monitors associated with other processors, therefore, performing a store between the LDREX and the STREX can result in a livelock situation. As a result, code must avoid placing an explicit store between an LDREX and an STREX in a single code sequence. • LDREX and STREX operations must be performed only on memory with the Normal memory attribute. То есть: - LDREX/STREX применять только в паре, они для этого сделаны. Все остальное - от лукавого. Может сработать, а может и нет, зависит от конкретной реализации ядра - LDREX/STREX применять только на Normal памяти: Цитата(ARM ® v7-M Architecture Reference Manual) A3.5.1 Memory types For each memory region, the most significant memory attribute specifies the memory type. There are three mutually exclusive memory types: • Normal. • Device. • Strongly-ordered. - вроде как сброс локального монитора текущего ядра может происходить при ЛЮБОЙ записи (хоть DMA), при ЯВНОЙ записи могут сбросится только мониторы других ядер. Но по факту может быть что угодно в зависимости от конкретной реализации. Извращения проверять обязательно! Цитата(ARM ® v7-M Architecture Reference Manual) A3.4.1 Exclusive access instructions and Non-shareable memory regions When a processor writes using any instruction other than a Store-Exclusive: • If the write is to a physical address that is covered by its local monitor it is IMPLEMENTATION DEFINED whether the write affects the state of the local monitor. - локальный монитор сбрасывается при возникновении исключения. Т.е. для одноядерной системы неважно, была ли в другом процессе запись(эксклюзивная) - все равно по входу и выходу из исключения происходит сброс. Цитата A3.4.4 Context switch support In ARMv7-M, the local monitor is changed to Open Access automatically as part of an exception entry or exit sequence.
|
|
|
|
Сообщений в этой теме
_lexa_ __LDREX __STREX в STM32F407 Jun 4 2017, 13:18 jcxz Цитата(_lexa_ @ Jun 4 2017, 15:18) что я ... Jun 4 2017, 17:10 _lexa_ Цитата(jcxz @ Jun 4 2017, 17:10) STREX вс... Jun 4 2017, 18:39  KnightIgor Цитата(_lexa_ @ Jun 4 2017, 19:39) Где-то... Jun 4 2017, 19:34   _lexa_ Цитата(KnightIgor @ Jun 4 2017, 19:34) ..... Jun 4 2017, 20:14    KnightIgor Цитата(_lexa_ @ Jun 4 2017, 21:14) Интере... Jun 4 2017, 21:14     AHTOXA Цитата(KnightIgor @ Jun 5 2017, 02:14) Бл... Jun 5 2017, 05:38      Forger Цитата(AHTOXA @ Jun 5 2017, 08:38) А в чё... Jun 5 2017, 08:17       AHTOXA Цитата(Forger @ Jun 5 2017, 13:17) Полага... Jun 5 2017, 08:22        Forger Цитата(AHTOXA @ Jun 5 2017, 11:22) Если, ... Jun 5 2017, 08:24         AHTOXA Цитата(Forger @ Jun 5 2017, 13:24) Почему... Jun 5 2017, 08:54       jcxz Цитата(Forger @ Jun 5 2017, 10:17) Полага... Jun 5 2017, 08:49        Forger Цитата(jcxz @ Jun 5 2017, 11:49) Так обра... Jun 5 2017, 09:11         jcxz Цитата(Forger @ Jun 5 2017, 11:11) Как ра... Jun 5 2017, 09:37          Forger Цитата(jcxz @ Jun 5 2017, 12:37) Вот имен... Jun 5 2017, 09:49           jcxz Цитата(Forger @ Jun 5 2017, 11:49) Выходи... Jun 5 2017, 10:59            Forger Цитата(jcxz @ Jun 5 2017, 13:50) Надо тол... Jun 5 2017, 11:00             jcxz Цитата(Forger @ Jun 5 2017, 13:00) Не пон... Jun 5 2017, 11:09              Forger Цитата(jcxz @ Jun 5 2017, 14:09) Так как ... Jun 5 2017, 11:18               Forger Попался полезный документ по теме:
http://infocent... Jun 5 2017, 12:22                _lexa_ Цитата(Forger @ Jun 5 2017, 12:22) Попалс... Jun 5 2017, 13:55               jcxz Цитата(Forger @ Jun 5 2017, 13:18) Речь к... Jun 5 2017, 13:47            _lexa_ Цитата(jcxz @ Jun 5 2017, 10:59) А что та... Jun 5 2017, 13:26             AHTOXA Цитата(_lexa_ @ Jun 5 2017, 18:26) В тако... Jun 5 2017, 13:51             jcxz Цитата(_lexa_ @ Jun 5 2017, 15:26) ... Jun 5 2017, 14:21              scifi Цитата(jcxz @ Jun 5 2017, 17:21) Изучать ... Jun 5 2017, 14:31               AVI-crak Начали за упокой, кончили за здравие.
Как уже был... Jun 5 2017, 17:37                jcxz Цитата(AVI-crak @ Jun 5 2017, 19:37)... Jun 5 2017, 21:35                 _lexa_ Цитата(jcxz @ Jun 5 2017, 21:35) Похоже В... Jun 5 2017, 23:19                 AVI-crak Цитата(jcxz @ Jun 6 2017, 03:35) Монитор ... Jun 6 2017, 07:24                  jcxz Цитата(AVI-crak @ Jun 6 2017, 09:24)... Jun 6 2017, 08:20                   _lexa_ Цитата(jcxz @ Jun 6 2017, 08:20) Открывае... Jun 6 2017, 20:56                   Alechek Цитата(jcxz @ Jun 6 2017, 13:20) Фантазии... Jun 7 2017, 08:31                    jcxz Цитата(Alechek @ Jun 7 2017, 10:31) Опять... Jun 7 2017, 08:56                 KnightIgor Цитата(jcxz @ Jun 5 2017, 22:35) Ну навер... Jun 6 2017, 10:22                  AVI-crak Цитата(jcxz @ Jun 6 2017, 14:20) 1. зачем... Jun 6 2017, 11:02                   KnightIgor Цитата(AVI-crak @ Jun 6 2017, 12:02)... Jun 6 2017, 20:34                    jcxz Цитата(KnightIgor @ Jun 6 2017, 22:34) Ра... Jun 6 2017, 21:36                     LightElf QUOTE (jcxz @ Jun 7 2017, 00:36) Я писал ... Jun 7 2017, 11:52                      Forger Цитата(LightElf @ Jun 7 2017, 14:52) А пр... Jun 7 2017, 12:39                       jcxz Цитата(Forger @ Jun 7 2017, 14:39) Причем... Jun 7 2017, 13:13                        Forger Цитата(jcxz @ Jun 7 2017, 16:13) чтобы, е... Jun 7 2017, 13:27                  jcxz Цитата(KnightIgor @ Jun 6 2017, 12:22) То... Jun 6 2017, 12:08              _lexa_ Цитата(jcxz @ Jun 5 2017, 14:21) Видимо э... Jun 5 2017, 17:40               AVI-crak Цитата(_lexa_ @ Jun 5 2017, 23:40) Спасиб... Jun 5 2017, 18:00                _lexa_ Цитата(AVI-crak @ Jun 5 2017, 18:00)... Jun 5 2017, 19:28      KnightIgor Цитата(AHTOXA @ Jun 5 2017, 06:38) А в чё... Jun 5 2017, 12:40       jcxz Цитата(KnightIgor @ Jun 5 2017, 14:40) Ес... Jun 5 2017, 13:57        KnightIgor Цитата(jcxz @ Jun 5 2017, 14:57)
У меня ... Jun 5 2017, 19:42       AHTOXA Цитата(KnightIgor @ Jun 5 2017, 17:40) Ка... Jun 5 2017, 13:58  jcxz Цитата(_lexa_ @ Jun 4 2017, 20:39) Где-то... Jun 5 2017, 07:49   _lexa_ Цитата(jcxz @ Jun 5 2017, 07:49) Если меж... Jun 5 2017, 10:17   Alechek ЦитатаНе тот мануал открываете
Ну почему же не тот... Jun 7 2017, 09:18    jcxz Цитата(Alechek @ Jun 7 2017, 11:18) Про у... Jun 7 2017, 09:29     Alechek Цитата(jcxz @ Jun 7 2017, 14:29) В смысле... Jun 7 2017, 10:21      scifi Цитата(Alechek @ Jun 7 2017, 13:21) В смы... Jun 7 2017, 10:27      jcxz Цитата(Alechek @ Jun 7 2017, 12:21) В смы... Jun 7 2017, 11:23 Alechek Цитата(scifi @ Jun 7 2017, 15:27) Это наз... Jun 7 2017, 12:22 scifi Цитата(Alechek @ Jun 7 2017, 15:22) Сдела... Jun 7 2017, 12:50 AHTOXA Цитата(Alechek @ Jun 7 2017, 17:22) А поп... Jun 7 2017, 13:30 AHTOXA Цитата(Alechek @ Jun 8 2017, 10:01) - LDR... Jun 8 2017, 06:21  LightElf QUOTE (AHTOXA @ Jun 8 2017, 09:21) Именно... Jun 8 2017, 13:44   AHTOXA Цитата(LightElf @ Jun 8 2017, 18:44) Есть... Jun 8 2017, 14:52 Alechek Цитата(jcxz @ Jun 8 2017, 11:17) И правил... Jun 8 2017, 11:54 AVI-crak Проверять нужно кодом на асме, чтобы gcc не наопти... Jun 8 2017, 13:21  jcxz Цитата(AVI-crak @ Jun 8 2017, 15:21)... Jun 8 2017, 20:32   Forger Коли SVC синхронное и его не получиться использова... Jun 9 2017, 07:50    jcxz Цитата(Forger @ Jun 9 2017, 09:50) зы. Пр... Jun 9 2017, 10:33     Forger Цитата(jcxz @ Jun 9 2017, 13:33) PendSV н... Jun 9 2017, 10:58      Шаманъ Цитата(Forger @ Jun 9 2017, 13:58) как сд... Jun 9 2017, 13:02       Forger Цитата(Шаманъ @ Jun 9 2017, 16:02) Очеред... Jun 9 2017, 13:20        Шаманъ Цитата(Forger @ Jun 9 2017, 16:20) хочетс... Jun 9 2017, 14:14         Forger Цитата(Шаманъ @ Jun 9 2017, 17:14) Интере... Jun 9 2017, 14:30          Шаманъ Цитата(Forger @ Jun 9 2017, 17:30) При че... Jun 9 2017, 15:40           Forger Цитата(Шаманъ @ Jun 9 2017, 18:40) Это ка... Jun 9 2017, 16:27            Шаманъ Цитата(Forger @ Jun 9 2017, 19:27) Я гово... Jun 9 2017, 17:08             Forger Цитата(Шаманъ @ Jun 9 2017, 20:08) От же ... Jun 9 2017, 17:23              Шаманъ Цитата(Forger @ Jun 9 2017, 20:23) Чтобы ... Jun 9 2017, 17:40               Forger Цитата(Шаманъ @ Jun 9 2017, 20:40) Если н... Jun 9 2017, 17:48                Шаманъ Цитата(Forger @ Jun 9 2017, 20:48) Не, эт... Jun 9 2017, 17:56                 Forger Цитата(Шаманъ @ Jun 9 2017, 20:56) Конечн... Jun 9 2017, 18:04                  Шаманъ Цитата(Forger @ Jun 9 2017, 21:04) И само... Jun 9 2017, 18:54                  jcxz Цитата(Forger @ Jun 9 2017, 20:04) Я дела... Jun 9 2017, 19:37                   Forger Цитата(jcxz @ Jun 9 2017, 22:31) Вот как ... Jun 9 2017, 19:39                    jcxz Цитата(Forger @ Jun 9 2017, 21:39) Самое ... Jun 9 2017, 20:27                   Forger Цитата(jcxz @ Jun 9 2017, 22:37) Допустим... Jun 9 2017, 20:44                    jcxz Цитата(Forger @ Jun 9 2017, 22:44) Понима... Jun 9 2017, 20:58                     Forger Цитата(jcxz @ Jun 9 2017, 23:58) К работе... Jun 9 2017, 21:15                      jcxz Цитата(Forger @ Jun 9 2017, 23:15) Пусть ... Jun 9 2017, 21:20                       Forger Цитата(jcxz @ Jun 10 2017, 00:17) Ещё раз... Jun 9 2017, 21:20                       Forger Цитата(jcxz @ Jun 10 2017, 00:20) Да хоть... Jun 9 2017, 21:27                      jcxz Цитата(Forger @ Jun 9 2017, 23:15) При че... Jun 9 2017, 21:24                    Forger Кстати, при очистке очереди изменяются оба указате... Jun 9 2017, 20:59                     jcxz Цитата(Forger @ Jun 9 2017, 22:59) Кстати... Jun 9 2017, 21:10              jcxz Цитата(Forger @ Jun 9 2017, 19:23) А в фо... Jun 9 2017, 19:18               Forger Цитата(jcxz @ Jun 9 2017, 22:12) И в фоно... Jun 9 2017, 19:18        AVI-crak Защищённый режим: стек для потоков psp, стек для п... Jun 9 2017, 14:38 AHTOXA Цитата(Alechek @ Jun 8 2017, 16:54) Вобще... Jun 8 2017, 13:39
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|