Arlleex 131 2 апреля, 2020 Опубликовано 2 апреля, 2020 · Жалоба 1 час назад, piroman сказал: Спасибо. Наверное, тогда быстрее (т.к. NVIC часть ядра) и правильнее будет запретить прерывание через NVIC->ICER... SCS-область ядра имеет атрибут памяти Strongly-ordered. Однако, это не исключает побочных эффектов при доступе в эту область. NVIC почти всеми своими регистрами лежит в области SCS, поэтому после записи регистра ICER нужно сделать DSB + ISB. Только тогда можно быть уверенным, что после барьеров прерывание точно не возникнет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 2 апреля, 2020 Опубликовано 2 апреля, 2020 · Жалоба Разрешите вкоиниться со своим вопросом. А если я на Cortex-M4 глобально запрещаю прерывания __disable_irq(); Код из CMSIS __attribute__( ( always_inline ) ) __STATIC_INLINE void __disable_irq(void) { __ASM volatile ("cpsid i" : : : "memory"); } DSB + ISB тоже надо делать ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 2 апреля, 2020 Опубликовано 2 апреля, 2020 · Жалоба Отвечу вопросом на вопрос: 17 minutes ago, dimka76 said: cpsid i здесь есть операции с памятью? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 2 апреля, 2020 Опубликовано 2 апреля, 2020 · Жалоба 20 minutes ago, aaarrr said: Отвечу вопросом на вопрос: здесь есть операции с памятью? ОК Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 2 апреля, 2020 Опубликовано 2 апреля, 2020 · Жалоба Наверное, тогда быстрее (т.к. NVIC часть ядра) и правильнее будет запретить прерывание через NVIC->ICER... Правильнее управлять причиной: флаги в периферии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pyroman 2 5 апреля, 2020 Опубликовано 5 апреля, 2020 (изменено) · Жалоба 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 Вот два варианта кода, делающих одно и то же, с одним набором команд, но в разной последовательности. Как вы считаете - время выполнения будет одинаковым или разным? Изменено 5 апреля, 2020 пользователем piroman Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Segment 3 5 апреля, 2020 Опубликовано 5 апреля, 2020 · Жалоба 1 час назад, piroman сказал: Вот два варианта кода, делающих одно и то же, с одним набором команд, но в разной последовательности. Как вы считаете - время выполнения будет одинаковым или разным? Зависит от работы конвейера. Вроде первый вариант отработает быстрее, но это не точно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться