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

EdgeAligned

Участник
  • Постов

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

  • Посещение

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

    8

EdgeAligned стал победителем дня 26 июня

EdgeAligned имел наиболее популярный контент!

Репутация

74 Очень хороший

Информация о EdgeAligned

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Просто открыть её и прочитать, что написано внутри. И взять из нее то, что относится непосредственно к регистрам.
  2. С экранной клавиатуры смартфона это не нажимается И лично я пользуюсь только одним типом смайлика - 🙂 с клавиатуры : и )
  3. Начнем издалека: namespace N { void Foo() { } } namespace M { void FooM() { using namespace N; Foo(); } } Однако, если Foo() определена в глобальной области видимости ::, то нужно конкретно указывать, какую из Foo() вы вызываете - N::Foo(); или ::Foo(); А теперь с энумераторами: enum En { RESET = 0, SET = 1 }; namespace N { enum En { RESET = 1, SET = 0 }; } void Foo() { En st1 = SET; N::En st2 = N::SET; } Собственно, о чем и сообщает строчка ambigous: RESET из enum в <stm32f4xx.h> или из Hardware::Pin? в которой так и написано - "откуда вы вызываете RESET, из энумератора или из Hardware::Pin?" То есть, когда появляется неоднозначность вызова, нужно указывать полное имя, включая неймспейсы. Глобальную область видимости отключить нельзя (насколько мне известно).
  4. Про макросы - да, я тоже так делал, и это работает. Однако, коль уж начал жить по-новому, но и мыслить тоже желательно по-новому 🙂 В том плане, что появилась возможность сделать вот так: template<typename SPI, typename CS, typename DC> class XXXX { public: static void Xxxxx() { CS::Low(); DC::Low(); SPI::Write(xxx); ... } } На мой взгляд, это работает неплохо. К тому же, можно, используя одно описание (шаблон) класса для нескольких физических устройств, сидящих на разной периферии. А без оптимизации даже базовый Си работает значительно медленнее. Оптимизация ведь заставляет компилятор использовать более широкий набор инструкций и иначе строить код.
  5. Пишу строку со смайликом 🙂 Новая строка начинается. Или нужен какой-то особый смайлик? 🤧 Все равно начинается новая строка. Однако, быти проблемы, когда писал со смартфона с цитатами. Там да, блок цитаты мешает вообще что-либо написать.
  6. А, ну коль хотите, можете помучаться, он вам тут про эфир-создатель Вселенной еще расскажет, про эфироны и про всякие катушки с магнитными полями Вселенной в Эфире. Только не говорите, что вас не предупреждали. 🙂 Начинается вроде бы вполне логично, но чем дальше, тем сильнее входит в разнос. Заряда хватает примерно на полтора месяца в среднем, после этого обычно забанивают его. За последующий месяц-два он немного приходит в себя, остывает, и начинает искать новую площадку для дури. И повторяется всё снова, по тому же сценарию и с одним и тем же содержанием. И всё это - на протяжении уже десятка лет. Вопсчем, мы с Точкой Опоры вас предупредили, дальше пеняйте на себя. 🙂
  7. По поводу пинов, я, почитав и перебрав разные варианты, пришел к такому: Pin<GpioA, 4>::High();, который через using CS = Pin<GpioA, 4>; преобразуется в CS::High(); Основная причина выбора такого варианта - получение максимально быстрого кода (при включенной оптимизации). То есть, не удобство для себя, а скорость работы кода. Основа - класс GpioA со статическими шаблонными методами template<uint16_t Value> static void SetPins() {} и тд, и наложенный поверх шаблонный класс template<typename TPort, int PinPos> class Pin со статическими методами static void High() { TPort::template SetPins<1 << PinPos>(); и т.д. } Протестировал - работает компактно и быстро, сворачиваясь в пределе до одной ассемблерной инструкции.
  8. Да просто этот Стогов активно проявился в инете еще лет 10 назад, бегая по многим форумам и пихая одни и те же картинки каких-то там магнитных суперполей и рассказывая как он через электронный микроскоп сфоткал их на сверхпроводниках. Ну, впрочем, он сейчас вам сам всё расскажет, это бурление говн будет надолго тут, так что готовьтесь 🙂 А мне сия срамота уже надоела до чертиков, я это видел на самых разных форумах за всё это время. ЗЫ. Для справки. 2015 год. Научно-технический форум SciTecLibrary - Опыты с магнитной жидкостью И так - постоянно, на протяжении всех этих лет. Странно, что здесь его еще не знают 🙂
  9. Да, этого Стогова надо бы сразу заблочить а то он щас начнет спамить картинкакми нанопоровых магнитных полей. Он по всем форумам скитается уже много лет, везде одну и туже чушь сует. Ну, больной человек, с психикой что-то не то у него, и давно уже.
  10. Скупой платит дважды. Тупой - трижды
  11. Можно ли включить в 220 В лампочку, на которой написано 12 В и почему? Реле с низким допустимым напряжением контактной группы может иметь небольшие зазоры и расстояния в контактной группе, которые для высокого напряжения будут недостаточны.
  12. Тонкости с упаковкой битовых полей - это еще с базового Си наследие. Там есть тоже особенности - если битовое поле в несколько бит шириной пересекает границу объявленного типа, то плотная упаковка не будет выполняться.
  13. При виртуальном наследовании: class A { int x; }; class B: virtual A { }; class C: virtual A { }; class D: B, C { }; классы B и C будут больше, чем класс A, из-за добавления таблицы виртуальных методов vtable. Виртуальное наследование позволяет в показанном случае включать класс A только один раз в класс D. Если бы этого виртуального наследования не было, то в класс D было бы включено два разных класса A - через класс B и через класс C. Это пример так называемого "ромбовидного" наследования.
  14. нет, я ж показал выше на картинке: у переменных a и b нет адреса локации. Вот еще раз. Вот куда помещается constexpr: вовнутрь ассемблерной инструкции.
  15. С другой стороны, в этом контексте auto не имеет большого смысла. auto хорошо, когда выводится возвращаемое значение функции или принимаемый в функицю параметр, или же присваивается небазовый тип, такой как итератор вектора, например auto it = vector.begin(); Хотя, сейчас попробовал - всё выводится, вот:
×
×
  • Создать...