Jump to content

    

AHTOXA

Свой
  • Content Count

    3572
  • Joined

  • Last visited

Community Reputation

0 Обычный

1 Follower

About AHTOXA

  • Rank
    фанат дивана
  • Birthday 09/04/1970

Контакты

  • Сайт
    https://antongus.github.io

Информация

  • Город
    Уфа

Recent Profile Visitors

12167 profile views
  1. Может быть много чего, но в стартовом посте явно указан STM32F103C8. Так что ваша придирка мимо кассы.
  2. Вы про A12? И в LQFP64, и даже в LQFP48 есть эта нога. А, понял. Вы думали, что это номер ноги. Нет, это нога 12 порта A. Которая USB D+.
  3. Тогда надо ручками: * при старте инициализируете ногу A12 как выход, переводите в 0 и ждёте немножко * потом переключаете A12 в ANALOGINPUT, и вызываете инициализацию USB.
  4. Дескриптор-то остался, и его (и связанные с ним ресурсы) надо вернуть в систему. Так что вполне логично и правильно вызвать CloseHandle() для порта, который отвалился. Надо схему смотреть. Насколько я помню, у F103 нет встроенной подтяжки USB, и приходится делать внешнюю. Схемы бывают разные, с транзисторами и без. И в некоторых случаях приходится предпринимать специальные действия в программе, чтобы вызвать ре-енумерацию.
  5. Да, это называется не-типовой параметр шаблона. Я же правильно понимаю, что у вас эта функция вызывается один раз в программе, с константным параметром? И вы хотите проверить то, что параметр находится в заданных пределах во время компиляции? Тогда эта функция подходит. Или можно сделать шаблонную структуру с константным членом: template <unsigned busFreq> struct FreqCalculator { static_assert(busFreq < 400, "Bus freq too high"); static constexpr unsigned ahbFreq { busFreq }; static constexpr unsigned apb1Freq { busFreq / 2 }; static constexpr unsigned apb2Freq { busFreq }; } И потом, где-то в общем заголовочном файле: using CpuFreq = FreqCalculator<200>; и использовать в любом месте: auto freq = CpuFreq::apb1Freq;
  6. А у вас точно 12 вольт ШИМ? Не 24?
  7. Вот придумали проблему. Поставьте новую турбинку, и всё. У всех устройств вероятность брака ненулевая. А у китайских дешёвых устройств эта вероятность побольше. Я вот себе купил сразу 5 турбинок, по цене одной здесь. И теперь могу быть спокоен:)
  8. Можно использовать шаблонную функцию: template <uint8_t i> uint8_t HMCAD_Cgain_dB() { static_assert(i<12, "gain too big!"); return i; } Применять так: uint8_t gain = HMCAD_Cgain_dB<11>();
  9. Немного разовью. static_assert - это проверка времени компиляции. Поэтому проверять оно может только значения, вычисляемые во время компиляции. Переменная constexpr - гарантированно вычисляется во время компиляции. Поэтому такая конструкция будет работать всегда: constexpr int bufferSize = sizeof(SomeStruct)/sizeof(int); static_assert(bufferSize < 20); Вы же пытаетесь вставить static_assert в функцию. Даже если эта функция constexpr, она может быть вызвана во время выполнения программы, поэтому внутри функции проверка её параметра при помощи static_assert() не срабатывает. Выход - присвоить результат выполнения constexpr-функции constexpr-переменной и проверить значение этой переменной.
  10. Вы ещё раз перечитайте мой ответ:)
  11. Дело в том, что constexpr-функция может вызываться и во время выполнения, как обычная функция. То есть, вполне допустим вызов auto i = getUserInput(); HMCAD_Cgain_dB(i); Так что компилятор ругается правильно. Вы можете проверить результат вызова функции, присвоив его constexpr-переменной: static constexpr uint8_t gain = HMCAD_Cgain_dB(11); static_assert(gain <= 12, "Gain in dB is too large");
  12. В c++ переменные, объявленные const, по умолчанию имеют внутреннее связывание. Поэтому в том случае, когда вы объявляете const int x = 3; в *.h файле, то можете смело включать его в любое количество cpp файлов. Это будет примерно аналогично тому, если бы вы в каждом из cpp файлов объявили свою статическую переменную. В си не так.
  13. Раньше у ST был документ по совместимости периферийных модулей, назывался AN3364 "Migration and compatibility guidelines for STM32 microcontroller applications". Сейчас на сайте ST-шном его нет, но в интернете ещё можно найти, например здесь. Вероятно, ST его замучились поддерживать и бросили. ЗЫ. Если не сможете скачать, напишите, я выложу.
  14. https://ru.wikipedia.org/wiki/Двоичный_интерфейс_приложений Добавлю, что, на мой взгляд, можно этот термин не переводить, потому что ABI - вполне сложившийся термин, такой же как GUI, API.
  15. scmRTOS / AVR / GCC / Linux mint / Eclipse Ошибки

    Похоже, что у вас компилируется в режиме Си, а не C++. Какой компилятор вызывается?