Jump to content

    

ViKo

Модераторы
  • Content Count

    9283
  • Joined

  • Last visited

Community Reputation

0 Обычный

About ViKo

  • Rank
    Универсальный солдатик
  • Birthday 08/20/1963

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    : Минск

Recent Profile Visitors

19726 profile views
  1. Ну, когда-нибудь... Зато я могу сразу две ножки изменить. Для того и страдал. А до этого дефайнами влегкую махал ногами без накладных расходов. Кстати, эти Pin_st в памяти МК создаются или нет?
  2. А для -O0, однако, функцию хочет вызвать. Где, возьмет, не понимаю. Нашлось в конце. ;;;56 HsAdc1_select(); 00001e bf00 NOP 000020 f7fffffe BL _ZN28_INTERNAL_8_Main_cpp_TimCapt8HsAdc_tmILb1ELb0EEEvv ; void [local to Main_cpp]::HsAdc_tm<(bool)1, (bool)0>() 000024 bf00 NOP Зачем? Главное знать интерфейс функций, которыми пользуешься. В данном случае, 4 простейших функции: HsAdc1_select(); HsAdc2_select(); HsAdc_select(); HsAdc_deselect(); Два АЦП. Выбираются по одному, оба, или не выбираются. Это на их CS идет.
  3. Pin_st <'B', 13> Adc1s_n; Pin_st <'B', 14> Adc2s_n; Получилось. Для HsAdc1_select(); HsAdc2_select(); HsAdc_select(); HsAdc_deselect(); С оптимизацией O3 имею: 00001a 480a LDR r0,|L1.68| 00001c 4908 LDR r1,|L1.64| 00001e 6181 STR r1,[r0,#0x18] 000020 ea4f4131 ROR r1,r1,#16 000024 6181 STR r1,[r0,#0x18] 000026 f04f41c0 MOV r1,#0x60000000 00002a 6181 STR r1,[r0,#0x18] 00002c 1409 ASRS r1,r1,#16 00002e 6181 STR r1,[r0,#0x18] Оно в h-файле и есть.
  4. На unsigned s1 и s2 (0, 1) тоже не может умножать inline, что ли?
  5. Ладно, с "местами" - ничья. Ваши взаимные отношения не остались без внимания общественности. Поговорили. Мне бы по моим мелким вопросикам просветиться.
  6. Спасибо всем! Меня сейчас устраивает описание, как ниже сделано. template <char port, unsigned bit> struct Pin_st { static constexpr GPIO_TypeDef *Port = port == 'A' ? GPIOA : port == 'B' ? GPIOB : port == 'C' ? GPIOC : port == 'D' ? GPIOD : port == 'E' ? GPIOE : port == 'G' ? GPIOG : GPIOH; static constexpr unsigned Bit = bit; static constexpr uint16_t Mask = 1 << bit; }; // using Adc1s_n = Pin_st <'B', 13>; // using Adc2s_n = Pin_st <'B', 14>; Pin_st <'B', 13> Adc1s_n; Pin_st <'B', 14> Adc2s_n; inline void GpioLowHigh_set(GPIO_TypeDef *port, uint16_t mask_low, uint16_t mask_high) { port->BSRR = mask_low << 16 | mask_high; } template <bool s1, bool s2> static void HsAdc_tm() { GpioLowHigh_set(Adc1s.Port, Adc1s_n.Mask * s1 | Adc2s_n.Mask * s2, Adc1s_n.Mask * !s1 | Adc2s_n.Mask * !s2); } inline void HsAdc1_select(void) { HsAdc_tm<true, false>; } inline void HsAdc2_select(void) { HsAdc_tm<false, true>; } inline void HsAdc_select(void) { HsAdc_tm<true, true>; } inline void HsAdc_deselect(void) { HsAdc_tm<false, false>; } Это все в main.h. На последние 4 выдается: Source\main.h(146): warning: #174-D: expression has no effect HsAdc_tm<true, false>; И не создаются функции в main.c, когда там использую. По паре nop вижу. Я очень плохо понимаю весь этот синтаксис. В чем ошибки?
  7. А как вы их распознаёте, PD1, PA9? Ну, как компилятор их интерпретирует?
  8. Заменил, как написал. Скомпилировалось. Не всё умеет v5.
  9. Проверил, не ругается. Но ругается на многое другое. Так что пока остаюсь на v5. Чего же там не хватает. Кажется, смогу заменить на static constexpr GPIO_TypeDef *Port = port == 'A' ? GPIOA : port == 'B' ? GPIOB : port == 'C' ? GPIOC :
  10. Погружаюсь в шаблоны. Косячу. template <GPIO_TypeDef *port, unsigned bit> struct Pin_st { static constexpr GPIO_TypeDef *Port = port; static constexpr unsigned Bit = bit; static constexpr uint16_t Mask = 1 << bit; }; using Adc1s_n = Pin_st <GPIOB, 13>; using Adc2s_n = Pin_st <GPIOB, 14>; Получаю. Source\main.h(108): error: #873: non-integral operation not allowed in nontype template argument Указатели же допускаются.
  11. Keil ARM + STM32 + C++ <vector> push_back вопрос

    http://www.keil.com/appnotes/docs/apnt_230.asp
  12. Keil ARM + STM32 + C++ <vector> push_back вопрос

    Симулятор есть.
  13. Логично выбрать за единицу времени (событий) выдачу решения коррелятором вашим. Если вероятность ложной тревоги для одного события равна 0,1 , то для двух событий будет 1 - 0,9 * 0,9 = 0,19 . И т.д.
  14. Виноват. И про баги патча, видимо, вопрос был?
  15. От вас - не ожидал. Книга Лопаткина - лучший подарок пикадчику. Вот одна опечатка для исправления: Если пройтись по темам P-CAD в данном разделе, то можно насобирать задач для коррекции P-CAD.