Efficient use of MCU memory | Tips & Tricks (Eng subs)

แชร์
ฝัง
  • เผยแพร่เมื่อ 31 ม.ค. 2025

ความคิดเห็น • 91

  • @yujinnya
    @yujinnya 14 วันที่ผ่านมา +7

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

  • @kinetic5808
    @kinetic5808 13 วันที่ผ่านมา +9

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

    • @test_profile
      @test_profile 5 วันที่ผ่านมา +1

      Ну или просто по линкеру и (или) аттрибутам. То, что не лежит на поверхности

  • @foxanderson7674
    @foxanderson7674 13 วันที่ผ่านมา +1

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

  • @ShiloXyZ
    @ShiloXyZ 13 วันที่ผ่านมา +3

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

  • @user-cu9eb9oj2v
    @user-cu9eb9oj2v 13 วันที่ผ่านมา +1

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

  • @АнтонВоробьёв-о1ч
    @АнтонВоробьёв-о1ч 14 วันที่ผ่านมา +5

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

  • @rooncayz9680
    @rooncayz9680 8 วันที่ผ่านมา

    Очень наглядно объяснили работу ОЗУ! Не смотря на то, что знаю как организована работа ОЗУ у AVR-микроконтроллеров, очень понравилась подача материала!

  • @Ayleen_Hazar
    @Ayleen_Hazar 13 วันที่ผ่านมา +3

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

  • @СергейИванов-и3в2ч
    @СергейИванов-и3в2ч 13 วันที่ผ่านมา

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

  • @DruesNot
    @DruesNot 10 วันที่ผ่านมา

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

  • @openFrimeTv
    @openFrimeTv 14 วันที่ผ่านมา +6

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

  • @m0Ray79
    @m0Ray79 13 วันที่ผ่านมา

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

  • @androidpasha
    @androidpasha 12 วันที่ผ่านมา

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

  • @Вовик-д5л
    @Вовик-д5л 13 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  13 วันที่ผ่านมา +1

      Спасибо, стараюсь! )

    • @Вовик-д5л
      @Вовик-д5л 13 วันที่ผ่านมา

      @DmitryMuravyev записывайте ещё!

  • @bubuii
    @bubuii 12 วันที่ผ่านมา

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

  • @DmitriiPimkin
    @DmitriiPimkin 14 วันที่ผ่านมา +6

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

  • @ResearchCar
    @ResearchCar 14 วันที่ผ่านมา

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

  • @Rimsky801
    @Rimsky801 10 วันที่ผ่านมา

    Очень интересно и познавательно! Спасибо 👍

  • @diyelectronics2595
    @diyelectronics2595 14 วันที่ผ่านมา +1

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

  • @enginetica
    @enginetica 10 วันที่ผ่านมา

    Интересный и полезный ролик

  • @sergeymalanichev6540
    @sergeymalanichev6540 5 วันที่ผ่านมา

    отличное видео ! спасибо

  • @foxanderson7674
    @foxanderson7674 13 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  13 วันที่ผ่านมา +1

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

    • @foxanderson7674
      @foxanderson7674 12 วันที่ผ่านมา

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

    • @squidyPet
      @squidyPet 11 วันที่ผ่านมา

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

    • @semibiotic
      @semibiotic 10 วันที่ผ่านมา

      ​@@DmitryMuravyev При рассказе про DMA, как раз можно отметить, что DMA это как раз костыль нужный фон-неймановской архитектуре, чтобы в критические моменты работать с памятью так же быстро как гарвардская архитектура (собссно, контроллер DMA это специализированный гарвардский сопроцессор в фон-неймановской системе).
      И поэтому, гарвардскому контроллеру DMA практически не нужен.

  • @erwe1054
    @erwe1054 13 วันที่ผ่านมา +10

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

    • @kalobyte
      @kalobyte 13 วันที่ผ่านมา +1

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

    • @SIM31r
      @SIM31r 7 วันที่ผ่านมา

      Ну и что? А как еще вывести красиво текст и графику на 4К экраны пользователей? Типа как DOS экране 80 строк текста и всё?

  • @sergatmel8242
    @sergatmel8242 12 วันที่ผ่านมา

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

  • @viktorvector113
    @viktorvector113 14 วันที่ผ่านมา

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

  • @localixdots9698
    @localixdots9698 13 วันที่ผ่านมา

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

  • @mikhail-tsaryov
    @mikhail-tsaryov 13 วันที่ผ่านมา

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

  • @ВладЗахарченко-х7н
    @ВладЗахарченко-х7н 14 วันที่ผ่านมา +6

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

    • @DmitryMuravyev
      @DmitryMuravyev  14 วันที่ผ่านมา +2

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

    • @ВладЗахарченко-х7н
      @ВладЗахарченко-х7н 13 วันที่ผ่านมา

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

  • @blacklion79
    @blacklion79 14 วันที่ผ่านมา +10

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

    • @nRADRUS
      @nRADRUS 14 วันที่ผ่านมา

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

    • @doodocina
      @doodocina 12 วันที่ผ่านมา

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

  • @Seriyv0lk
    @Seriyv0lk 14 วันที่ผ่านมา

    Видос огонь!

  • @vadimf6328
    @vadimf6328 13 วันที่ผ่านมา

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

  • @vadegdadeg
    @vadegdadeg 13 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  13 วันที่ผ่านมา

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

  • @denial3874
    @denial3874 10 วันที่ผ่านมา

    Дмитрий скажите пожалуйста, а какой программе вы делаете такие красивые анимации ?

    • @DmitryMuravyev
      @DmitryMuravyev  10 วันที่ผ่านมา +1

      Да в общем, любой векторный редактор подойдёт. Тут из эффектов только прозрачность, градиент (для фона) и тень. С этим любой редактор справится. А анимирую и вообще монтирую в DaVinci Resolve. По слоям. Каждый анимированный объект на слайде это отдельный слой.

  • @El_Campello
    @El_Campello 14 วันที่ผ่านมา +3

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

  • @wlkmanist
    @wlkmanist 13 วันที่ผ่านมา

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

  • @Иван_Абрамов
    @Иван_Абрамов 12 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  11 วันที่ผ่านมา +1

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

    • @Иван_Абрамов
      @Иван_Абрамов 11 วันที่ผ่านมา

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

  • @Gimli_Dwarf
    @Gimli_Dwarf 9 วันที่ผ่านมา

    Лайфхаки для писателей на С следовало указать.

  • @mega_mak
    @mega_mak 9 วันที่ผ่านมา

    В какой книге все также расписано для понимания БАЗЫ, в основе avr stm?

  • @ИванНаумов-з3т
    @ИванНаумов-з3т 13 วันที่ผ่านมา

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

  • @DyaFedya
    @DyaFedya 8 วันที่ผ่านมา

    слушайте, а есть какой ни будь задачник для изучения микроконтроллеров ?

  • @ewfreg5nythyhtewt4w
    @ewfreg5nythyhtewt4w 13 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  13 วันที่ผ่านมา +1

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

  • @Rosario_Agro
    @Rosario_Agro 14 วันที่ผ่านมา +1

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

    • @DmitryMuravyev
      @DmitryMuravyev  14 วันที่ผ่านมา

      Да!

    • @metaphysica9984
      @metaphysica9984 13 วันที่ผ่านมา

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

  • @DART2WADER
    @DART2WADER 14 วันที่ผ่านมา

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

  • @safocl9768
    @safocl9768 13 วันที่ผ่านมา

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

    • @safocl9768
      @safocl9768 13 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  13 วันที่ผ่านมา

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

    • @safocl9768
      @safocl9768 13 วันที่ผ่านมา

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

    • @safocl9768
      @safocl9768 13 วันที่ผ่านมา

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

    • @safocl9768
      @safocl9768 13 วันที่ผ่านมา

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

  • @mqhapx3697
    @mqhapx3697 13 วันที่ผ่านมา

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

  • @user-nik920
    @user-nik920 13 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  13 วันที่ผ่านมา +1

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

  • @Asmcavr
    @Asmcavr 9 วันที่ผ่านมา

    В 2025 использовать 8 бит от microchip- реально улыбает. Выбрать допотопное изделие и сетовать на ограничение памяти))). А самое веселое - еще и переплатить. Stm32 с калом время входа 3 дня. Куча плюшек нормальная цена. Я так понимаю они держатся за счет старперов которые не хотят осваивать новое))).

  • @kapitankakao6592
    @kapitankakao6592 14 วันที่ผ่านมา

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

    • @ewfreg5nythyhtewt4w
      @ewfreg5nythyhtewt4w 13 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  13 วันที่ผ่านมา

      Сам по себе компилятор упарываться в оптимизацию с понижением точности вычислений не будет. Т.е. в любом случае все вычисления, само-собой, сведутся к целочисленным. По этому поводу есть хорошая серия роликов вот тут: 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 вообще не очень лестно отзываются.
      А в остальном, да, разумеется, компилятор при возможности заменит деление умножением на обратную величину.

  • @LogicZoneNick
    @LogicZoneNick 10 วันที่ผ่านมา

    это на плюсах?

    • @DmitryMuravyev
      @DmitryMuravyev  10 วันที่ผ่านมา

      Примеры все на plain C. Ну а ардуиновские скетчи компилируются как *.ino.cpp через avr-g++.

  • @ИванКрасноярский-е3я
    @ИванКрасноярский-е3я 13 วันที่ผ่านมา

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

    • @DmitryMuravyev
      @DmitryMuravyev  13 วันที่ผ่านมา

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

    • @openFrimeTv
      @openFrimeTv 13 วันที่ผ่านมา +1

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