-
Постов
1 242 -
Зарегистрирован
-
Посещение
-
Победитель дней
9
Весь контент VladislavS
-
Тут, кстати, "они там все" запросто получат двойной вход в одно и то же прерывание. Но об этом хомячкам не расскажут.
- 79 ответов
-
- gigadevice
- новичок
-
(и ещё 3 )
C тегом:
-
Между чтение для обработки и повторным чтением для очистки могло произойти что угодно. Это Секрет Полишинеля. Впрочем, тот код что для них индусы пишут, ещё ничего. :)))
- 79 ответов
-
- gigadevice
- новичок
-
(и ещё 3 )
C тегом:
-
А потом у вас прерывания теряются. Тут вы очистили флаги, которые "вскочили" во время обработки текущего прерывания, не обработав. Смотреть прямо в регистре периферии микроконтроллер не может. Он сначала считывает в регистр процессора, а затем смотрит. Локальная переменная будет расположена в регистре процессора. Не нужно много раз читать регистр статуса в регистр процессора, это напрасная трата времени в прерывании.
- 79 ответов
-
- gigadevice
- новичок
-
(и ещё 3 )
C тегом:
-
Искать надо там где потерял, а не там где лучше видно. Вроде это очевидно.
- 79 ответов
-
- gigadevice
- новичок
-
(и ещё 3 )
C тегом:
-
Да там много, на первых страницах разделела ARM, RISC-V читать.
-
Теоретически да. Несколько тактов "под угрозой". Безопаснее будет TIMER_INTF(TIMER1) = ~i;
- 79 ответов
-
- 1
-
-
- gigadevice
- новичок
-
(и ещё 3 )
C тегом:
-
А я бы вообще вот так сделал u32 i = TIMER_INTF(TIMER1); TIMER_INTF(TIMER1) = 0; if (i & TIMER_INTF_CH0IF) { ... } if (i & TIMER_INTF_CH1IF) { ... }
- 79 ответов
-
- gigadevice
- новичок
-
(и ещё 3 )
C тегом:
-
STM32F - режим output compare
VladislavS ответил dimir тема в STM
Никак оно не будет работать. Сто раз уже писали - нужен DDS - возьми DDS и не сношай людям мозги. -
Нет перехода к определению переменной или функции
VladislavS ответил firstvald тема в IAR
Это совсем про другое. В исполняемый файл добавляется исходный код. Browse information в настройках среды включается. -
Почему 1 + 0.1 = 1.0000002 ??? и что с этим делать?
VladislavS ответил RR2021 тема в ARM
После макросов min и max деже читать этот ахтунг неохота. -
Почему 1 + 0.1 = 1.0000002 ??? и что с этим делать?
VladislavS ответил RR2021 тема в ARM
Что-то мне подсказывает, что переход в double будет дешевле делений/умножений/приведений. -
Почему 1 + 0.1 = 1.0000002 ??? и что с этим делать?
VladislavS ответил RR2021 тема в ARM
Какая разница, будет у вас там 2e-8 или 1e-3 ошибка, если вы на всё что меньше 0.1 в итоге чихаете? PS: Как писали раньше, принимаем младший разряд int за 0.1 и работаем в целых числах. -
Почему 1 + 0.1 = 1.0000002 ??? и что с этим делать?
VladislavS ответил RR2021 тема в ARM
-
У меня для совместимости с разными компиляторами (тулчейнами) вот такая конструкция используется #ifdef __cplusplus extern "C" { #endif #ifdef __ICCARM__ int __low_level_init(void) #else void SystemInit() #endif { // Код инициализации железа #ifdef __ICCARM__ return 1; #endif } #ifdef __cplusplus } #endif А с чего вы взяли что там одиночная переменная? Ясно же, что пример тестовый, что там реально в куче ХЗ.
-
-
STM32 калибровка RTC
VladislavS ответил Halfback тема в STM
Это только японские бракоделы свои машины постоянно отзывают. ВАЗ себе такого не позволяет. -
STM32 калибровка RTC
VladislavS ответил Halfback тема в STM
Чувствуется инженерный подход :))) Незначительно! Результат ничто - процесс всё! -
Не знаю это ли вы имеете в виду. Вот у меня в одной из библиотек обработчик прерываний USB. В нём IRQHandlers это список типов. Для каждого элемента списка выполняется лямбда. А сам список зависит от реализуемого класса. Например, для CDC обработчики двух конечных точек. Вообще-то переменная. Изменять нельзя, правда. :))) Это и в православном С так было со статическими локальными переменными.
-
И при написании своих библиотек. В рядовом коде они, действительно, выглядят не очень уместно. Но когда с ними на ты, то так и подмывает применить. В смысле? auto constexpr X = 100; auto Y = 100; auto func() { int constexpr i = X<<2; // Компайлтайм, Ok int constexpr I = Y<<2; // Рантайм, ошибка } Ни в коем случае, это сделает локальную переменную фактически глобальной для данной функции, но она всё так же должна быть инициализирована вычисленным на этапе компиляции значением. и это не зависит от оптимизации. При любой оптимизации должно быть вычислено на этапе компиляции. Да вроде всё просто: 1. constexpr переменные (читай константы). Они всегда должны быть инициализированы значением вычисленным на этапе компиляции. 2. constexpr функции. Они могут работать как в компайлтайме, так и в рантайме. В первом случае (когда все условия сложились) их значения можно использовать там где подразумевается константа этапа компиляции: параметры шаблонов, инициализация constexpr переменных, if constexpr()... Если значение нельзя в компайлтайме вычислить, то работает как обычная функция в рантайме. В С++20 появилось более жёсткое consteval, которое не пускает функцию в рантайм. 3. if constexpr() Тут всё просто. Выражение "под условием" должно быть вычислено на этапе компиляции.
-
STM32F103 время выхода в прерывание
VladislavS ответил auric тема в STM
Вы поняли что хочет ТС? Я ничегошеньки, потому и хотелось бы код посмотреть, может там намёки есть. Хотя, если код такой же как русский в сообщении, то шансы малы. -
STM32F103 время выхода в прерывание
VladislavS ответил auric тема в STM
Может хоть одну строчку кода покажете? -
Про специализацию шаблонов. Появившийся в С++17 if constexpr превратил специализацию функций и методов в привычное функциональное программирование, которое даже не воспринимается как специализация. В С++20 появились концепты, которые позволяют гибко специализировать классы. SFINAE ушёл в прошлое. Достаточно просто слезть с броневичка и пользоваться имеющимся инструментом.
-
Не понимаю почему знание шаблона стандартной библиотеки воспринимается как чудо. Пользуйтесь, на здоровье. Сокращает писанину.
-
Специализация if constexpr абсолютно однозначна и понятна. Желание специализировать методы иным способом вызывает, как минимум, недоумение. Что-что? Стандартная библиотека это неотъемлемая часть языка. Не надо за меня писать. Что я считаю и с чем согласен напишу сам. Спасибо. Невозможно. Метод size() используется в разных контейнерах стандартной библиотеке и везде значит одно и то же. std::is_same_v<T2, int>
-
Вы всё вывернули наизнанку. Вместо специализаций, которые непонятно как сработают, ясное и понятное программирование. Это как раз шаг вперёд к понятности и надёжности кода.