Перейти к содержанию
    

VladislavS

Свой
  • Постов

    1 242
  • Зарегистрирован

  • Посещение

  • Победитель дней

    9

Весь контент VladislavS


  1. Тут, кстати, "они там все" запросто получат двойной вход в одно и то же прерывание. Но об этом хомячкам не расскажут.
  2. Между чтение для обработки и повторным чтением для очистки могло произойти что угодно. Это Секрет Полишинеля. Впрочем, тот код что для них индусы пишут, ещё ничего. :)))
  3. А потом у вас прерывания теряются. Тут вы очистили флаги, которые "вскочили" во время обработки текущего прерывания, не обработав. Смотреть прямо в регистре периферии микроконтроллер не может. Он сначала считывает в регистр процессора, а затем смотрит. Локальная переменная будет расположена в регистре процессора. Не нужно много раз читать регистр статуса в регистр процессора, это напрасная трата времени в прерывании.
  4. Искать надо там где потерял, а не там где лучше видно. Вроде это очевидно.
  5. Да там много, на первых страницах разделела ARM, RISC-V читать.
  6. Теоретически да. Несколько тактов "под угрозой". Безопаснее будет TIMER_INTF(TIMER1) = ~i;
  7. А я бы вообще вот так сделал u32 i = TIMER_INTF(TIMER1); TIMER_INTF(TIMER1) = 0; if (i & TIMER_INTF_CH0IF) { ... } if (i & TIMER_INTF_CH1IF) { ... }
  8. Никак оно не будет работать. Сто раз уже писали - нужен DDS - возьми DDS и не сношай людям мозги.
  9. Это совсем про другое. В исполняемый файл добавляется исходный код. Browse information в настройках среды включается.
  10. После макросов min и max деже читать этот ахтунг неохота.
  11. Что-то мне подсказывает, что переход в double будет дешевле делений/умножений/приведений.
  12. Какая разница, будет у вас там 2e-8 или 1e-3 ошибка, если вы на всё что меньше 0.1 в итоге чихаете? PS: Как писали раньше, принимаем младший разряд int за 0.1 и работаем в целых числах.
  13. Мои глаза!!! Что это изменит? Значение 1.1 во float не представимо точно.
  14. У меня для совместимости с разными компиляторами (тулчейнами) вот такая конструкция используется #ifdef __cplusplus extern "C" { #endif #ifdef __ICCARM__ int __low_level_init(void) #else void SystemInit() #endif { // Код инициализации железа #ifdef __ICCARM__ return 1; #endif } #ifdef __cplusplus } #endif А с чего вы взяли что там одиночная переменная? Ясно же, что пример тестовый, что там реально в куче ХЗ.
  15. Да вроде всё работает. Настройки по умолчанию. Память под кучу выделена?
  16. Это только японские бракоделы свои машины постоянно отзывают. ВАЗ себе такого не позволяет.
  17. Чувствуется инженерный подход :))) Незначительно! Результат ничто - процесс всё!
  18. Не знаю это ли вы имеете в виду. Вот у меня в одной из библиотек обработчик прерываний USB. В нём IRQHandlers это список типов. Для каждого элемента списка выполняется лямбда. А сам список зависит от реализуемого класса. Например, для CDC обработчики двух конечных точек. Вообще-то переменная. Изменять нельзя, правда. :))) Это и в православном С так было со статическими локальными переменными.
  19. И при написании своих библиотек. В рядовом коде они, действительно, выглядят не очень уместно. Но когда с ними на ты, то так и подмывает применить. В смысле? 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() Тут всё просто. Выражение "под условием" должно быть вычислено на этапе компиляции.
  20. Вы поняли что хочет ТС? Я ничегошеньки, потому и хотелось бы код посмотреть, может там намёки есть. Хотя, если код такой же как русский в сообщении, то шансы малы.
  21. Может хоть одну строчку кода покажете?
  22. Про специализацию шаблонов. Появившийся в С++17 if constexpr превратил специализацию функций и методов в привычное функциональное программирование, которое даже не воспринимается как специализация. В С++20 появились концепты, которые позволяют гибко специализировать классы. SFINAE ушёл в прошлое. Достаточно просто слезть с броневичка и пользоваться имеющимся инструментом.
  23. Не понимаю почему знание шаблона стандартной библиотеки воспринимается как чудо. Пользуйтесь, на здоровье. Сокращает писанину.
  24. Специализация if constexpr абсолютно однозначна и понятна. Желание специализировать методы иным способом вызывает, как минимум, недоумение. Что-что? Стандартная библиотека это неотъемлемая часть языка. Не надо за меня писать. Что я считаю и с чем согласен напишу сам. Спасибо. Невозможно. Метод size() используется в разных контейнерах стандартной библиотеке и везде значит одно и то же. std::is_same_v<T2, int>
  25. Вы всё вывернули наизнанку. Вместо специализаций, которые непонятно как сработают, ясное и понятное программирование. Это как раз шаг вперёд к понятности и надёжности кода.
×
×
  • Создать...