quark 48 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 1 минуту назад, jcxz сказал: Вы это о чём? Об этом: 15 часов назад, jcxz сказал: функция IntCpuEna() - внутри себя разрешает прерывания (написана на ассемблере). До её вызова по коду прерывания запрещены. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 1 минуту назад, quark сказал: Об этом: И...??? PS: Ещё раз - прочитайте исходный пост! Если не умеете понимать си-код, лучше вообще не писать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 3 минуты назад, jcxz сказал: PS: Ещё раз - прочитайте исходный пост! Если не умеете понимать си-код, лучше вообще не писать. Я ваш текст комментирую, а не код (выдранный из контекста). Запрещаете прерывания в одной процедуре, разрешаете - в другой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба Только что, quark сказал: Запрещаете прерывания в одной процедуре, разрешаете - в другой. ГДЕ??? Процитируйте пожалуйста конкретные строки исходного кода! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 5 минут назад, jcxz сказал: ГДЕ??? Процитируйте пожалуйста конкретные строки исходного кода! Еще раз. Вы в тексте написали, что так делаете. Что там у вас программе - мне неизвестно. Вы привели только ее "обрывок". 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 4 минуты назад, quark сказал: Что там у вас программе - мне неизвестно. Если не умеете читать и понимать сишный код - проходите мимо, пожалуйста. Очевидно тема не для вас. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quark 48 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 8 минут назад, jcxz сказал: Если не умеете читать и понимать сишный код - проходите мимо, пожалуйста. Очевидно тема не для вас. Вам - про текст, а Вы - про код. И так - три раза подряд. Да, пожалуй, это не для меня... 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба Модератор: перебранку заканчиваем! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 12 часов назад, jcxz сказал: Возможно. Возможно не хватает спецификатора volatile при их объявлении. Ради интереса открыл сейчас свой крайний проект, в нем файл cmsis_armclang.h имеет определение /** \brief Get Priority Mask \details Returns the current state of the priority mask bit from the Priority Mask Register. \return Priority Mask value */ __STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) { uint32_t result; __ASM volatile ("MRS %0, primask" : "=r" (result) ); return(result); } Не совсем понял, что Вы имели в виду под Цитата Или весь макрос ENTR_CRT_SECTION() преобразовать в inline volatile функцию. Но это будет крайне некрасиво (с точки зрения оптимизации такого кода)... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба 15 минут назад, Arlleex сказал: Ради интереса открыл сейчас свой крайний проект, в нем файл cmsis_armclang.h имеет определение Я из стандартных инклудов IAR использую только intrinsics.h. Там нечто непрозрачное: __IEFF_HS __ATTRIBUTES unsigned long __get_PRIMASK( void ); Хотя в дочерних директориях IAR есть и "cmsis_armcc_V6.h" и "cmsis_gcc.h", в которых присутствует примерно такое же определение, как вы привели. 15 минут назад, Arlleex сказал: Не совсем понял, что Вы имели в виду под Вместо макроса ENTR_CRT_SECTION() написать точно такую же функцию. С inline volatile в префиксе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 21 марта, 2023 Опубликовано 21 марта, 2023 · Жалоба PS: Если подменить стандартное определение из intrinsics.h определением: __attribute__((always_inline)) static inline u32 get_PRIMASK(void) { u32 result; asm volatile ("MRS %0, PRIMASK" : "=r"(result)); return result; } то проблемные участки кода начинают компилиться адекватно. Хотя отрывать команду MRS Rx, PRIMASK от последующей CPSID I компилятор продолжает. Но не криминально: ... MRS R5, PRIMASK B.N ?Subroutine0 ... ?Subroutine0: (+1) 0xB672 CPSID I ... Но всё же лучше останусь на: #define ENTR_CRT_SECTION() asm volatile(" MRS %0, PRIMASK\n" " CPSID I" : "=&r"(cpu_sr) ::) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться