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

AHTOXA

Свой
  • Постов

    4 033
  • Зарегистрирован

  • Посещение

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

    3

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


  1. LibreOffice 7

    Написано же: "будет доступно". Когда - неизвестно :-) Я вроде бы читал, что тему убрали потому, что некому её поддерживать/сопровождать. (А без сопровождения она не полностью соответствует имеющимся кнопкам и пунктам).
  2. Там все биты помечены как "rc_w1". То есть, очищаются записью единички, а запись нуля не меняет состояние бита.
  3. Ну, раз с вектором вроде разобрались, добавлю, что чистить прерывание нужно не так: EXTI->PR |= EXTI_PR_PR13; , а вот так: EXTI->PR = EXTI_PR_PR13;
  4. Вектор не тот. У вас же не третье, а тринадцатое прерывание.
  5. Ага, понял. Это gcc-шное расширение: Полез искать информацию про это, обнаружил, что в c++20 designated initializers таки завезут, хотя и с некоторыми ограничениями.
  6. Ух ты, круть. Я не знал про такое. Это только для объединений? (Для структур случайно не завезли? :-))
  7. Да, это почти единственная сишная фишка, которой мне не хватает в плюсах. Конкретно в этом случае можно выкрутиться, написав конструкторы для объединения: union MySuperPuperUnion { uint32_t Word; uint16_t HWord[2]; uint8_t Byte[4]; MySuperPuperUnion(uint32_t w) : Word(w){} MySuperPuperUnion(uint8_t b1, uint8_t b2, uint8_t b3, uint8_t b4){ Byte[0] = b1; Byte[1] = b2; Byte[2] = b3; Byte[3] = b4; } MySuperPuperUnion(uint16_t w1, uint16_t w2){ HWord[0] = w1; HWord[1] = w2; } }; const MySuperPuperUnion MyVal[3] = { MySuperPuperUnion(0x12,0x34, 0x56, 0x78), MySuperPuperUnion(0x1234,0x5678), MySuperPuperUnion(0x12345678), };
  8. Почему не вариант? Например, раздел "Математика и физика" не имеет расширенного описания. И ничего. Если название раздела не требует дополнительных пояснений, то зачем что-то придумывать?
  9. У CNC механика значительно массивнее. Для 3D-принтера она очень медленная будет. К тому же ход по Z обычно небольшой - тоже плохо для 3D-печати. Ну и подогрев стола непонятно как колхозить.
  10. Ну, если настроил (и сделал это правильно), то эта тема будет темой про необъяснимые явления в мире микроконтроллеров
  11. Нужно настроить wait-states в регистре FLASH_ACR. Цитата из RM:
  12. Или можно взять с сайта ST. Идёте сюда: https://www.st.com/en/microcontrollers/stm32-32-bit-arm-cortex-mcus.html, выбираете семейство, потом контроллер, выбираете вкладку Resources, и там будет секция "HW Model, CAD Libraries & SVD". Вот например для F103: https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html#resource --- Добавлю сюда вот этот репозиторий. Там не только STM-ки.
  13. Ну если вас устраивает такая (никакая) надёжность, то конечно, юзайте xor. А вообще я так и не понял, почему нельзя сразу сортировать эти числа.
  14. Причём тот, что 6 - на основе clang. Как и IAR новый (но это не точно).
  15. Говорят, что такие схемы имеют недостаток: при обрыве в цепи светодиода напряжение на электролитическом конденсаторе возрастает, и он может взорваться. Хотя для одиночного диода, запаянного в схему, это маловероятно. ЗЫ. На всякий случай: вариант с защитой от обрыва.
  16. Можно сделать в два этапа: первый этап: просто сумма. Если сумма не совпала - массивы точно разные. Если сумма совпала, то делать доп. проверку: сортировать массив и считать crc.
  17. А эти метки отсортировать сразу при сохранении нельзя? Не думаю, что это будет сильно накладно. ------- А, увидел ниже: Тогда отбой.
  18. А, я понял. Вам надо чтобы таймер считал по этим входам. Тогда не выйдет. Вот, я отметил красным:
  19. На диаграмме TIMx - это, возможно, общая для нескольких таймеров диаграмма.
  20. Скорее всего, у этого таймера просто нет четырёх входов.
  21. У, мне тоже попила кровушки эта панелька! :-) Да и до сих пор иногда попивает, когда я открываю старые воркспейсы.
  22. Если только электрики при очередном ремонте не поменяли ноль и фазу :-)
  23. Так там элементарно добавляется - в функции disk_read() добавить поиск сектора в списке сохранённых, а в disk_write() - сохранение в кэш. Я так делал, когда у меня fatfs читал карточку по UART :-) Типа: DRESULT disk_read(BYTE drv, BYTE *buf, DWORD sector, BYTE sectorCount) { if (!sectorCount) return RES_PARERR; if (disk_status(drv) & STA_NOINIT) return RES_NOTRDY; if (sectorCount!=1) // кэшируем только одиночные сектора return (sdioCore.ReadBuffer(buf, sector, sectorCount) == ERROR_NO_ERROR) ? RES_OK : RES_ERROR; if (cache.get(sector, buf)) // нашли в кэше? return RES_OK; if (sdioCore.ReadBuffer(buf, sector, sectorCount) == ERROR_NO_ERROR) { cache.put(sector, buf); return RES_OK; } return RES_ERROR; }
  24. А, это как отмашка "старт!" от клиентского кода. Теперь понял. Насколько же удобнее (привычнее для меня) в плюсах: это можно сделать функцией-членом класса sI2CTSlot. И вместо slot->bsy = I2C_TSLOT_BUSY; клиентский код вызывал бы slot->start();
×
×
  • Создать...