Efficient use of MCU memory | Tips & Tricks

Поделиться
HTML-код
  • Опубликовано: 21 янв 2025
  • НаукаНаука

Комментарии • 70

  • @kinetic5808
    @kinetic5808 2 дня назад +6

    Вашими бы устами, да полноценный курс по микроконтроллерам!..

  • @yujinnya
    @yujinnya 3 дня назад +6

    Очень удачно зашёл, а тут такое поучительное видео.
    Раз 5 придётся смотреть)

  • @openFrimeTv
    @openFrimeTv 3 дня назад +6

    очередная полезная инфа)

  • @Ayleen_Hazar
    @Ayleen_Hazar 3 дня назад +3

    Прекрасно! Это просто прекрасно! Огромное вам спасибо😊

  • @ShiloXyZ
    @ShiloXyZ 2 дня назад +3

    Рекомендации мне подкинули вас: по сегментам памяти и адресации очень хорошо рассказываете и картинки красивые. Главное что показываете примеры и линкер-скрипты. Мне в свое время пришлось все это осливать самому, сложно было найти откуда что берется.

  • @АнтонВоробьёв-о1ч
    @АнтонВоробьёв-о1ч 3 дня назад +5

    Оптимизация всегда полезный контент, ждем новых видосов

  • @androidpasha
    @androidpasha День назад

    Бесценный урок! Благодарю!

  • @m0Ray79
    @m0Ray79 2 дня назад

    Про работу кучи полезно и подробно, это хорошо.

  • @bubuii
    @bubuii День назад

    Супер, моё любимое кодокопательство. Правда я люблю ассемблер.

  • @DruesNot
    @DruesNot 4 часа назад

    Спасибо за хорошо изложенную информацию. Давно хотелось изучить тему, но как-то всё разрозненно было, а тут всё в одном)

  • @erwe1054
    @erwe1054 3 дня назад +10

    Просто возьмите микроконтроллер с большим обьемом памяти. Ваше время не такое дешевое, чтобы тратить его на оптимизацию, говорили ОНИ.
    А потом следствие этого подхода - одна вкладка браузера занимает 1.5 гига.

    • @kalobyte
      @kalobyte 2 дня назад +1

      я тут изучаю яваскрипт и понимаю, почему оно столько жрет
      оказывается в хтмл есть помимо тегов еще пробелы и знаки переноса строк кода
      так вот, это тоже объекты со свойствами
      так что надо оптимизировать даже хтмл код
      а еще нужно клепать сцайты под мобильные экраны, что тоже требует кучу атрибутов цсс фреймворка для того, чтобы сцайт выглядел тоже норм на вертикальном и горизонтальном экране
      так же у современного браузера очень много всяких апи типа доступ к батарейке, гпс, джойстикам, даже есть доступ к ком и усб портам

  • @DmitriiPimkin
    @DmitriiPimkin 3 дня назад +6

    Годный контент

  • @СергейИванов-и3в2ч

    Спасибо, очень годный контент. Хоть я все это и знал, но ваш ролик в определённый период помог бы мне сэкономить очень много времени в разборе всего этого и хождения по граблям) монтаж, звук, картинка тоже все чётко!

  • @foxanderson7674
    @foxanderson7674 2 дня назад

    Спасибо большое за видео! Не смотря на то, что длительность видоса почти час, просмотрел все на одном дыхании! Очень полезно и содержательно!

  • @user-cu9eb9oj2v
    @user-cu9eb9oj2v 2 дня назад

    Классно видеть что в ру сигменте выпускают такие классные и познавательные и главное свежие ролики

  • @Вовик-д5л
    @Вовик-д5л 2 дня назад

    ты очень крут, на хорошем уровне все сделано, и графика и содержание

  • @sergatmel8242
    @sergatmel8242 День назад

    Спасибо. !!!
    Узнал много полезного.

  • @ResearchCar
    @ResearchCar 3 дня назад

    Спасибо за видео. 👍 Особенно понравилось окончание про float

  • @foxanderson7674
    @foxanderson7674 2 дня назад

    Хотелось бы про DMA услышать и работу МК с внешней ОЗУ, понимаю, что на эту тему много информации в интернете, но у вас очень хорошо получается доходчиво, просто, и "на пальцах" объяснить суть происходящего

    • @DmitryMuravyev
      @DmitryMuravyev  2 дня назад +1

      Да, про DMA уже многие просят. Запишу себе в заметки "на подумать". Спасибо.

    • @foxanderson7674
      @foxanderson7674 День назад

      @DmitryMuravyev вас спасибо!

    • @squidyPet
      @squidyPet 16 часов назад

      Chatgpt вам в помощь. Спасибо вселенной что родарила людям ai.

  • @mikhail-tsaryov
    @mikhail-tsaryov 2 дня назад

    Супер, спасибо!

  • @diyelectronics2595
    @diyelectronics2595 3 дня назад +1

    Здравствуйте! Спасибо за лекцию!
    Сейчас начал изучать и что-то пробовать на практике в ЦОС на ARM(STM32). Послушав эту лекцию, стало интересно, есть ли какие-либо подобные лайфхаки для работы с большими массивами, циклическими массивами для быстрых преобразований Фурье. Так же интересно было-бы услышать технологию прямого доступа к памяти (DMA), Вы здесь это упомянули лишь вскользь

  • @viktorvector113
    @viktorvector113 3 дня назад

    Спасибо. Очень полезная информация

  • @ВладЗахарченко-х7н
    @ВладЗахарченко-х7н 3 дня назад +6

    Скоро ли продолжения темы рика хартли?

    • @DmitryMuravyev
      @DmitryMuravyev  3 дня назад +2

      По плану через 3 ролика. Но я теперь даже приблизительные даты выхода не ставлю себе. Сейчас очень сложно что-либо планировать...

    • @ВладЗахарченко-х7н
      @ВладЗахарченко-х7н 2 дня назад

      @ жаль, эта тема самая ожидаемая, в целом если подымать эту тему чаще то можно не плохо забустить канал, а я даже мог бы донаты покидать если эта тема будет чаще подыматься

  • @localixdots9698
    @localixdots9698 2 дня назад

    Спасибо. Скачал, пригодиться когда интернет по талонам будет)))

  • @El_Campello
    @El_Campello 3 дня назад +3

    Ох, отличный лектор. Отличная лекция.

  • @vadimf6328
    @vadimf6328 2 дня назад

    Топ контент!!!❤❤❤

  • @Seriyv0lk
    @Seriyv0lk 3 дня назад

    Видос огонь!

  • @vadegdadeg
    @vadegdadeg 2 дня назад

    Дмитрий, спасибо огромное за очень полезный материал!
    1. А что за чип на ардуинке в начале ролика между мегой и USB-UART конвертером?
    2. Очень хотелось бы чтобы вы разобрали в подобном формате распределение времени для задач, например функцию millis(); изнутри со всеми ее атомарными операциями и программные таймеры на ее основе.
    Еще раз спасибо!

    • @DmitryMuravyev
      @DmitryMuravyev  2 дня назад

      Спасибо за комментарий!
      1) В оригинальной плате это микроконтроллер ATSAMD11D14A, который одновременно выступает софтовым com-портом и прошивает АТмегу. Но тут китайский клон и я так понимаю, что они тоже поставили какой-то МК, отвечающий за прошивку (внешний бутлоадер), а мост USB-UART сделали на 340-м чипе. Но я могу ошибаться.
      2) Пока ничего такого не планировал, но спасибо за идею )

  • @ИванНаумов-з3т
    @ИванНаумов-з3т 2 дня назад

    Очень крутые видеоролики!!! Подобного контента на русском языке очень мало, вы большой молодец! Целочисленные вычисления принято называть qformat, для операций над ними написано множество библиотек, например, dsp cmsis использует их для вычислений.

  • @Иван_Абрамов
    @Иван_Абрамов День назад

    Приветствую, что с проектами блока питания и контроллера вентиляторов, очень интересные проекты, и на стыке технологий, тут и программирование и электроника, будет чего по ним, или это уже всё в прошлом?

    • @DmitryMuravyev
      @DmitryMuravyev  20 часов назад +1

      Добрый день! По БП это Nich1con ведёт проект. Насколько я знаю, он сейчас очень загружен основной работой, поэтому сложно сказать когда будет продолжение. Но у него уже много наработок по этой теме.
      Прошивку контроллера пилю. В общем, 2 последних ролика и ещё один планирующийся родились как раз из работ по прошивке. В какой-то момент понял что нужен хороший задел на следующую версию, поэтому бОльшую часть кода переделал (и ещё переделываю). Скорее всего ролика не будет, а просто я выложу ссылку на код прошивки в телеге/на бусти. Может ещё продублирую сюда в сообщество.

    • @Иван_Абрамов
      @Иван_Абрамов 19 часов назад

      @@DmitryMuravyev Спасибо, значит есть надежда на продолжение.

  • @Rosario_Agro
    @Rosario_Agro 3 дня назад +1

    А прошивка на 6 канальный контроллер вентиляторов будет?

    • @DmitryMuravyev
      @DmitryMuravyev  3 дня назад

      Да!

    • @metaphysica9984
      @metaphysica9984 2 дня назад

      ​@@DmitryMuravyevбуквально на днях закончил аппаратный контроллер на 31 вентилятор для охлаждения коммуникационых рэков. Но не на контролере, а на плис. И это была работа, целиком представляющая из себя одну огромную оптимизацию. Потому что у нас двно эти ядра в ходу, но это были контроллеры на 2-4 вента. Когда пнадобился на 31, оказалось, что плиски не хватает 4-кратно!
      Благодаря проведëнной оптимизации контроллер на N вентиляторов занял 40% плисины с потнциалом до 300 вентиляторов всë в той же самой плисине, а если добавить внешнюю RAM, потенциал ограничен только количеством свободных ног на адресацию.
      Тупое программироание в лоб - это прямой путь к альцгеймеру и пустому вращению капитала, разоряющему конечного пользователя.

  • @ewfreg5nythyhtewt4w
    @ewfreg5nythyhtewt4w 2 дня назад

    а vscode не пробоали под линукс? вот думаю чем бы платный clion заменить

    • @DmitryMuravyev
      @DmitryMuravyev  2 дня назад +1

      Пока только для C# ну и первый пример я в нём разбираю, но компилировал руками. Недавно решился рабочий ноут на Кубунту перевести, пока ещё осваиваюсь ))

  • @wlkmanist
    @wlkmanist 3 дня назад

    Мне оказались интернсны продвинутые макросы по progmem. Интересно узнать еще за области памяти и как ими я могу воспользоваться. Еще было бы круто исполнять код из оперативной памяти, пару моих проектов ожили бы.

  • @ИванКрасноярский-е3я

    У гайвера есть статья на сайте про оптимизацию кода и эти битовые сдвиги, стоило упомянуть

    • @DmitryMuravyev
      @DmitryMuravyev  2 дня назад

      Не попадалась мне. Я только его статью о progmem видел. Ссылку в описании оставил.

    • @openFrimeTv
      @openFrimeTv 2 дня назад +1

      так уже компиляторы сами преобразуют деление в сдвиги. и разницы в коде нету)

  • @DART2WADER
    @DART2WADER 3 дня назад

    Интересно, а если фиксточку через класс и перегрузку операторов сделать. Или нетипизированные шаблоны на крестах изваять.

  • @safocl9768
    @safocl9768 2 дня назад

    42:51 -- тут как минимум двоекратное UB (неопределённое поведение):
    1. на 93 строке кода -- запись в память, которая не принадлежит тебе
    2. на 92 строке кода -- с чего взято, что "p" будет имено в нужном расположении в адресном пространстве (мапинг может произойти как угодно в любую точку адресного пространства исполняемого кода)? И неизвестно что вообще будет когда заполнение дойдёт до самой перменной "p" когда будет затирать "магическими данными" непринадлежащую тебе память.

    • @safocl9768
      @safocl9768 2 дня назад

      а если взять затирание многобитными значениями -- то вообще достаточно легко перезатрёт и initialTopStack...
      Вообще конечно когда UB в коде размышлять про такое не имеет смысла -- что произойдёт на самом деле -- но пофантазировать можно )))

    • @DmitryMuravyev
      @DmitryMuravyev  2 дня назад

      1. Это пример для AVR (даже не для megaTinyCore). Тут ничего никуда не мапится, нет RTOS, так что могу позволить себе некоторые вольности. Чуть подробнее (для STM) вот в этой статье можно почитать: habr.com/ru/articles/443030/
      2. Да, было опасение, что "p" будет не в топе стека. Но, нет, всё норм, она в топе. InitialTopStack вообще в bss, т.е. под кучей. И под другими переменными. Для слов/двойных слов, понятно, надо будет делать "зазор" на доп. байты в условиях.

    • @safocl9768
      @safocl9768 2 дня назад

      @@DmitryMuravyev для с++ нет разницы -- какая архитектура -- есть UB и компилятора не должно волновать остальное другое -- тоесть даже компилятор может сделать программу вполне себе как ему вздумается в таком случае.

    • @safocl9768
      @safocl9768 2 дня назад

      сейчас это может работать -- завтра нет...

    • @safocl9768
      @safocl9768 2 дня назад

      @@DmitryMuravyev в примере на хабре тоже UB -- не стоит копировать такое и распространять под видом действенного -- оно работает скорее всего поскольку компилятор так решил в тот конкретный момент -- любые изменения в настройках компилятора, версии компилятора, чего либо еще могут координально изменить программу. Формально с точки зрения языка программирования тут UB -- дальнейшие размышления тупо потрындеть -- они не имеют никакого смысла

  • @mqhapx3697
    @mqhapx3697 2 дня назад

    Норм концентрат)

  • @blacklion79
    @blacklion79 3 дня назад +8

    Смешно сначала говорить про АВР и Ардуину а потом сетовать что ARM Cortex-M0 «старый».

    • @nRADRUS
      @nRADRUS 3 дня назад

      специально просто хочет навредить новичкам, чтобы уменьшить их эффективность труда

    • @doodocina
      @doodocina День назад

      @@nRADRUSкакая эффективность труда? новички не должны трудиться, они в песке пусть нормальным практикам обучаются.

  • @user-nik920
    @user-nik920 2 дня назад

    С достаточной точностью Пи можно вычислить как 22/7

    • @DmitryMuravyev
      @DmitryMuravyev  2 дня назад +1

      Тут основная мысль в том, чтобы делитель был степенью двойки. Тогда можно делить сдвигом вправо.

  • @kapitankakao6592
    @kapitankakao6592 3 дня назад

    47:00 Пожалуйста не делайте так, современные компиляторы прекрасно умеют делить на константу, используя почти те же приемы.

    • @ewfreg5nythyhtewt4w
      @ewfreg5nythyhtewt4w 2 дня назад

      а компилятор дает такие гарантии вообще?

    • @DmitryMuravyev
      @DmitryMuravyev  2 дня назад

      Сам по себе компилятор упарываться в оптимизацию с понижением точности вычислений не будет. Т.е. в любом случае все вычисления, само-собой, сведутся к целочисленным. По этому поводу есть хорошая серия роликов вот тут: www.youtube.com/@%D0%91%D0%B5%D1%81%D0%B5%D0%B4%D1%8B%D0%BE%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8-%D0%B45%D0%B6/videos
      Там больше про длинную арифметику, но получить обзорное представление о теоремах и методах вполне себе можно (кстати, этот чувак сейчас коуч по успешному успеху... а хотел ведь заниматься математикой и программированием. Вот что делает с людьми нехватка лайков и подписчиков))).
      Т.е. у меня речь идёт о преднамеренном загрублении точности в пользу объёма кода. Можно ключами компилятора отчасти добиться такого же эффекта. Например, при помощи ключа -ffast-math. Результаты в случае с моим примером такие (по объёму получившегося бинарника):
      float: 3662
      float (ffast-math): 3336
      uint16_t: 2504
      Вполне допускаю, что на свежих версиях GCC результаты будут получше, надо проверять. Если знаете какими ещё ключами можно (при прочих равных) загрубить работу с float и получить меньший объём кода - напишите, буду очень благодарен!
      Вот ещё свежая переводная статейка на тему: habr.com/ru/articles/868600/
      Там о GCC вообще не очень лестно отзываются.
      А в остальном, да, разумеется, компилятор при возможности заменит деление умножением на обратную величину.