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

VladislavS

Свой
  • Постов

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

  • Посещение

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

    9

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


  1. Даже чистые виртуальные в итоге, к сожалению, не бесплатны. А оно нам не надо.
  2. Так я и смотрю. Ограничение есть. Когда я об него споткнусь - вопрос только времени.
  3. Там проблема с constexpr будет. Не делают так. Сейчас можно концептов навесить и фактически задать требования к интерфейсу.
  4. В плюсах всё гораздо проще. Код можно в описании класса писать прямо в заголовочных файлах. Количество единиц трансляции снижается до минимума автоматически.
  5. В данном случае всё наоборот. Память 32 бита, периферийное <32 бита. Всё одной записью обойдётся.
  6. Предать анафеме всю эту макросную муть!!!
  7. А это такая народная забава пытаться сделат всё через опу, лишь бы не использовать предназначенное для этого устройство(таймер)?
  8. Все попытки сделать импульс программно умрут вот тут Проследите путь от CPU до GPIO (он не работает на частоте CPU) и всё поймёте. А вот таймер с ШИМ то что доктор прописал.
  9. Если она в процессе работы перешивается, например. Чтобы компилятор не подумал, что там всегда нули как во время компиляции и не соптимизировал доступ к ней.
  10. А какой смысл в этом коде заложен? Зачем count связан с sizeof('a') ?
  11. Глобальная по стандарту должна инититься нулём. Все остальные нет и иар это, самом собой, не делает.
  12. У кортексов в таблице векторов прерываний есть пустые места. Идеальное место для хранения размера прошивки, crc и т.д.
  13. STM32G4 PLL

    На будущее, в кубе отличный конфигуратор системы тактирования. Не надо даже код генерить, а просто установить все делители и переключатели правильно и на их основе код написать.
  14. Бинарник должен быть разный? Тогда это и есть условная компиляция, которая делается заданием WE_ARE_RUNNING_UNDER_DEBUGGER в одной из конфигураций.
  15. Бывают программы, которые работают не благодаря, а вопреки. В них главное - не спугнуть.
  16. Он их не совмещает, а изначально формирует так как вы описали во втором абзаце вашего сообщения. Зачем? При взгляде на исходник должно быть видно ЧТО делает код, а не КАК. Часто вы кишки printf изучаете при его использовании? При такой постановке задачи и результата ноль. И выводы ложные. А реальная задача автора "мигать списком диодов". Ну это оно и есть. Именно так и делается. Именно поэтому нет совмещения volatile, а есть их оптимальное формирование.
  17. Об ошибочном заключении, что автор статьи получил сложным способом тот же результат и поэтому делать так не имеет смысла. Имеет, просто надо более сильное кунг-фу использовать, тогда результат будет лучше.
  18. Нет, я не о том как лучше ногами дрыгать. Вы неправильно поняли.
  19. Задача - помигать четырьмя диодами, приведёнными в списке. На С вы решаете сами первым или вторым способом её решать. А на С++ я просто говорю "переключи состояние всех диодов из списка". Есественно, заменить первое<=>второе он не имеет права. Но сформировать одну операцию вместо трёх для решения задачи на этапе компиляции и есть джедайство.
  20. Не нахожу. Код автора статьи (без delay, он тут ни на что не влияет) я бы написал так. using LEDS = PinList<PA_5,PC_5,PC_8,PC_9>; for(;;) LEDS::toggle(); Что для STM32 в процессе компиляции превратиться во что-то такое for(;;) { // PA5 toggle if (GPIOA->ODR & (1<<5)) *((volatile uint16_t *)&GPIOA->BSRR+1) = (1<<5); else GPIOA->BSRR = (1<<5); // PC5,PC8,PC9 toggle GPIOC->BSRR = (((1<<5)|(1<<8)|(1<<9)) << 16) | (~GPIOC->ODR & ((1<<5)|(1<<8)|(1<<9))); } Естественно не в ODR ^=, ибо это неправильно. Ну и из-под ARM Compiler v6 будет как-то так MOVS r0,#0x14 MOVW r2,#0x320 MOVW r3,#0x818 MOVT r0,#0x4800 // R0 = &GPIOA->ODR MOV r12,#0x20 MOVT r2,#0x320 MOVT r3,#0x4800 // R3 = &GPIOC->BSRR main: // if (GPIOA->ODR & (1<<5)) LDR r1,[r0,#0x00] LSLS r1,r1,#26 ITE PL // GPIOA->BSRR = (1<<5) STRPL r12,[r0,#0x04] // *((volatile uint16_t *)&GPIOA->BSRR+1) = (1<<5); STRHMI r12,[r0,#0x06] // GPIOC->BSRR = (((1<<5)|(1<<8)|(1<<9)) << 16) | (~GPIOC->ODR & ((1<<5)|(1<<8)|(1<<9))); LDR r1,[r0,#0x800] AND r1,r1,#0x320 EORS r1,r1,r2 STR r1,[r3,#0x00] B main И никто в лужу не сел, как ни странно.
×
×
  • Создать...