Михаил Копычев
Михаил Копычев
  • 66
  • 77 885
Взаимодействуем с Visual Studio Code и GitHub
Разбираемся с преимуществами среды разработки (которая таковой не является) Visual Studio Code и системы контроля версий git в лице GitHub. VSCode - это незаменимый инструмент, если вы хотите программировать AVR микроконтроллеры, но у вас нет компьютера с Windows, а также если вы просто хотите использовать среду разработки, которая помогает вам лучше узнать про AVR-GCC и AVRDude, а также подталкивает вас писать код более грамотно (с разбивкой на файлы и вот это всё). Git - незаменимый инструмент, если вам необходимо писать код не в одиночку или вы просто хотите удобно пользоваться несколькими компьютерами для своего программирования.
Тайм-коды:
00:00 Введение
00:05 Что есть Visual Studio Code?
01:20 Интерфейс VSCODE
06:06 Утилиты для программирования AVR
08:08 Компилятор AVR-GCC, прошивальщик AVRDude и репозитория Homebrew
09:46 Как пользоваться Homebrew (для macOS и Linux)
12:16 Опиши AVR-GCC и AVRDude
12:42 Расширения VSCODE - AVR Helper
14:22 Расширения VSCODE - Serial Monitor и C/C++ Extension Pack
15:25 Моя первая программа в VSCODE для AVR
20:30 Система контроля версий git и GitHub
22:30 Базовые команды git
25:35 Мой первый репозиторий в GitHub
28:19 Коммитим и пушим (commit and push) изменения в коде в GitHub
30:31 Подготовка к пулу (pull) изменений в коде из GitHub
32:40 Разбираемся с задачами (issues) и ветками (branches)
34:40 Слияние веток (merge)
36:05 Действия на локальном компе после слияния веток в GitHub
36:31 Немного про место git в процессе разработки
zhlédnutí: 1 171

Video

Указатели, структуры и разбивка кода на файлы
zhlédnutí 1,3KPřed 8 měsíci
Разбираемся с такими сущностями в языке СИ, как указатели, структуры, а также разбиваем код на отдельные файлы, что позволит нам вывести наше программирование на новый уровень удобства и красоты. Тайм-коды: 00:00 Введение 00:09 Указатели в СИ 04:04 Пример применения указателей 10:25 Структуры в СИ, объявление структур 16:53 Указатели на структуры 19:42 Стрелочный оператор в указателях на структ...
ШИМ на таймере
zhlédnutí 708Před 8 měsíci
Рассмотрим такой модуль внутри МК как таймер-счётчик. У него есть много особенностей, но нас будет интересовать в основном его способность к ШИМ-модуляции сигнала. ШИМ-модуляция - это способ кодирования аналогового сигнала с помощью дискретных импульсов постоянного периода, но переменного коэффициента заполнения. Тайм-коды: 00:00 Введение 00:27 Что такое таймер-счётчик? 02:40 Счётный регистр TC...
Внешние прерывания в МК
zhlédnutí 567Před 8 měsíci
Разбираемся с системой прерываний в AVR на примере внешних прерываний. Источником сигнала внешнего прерывания в данном случае выступит кнопка. Рассмотрим регистры настройки внешних прерываний, функции-обработчики прерываний и примеры. Тайм-коды: 00:00 Введение 00:24 Определение прерываний 02:40 Источники сигнала прерываний 03:56 Базовые вектора (источники) прерываний 05:33 Определение кнопки 06...
Плёночная механическая клавиатура
zhlédnutí 305Před 8 měsíci
В этом видео разбираемся как работает механическая клавиатура, боремся с эффектом дребезга контактов, пишем алгоритм опроса клавиатуры и вывода цифр (и значков) на символьный жидкокристаллический дисплей. Делаем скромные попытки написать свой собственный калькулятор с одним математическим действием. Тайм-коды: 00:00 Введение 00:14 Что ты такое - кнопка? 03:16 Схема соединений кнопок клавиатуры ...
Жидкокристаллический символьный дисплей
zhlédnutí 610Před 9 měsíci
Разбираемся, что можно сделать с LCD экраном на плате со своим собственным микроконтроллером, подключённым к Atmega по параллельному порту. Посмотрим и разберём схему подключения, напишем функции для инициализации контроллера дисплея, посылки команды и ASCII кодов символов на дисплей. Немного бросим взгляд на работу с указателями, когда будем работать со строками. Тайм-коды: 00:00 Введение 00:0...
Звуковой динамик и RGB светодиод
zhlédnutí 306Před 9 měsíci
Разберёмся, как работает и как подключается к микроконтроллеру звуковой излучатель и RGB светодиод. Напишем программу для вывода слова с использованием азбуки Морзе и световой индикации. Тайм-коды: 00:00 Введение 00:08 Схема подключения динамика и RGB диода 02:28 Сигнал на динамик 04:13 Азбука Морзе 05:41 Трёхцветный светодиод 06:39 Вырабатываем с потенциометра ШИМ на диоде в Proteus 12:26 Прог...
Шаговый двигатель
zhlédnutí 538Před 9 měsíci
Рассказывается про устройство, подключение и управление вращением ротора шагового мотора. Рассказывается про драйвер управления шаговым мотором и про режимы его работы. Тайм-коды: 00:00 Введение 00:05 Применение шаговых моторов 01:51 Схема подключения шаговика 04:55 Режимы работы шаговика 08:49 Алгоритм программы 11:13 Моделириуем мотор в Proteus 13:17 Программный код для полушагового режима 19...
Светодиодная матрица
zhlédnutí 633Před 10 měsíci
В видео рассказывается про работу со светодиодными сборками типа матрицы. Рассказывается процедура программирования через параллельный порт микроконтроллер, а также - описывается процесс вывода информации на матрицу посредством протокола TWI, но для этого нужна не просто светодиодная матрица, а матрица с драйвером, обеспечивающим общение по TWI. Тайм-коды: 00:00 Введение 00:11 Применение светод...
Семисегментные индикаторы
zhlédnutí 831Před rokem
В видео рассказывается про работу с семисегментными индикаторами как с устройствами вывода цифро-буквенной информации. Рассматриваются способы подключения индикаторов к микроконтроллеру и о способах программирования, включая процедуру передачи данных по протоколу SPI. Тайм-коды: 00:00 Введение 00:04 Применение семисегментников 00:52 Устройство семисегментника 03:12 Схема включения семисегментно...
Цифровая реализация систем автоматического управления
zhlédnutí 1,4KPřed rokem
Рассматривается реализация САУ на микроконтроллере. Раскрывается понятие САУ, зачем оно существует. Даются подробности о ПИД-регуляторе, об их настройке и особенностях. Приводится пример регулирования левитации магнитного подвеса с программным кодом. Тайм_коды: 00:00 Введение 00:19 Что такое "система управления"? 03:44 Примеры САУ (шар на столе) 07:06 ПИД-регулятор 09:36 Пропорциональный коэффи...
Протокол обмена данными 1-Wire (Microlan)
zhlédnutí 1,9KPřed rokem
В лекции рассматривается протокол обмена данным 1-Wire или Microlan и его программная реализация. Зрителю даётся представление о структуре и характеристиках этого протокола, рассматриваются его отличия и особенности по сравнению с протоколами, рассмотренными ранее. Приводятся примеры применения этого протокола, а также приводится конкретный программный пример общения с датчиком температуры/влаж...
Протокол обмена данными UART
zhlédnutí 5KPřed rokem
В лекции рассматривается протокол обмена данным Universal Asynchronous Receiver/Transmitter - UART и его аппаратная реализация. Рассматриваются правила обмена данными, регистры AVR микроконтроллера, ответственные за работу протокола, а также примеры применения данного протокола. В конце лекции даётся общее представление о более общем проколе обмена - USART. Тайм-коды: 00:00 Введение 00:11 Описа...
Протокол обмена данными SPI
zhlédnutí 1,5KPřed rokem
В лекции рассматривается протокол обмена данным Serial Peripheral Interface - SPI, в частности - его программная и аппаратная реализации. Рассматриваются правила обмена данными, регистры AVR микроконтроллера, ответственные за работу протокола, а также примеры применения данного протокола. Тайм-коды: 00:00 Введение 00:10 Аппаратный уровень SPI 03:00 4 режима работы SPI 05:53 Датчик температуры T...
Введение в протоколы обмена данными, I2C / TWI протокол
zhlédnutí 2,3KPřed 2 lety
Лекция вводит понятие "протокола обмена данными" между микроконтроллером (микроконтроллерами) и периферийными устройствами. Протокол - это способ кодирования сообщений между ведущим и ведомым устройством, которые могут передаваться по ограниченному количество проводов. Работа с каждым устройством, работающим на том или ином протоколе обмена должна рассматриваться отдельно, так как упомянутые вы...
Работа с датчиками расстояния
zhlédnutí 878Před 2 lety
Работа с датчиками расстояния
Работа с сервомашинками
zhlédnutí 1,1KPřed 2 lety
Работа с сервомашинками
Аналоговый компаратор AVR микроконтроллера
zhlédnutí 1,4KPřed 2 lety
Аналоговый компаратор AVR микроконтроллера
Таймеры/счётчики AVR микроконтроллера
zhlédnutí 4,2KPřed 2 lety
Таймеры/счётчики AVR микроконтроллера
Встроенный АЦП AVR микроконтроллера
zhlédnutí 2,1KPřed 2 lety
Встроенный АЦП AVR микроконтроллера
Система прерываний AVR микроконтроллера (инкрементальный энкодер)
zhlédnutí 2,3KPřed 2 lety
Система прерываний AVR микроконтроллера (инкрементальный энкодер)
Цифровые регистры ввода/вывода AVR микроконтроллера
zhlédnutí 4,3KPřed 2 lety
Цифровые регистры ввода/вывода AVR микроконтроллера
Вспоминаем язык СИ
zhlédnutí 3,2KPřed 2 lety
Вспоминаем язык СИ
Введение в AVR микроконтроллеры
zhlédnutí 8KPřed 2 lety
Введение в AVR микроконтроллеры
Введение в курс программирования микроконтроллеров
zhlédnutí 3,2KPřed 2 lety
Введение в курс программирования микроконтроллеров
Lab #5. Genetic search algorithms
zhlédnutí 185Před 3 lety
Lab #5. Genetic search algorithms
ЛР №5 Генетические алгоритмы поиска
zhlédnutí 372Před 3 lety
ЛР №5 Генетические алгоритмы поиска
Л.16. Таймеры AVR + ШИМ для ДПТ
zhlédnutí 1KPřed 3 lety
Л.16. Таймеры AVR ШИМ для ДПТ
Л.15. Прерывания AVR + символьный дисплей
zhlédnutí 723Před 3 lety
Л.15. Прерывания AVR символьный дисплей
Lab #4. Adaptive+modal control for double-mass resilient electromechanical plant
zhlédnutí 211Před 3 lety
Lab #4. Adaptive modal control for double-mass resilient electromechanical plant

Komentáře

  • @user-tv3wn4df5r
    @user-tv3wn4df5r Před měsícem

    Почему в .h файлах не пишется определение функций? Какой смысл переписывать одно и то же в .с?

    • @michael_mmk
      @michael_mmk Před 19 dny

      Основное назначение хедера - это чтобы его содержимое было вставлено на место include, где он вызывается. Хедер не компилируется, а си-файл - компилируется, оттого и нужно тела функций прописывать не в хедерах, а в исходных файлах. Header файлы удобны тем, что их можно перетаскивать из проекта в проект и легко модифицировать в связке с исходным файлом.

  • @amaxar7775
    @amaxar7775 Před měsícem

    Классные видосы, все подробно и понятно, но все же обычно стоит отделять какие-то объективно правильные вещи и собственные предпочтения с привычкми. Например, в заголовочнике прямо несколько раз было подчеркнуто "правило", что и как надо писать после #define и #ifndef, но на самом деле нет такого правила, и есть разные "стили" того, как это оформлять.

  • @user-rs9xb8nk5k
    @user-rs9xb8nk5k Před měsícem

    Прошу прощения - САУ- это система автоматизированного( а не автоматического) управления.

  • @denispanarin
    @denispanarin Před 2 měsíci

    Я таки не понял Uart это протокол или интерфейс?

    • @michael_mmk
      @michael_mmk Před měsícem

      Правила, по которым вы обмениваетесь данными (типа - количество бит, количество стопов, скорость, порядок бит в посылке) - это протокол UART, а вот то, «по чему» обмен осуществляется (например - CH340G, RS-…) - это интерфейс. Интерфейс, вроде как принято считать, материальным, а протокол - это неосязаемые правила.

  • @denvas9551
    @denvas9551 Před 2 měsíci

    Смысл эту тягомотину разводить? Главное оснований принцип. Всё равно никто всё не запомнит А назначение битов регистров и свойства в даташите.

  • @ecstasy3701
    @ecstasy3701 Před 2 měsíci

    Спасибо за труды!

  • @ecstasy3701
    @ecstasy3701 Před 2 měsíci

    Почему так мало лайков?

  • @ecstasy3701
    @ecstasy3701 Před 2 měsíci

    Просто браво!!! Спасибо за труды!!!

  • @mz9zn
    @mz9zn Před 2 měsíci

    Я одного не пойму, как устройства отличают, передаёт мастер "1" или он передаёт запрос на чтение, если обе команды выглядят абсолютно одинаково?

    • @michael_mmk
      @michael_mmk Před 2 měsíci

      Мастер управляет потом данных на линии. Если мастер хочет получить от подчиненного информацию, то предварительно мастер отсылает на него байт чтения. В рассмотренном примере, подчиненное устройство сразу начинает слать байты, оно просто больше ничего не умеет, как только произошел сигнал сброс-присутствие, DHT11 (или DHT22) "неуправляемо" начинают слать байты. На программном уровне же протокол 1-wire устроен несколько более сложно и в нём есть стандартные (а также индивидуальные для каждого устройства) команды - байты данных, с помощью посылки которых мастер переводит слейва в состояние приема или отправки информации. Вот тут об этом есть подробнее: avr.ru/beginer/understand/1wire?ysclid=lxq0dwxnai70797933.

  • @Shizaracing
    @Shizaracing Před 3 měsíci

    Большое спасибо, давно искал подобный контент. Однозначно подписка!

  • @amankz9486
    @amankz9486 Před 3 měsíci

    Здравствуйте Сколько стоит полный курс?

    • @michael_mmk
      @michael_mmk Před 3 měsíci

      Здравствуйте. Честно говоря, весь курс (даже два) выложены на канале и доступны бесплатно.

  • @user-xf5pz8fz4y
    @user-xf5pz8fz4y Před 5 měsíci

    ⁸8⁸8⁸

  • @setevoi1
    @setevoi1 Před 5 měsíci

    Подскажите пожалуйста, есть проект с FreeRTOS в котором много задач в том числе с LWIP. для веб интерфейса. Не удается корректно заставить работать 1wire в этом проекте пробовал варианты с DMA+UART с UART + прерывание и т д пока либо 1wire живет нормально, либо веб интерфейс. Какой вариант реализации 1wire правильный в такой ситуации?

  • @myvin2887
    @myvin2887 Před 5 měsíci

    Насчёт подтягивания к питанию и помех не понял тему. Всегда думал что: - проще на старых архитектурах т.к. там pull мощнее push-a; - внутренняя подтяжка, если есть, то к питанию.

    • @michael_mmk
      @michael_mmk Před 5 měsíci

      Есть такое мнение, что когда у вас помеха аддитивная (то есть на цифровой сигнал нуля «накладывается» сигнал единицы), в этом случае, подтяжка к питанию предпочтительнее, потому как бОльшую часть времени сигнал будет в высоком состоянии, а в непродолжительном активном состоянии - в низком.

  • @user-gw1pj7fh7q
    @user-gw1pj7fh7q Před 5 měsíci

    А можете показать как подключить дисплей по I2C я имею в виду код на си? Спасибо за ваши обучающие видео 👍

  • @user-jl4pq5ib7f
    @user-jl4pq5ib7f Před 6 měsíci

    Вроде бы в c массив заканчивается NULL (после последнего элемента резервируется еще 1 байт), поэтому можно не передавать длину. Поправьте, если не прав

    • @michael_mmk
      @michael_mmk Před 6 měsíci

      Когда я передаю массив в функцию, я могу передать только адрес его первого элемента (указатель на массив) и в этом случае, у функции нет шансов узнать сколько байт занимает массив, поэтому мне нужно передать ещё и его длину, иначе есть шанс влезть в область памяти, не касающуюся интересующего нас массива. Массив типа строка заканчивается признаком конца строки ‘\0’, а массив вещественных чисел не имеет признака конца, насколько мне известно.

  • @user-jl4pq5ib7f
    @user-jl4pq5ib7f Před 6 měsíci

    Зачем нужен command byte? Он всегда 1 или это указание на инструкцию?

    • @michael_mmk
      @michael_mmk Před 6 měsíci

      Command byte в случае рассматриваемого датчика - это адрес его конфигурационного регистра, куда мы пишем настройки датчика температуры. В общем же случае - после старта и адреса слева, согласно методике TWI протокола, по линии мастером всегда передается адрес регистра слейва (этих регистров может быть больше одного, например у гироскопа-акселерометра mpu6050 их чёртова уйма), куда мастер будет писать биты (если выставлен признак записи после адреса слейва) или откуда будет читать биты (если выставлен признак чтения после адреса слейва). Короче в данном случае command byte - это либо конфигурационный регистр датчика температуры, либо предельные значения температуры, на которые должен срабатывать датчик. Вот, надеюсь, что стало немного понятнее.

    • @michael_mmk
      @michael_mmk Před 6 měsíci

      Command byte в случае рассматриваемого датчика - это адрес его конфигурационного регистра, куда мы пишем настройки датчика температуры. В общем же случае - после старта и адреса слева, согласно методике TWI протокола, по линии мастером всегда передается адрес регистра слейва (этих регистров может быть больше одного, например у гироскопа-акселерометра mpu6050 их чёртова уйма), куда мастер будет писать биты (если выставлен признак записи после адреса слейва) или откуда будет читать биты (если выставлен признак чтения после адреса слейва). Короче в данном случае command byte - это либо конфигурационный регистр датчика температуры, либо предельные значения температуры, на которые должен срабатывать датчик. Вот, надеюсь, что стало немного понятнее.

  • @theall-seeingeye3973
    @theall-seeingeye3973 Před 7 měsíci

    Благодарю за видео! По моему мнению, лекция не для новичков. Но мне, как уже кое-что понимающему, было приятно послушать грамотное объяснение и получше уложить все эти вещи в голове

  • @alekskapitonov2738
    @alekskapitonov2738 Před 7 měsíci

    Спасибо большое.

  • @DIY-dt8ui
    @DIY-dt8ui Před 7 měsíci

    Спасибо

  • @anatoliyv5607
    @anatoliyv5607 Před 7 měsíci

    вообще четкие уроки и без воды, я за час стал программистом мк

  • @danceforlife7
    @danceforlife7 Před 7 měsíci

    LPT - это параллельный порт, а не последовательный.

  • @user-gw1pj7fh7q
    @user-gw1pj7fh7q Před 7 měsíci

    Скажите пожалуйста все сделал как на видео все компелируется но в папках не могу найти хекс файл ?

    • @michael_mmk
      @michael_mmk Před 7 měsíci

      Перейдите в настройки VSCODE (иконка шестеренки слева внизу в интерфейсе), в строке поиска наберите avr helper, это приведёт вас к настройкам соответствующего расширения. В настройках найдите AVR > HEX > Dump: Enabled и поставьте в этом пункте отметку. Теперь при сборке проекта в папке Build будет создаться output.hex файл.

    • @user-gw1pj7fh7q
      @user-gw1pj7fh7q Před 7 měsíci

      @@michael_mmk да спасибо все получилось

    • @user-gw1pj7fh7q
      @user-gw1pj7fh7q Před 7 měsíci

      @@michael_mmk А не могли бы ли вы сделать видео как в проект добавлять сторонние библиотеки ?

  • @Timur_Kan
    @Timur_Kan Před 8 měsíci

    По генетическим алгоритмам у Дмитриевича диплом защищал в 2008 году на САПРе :)

  • @user-gw1pj7fh7q
    @user-gw1pj7fh7q Před 8 měsíci

    Да это не для среднего ума но за урок однозначно 👍

  • @alexanderpoint7434
    @alexanderpoint7434 Před 8 měsíci

    Добавьте ссылку на скачивание AVRDUDE, пожалуйста

  • @user-fw7sq9sj5k
    @user-fw7sq9sj5k Před 8 měsíci

    Очень полезная инфа, для меня так точно, пользуюсь Visual Studio, так как пишу проги на С++, но для Arduino пишу на IDE. Писать всё в одной среде будет удобней. 👍😁

  • @Maximko23life
    @Maximko23life Před 8 měsíci

    Михаил здравствуйте. Спасибо😊

  • @DevilByte
    @DevilByte Před 8 měsíci

    А где должен крутиться цикл for для перебора канала?

    • @michael_mmk
      @michael_mmk Před 8 měsíci

      Наверное, можно этим циклом for(i = 0…7) обернуть функцию readAdc(i); Ещё - можно сделать прерывание от ацп и когда прочитан один канал, класть номер следующего канала в младшие биты регистра ADMUX.

    • @DevilByte
      @DevilByte Před 8 měsíci

      @@michael_mmk В общем вчера мучался, по итогам сделал функцию adcread(uint8_t channel) с переменной восьмибитной, в нее запихнул запуск преобразования, ожидание окончания и чтение результата. а уже в майне просто создал переменный соответствующие каналам adcresult1=adcread(1) и так со всеми каналами, и просто вывожу их на дисплей, незнаю насколько это правильно или быстродейственно. пока только начла изучать все. Осталось только прилететь домой и в железе проверять. Пилите еще ролики! у вас очень классный материал! если бы у вас был фулл курс я бы купил его!

  • @alekskapitonov2738
    @alekskapitonov2738 Před 8 měsíci

    Спасибо!

  • @MSaidu-sj6vx
    @MSaidu-sj6vx Před 8 měsíci

    Теперь вопрос: списки, кортежи и деревья будут рассмотрены? А то все, как партизаны на допросе, молчат.

    • @michael_mmk
      @michael_mmk Před 8 měsíci

      К сожалению, пока не планируется. Но если я освою материал до такой степени, что смогу о нём рассказать и объяснить - то запишу.

  • @MSaidu-sj6vx
    @MSaidu-sj6vx Před 8 měsíci

    Вот, единственный, кто НОРМАЛЬНО объяснил!!! Сам я до этого дошёл не сразу, разжевать никто не мог. А тут всё понятно и ежу. 👍👍👍👍👍

  • @user_lis
    @user_lis Před 8 měsíci

    Спасибо, огромное. Всё очень понятно. Продолжайте, пожалуйста, лекции записывать. Всегда их очень жду

  • @Русь-Родина
    @Русь-Родина Před 8 měsíci

    Куда ты спешишь? На СВО? 100 плетей заслужил, как минимум, за свое бестолковое изложение материала. Работы непочатый край. А они ходят с растопыренными пальцами, типа вченные великие и ересь несут, даже не задумываясь над этим. Их так учили - они оправдываются. Но это не оправдание, а констатация факта, что своей головой эти типа самые грамотные, берущиеся учить других, думать не умеют.

  • @some_alias
    @some_alias Před 8 měsíci

    Первые 3/4 видео очень хорошо изложены, спасибо. А вот начиная с "Разбивки программы на файлы" слишком беглое (на мой взгляд) объяснение. Я лично не совсем понял что значит "защита от двойного подключения". Можно ли продемонстрировать это на примере куска кода?

    • @michael_mmk
      @michael_mmk Před 8 měsíci

      Давайте попробуем разобраться. Пусть есть файл типа common.h и в нём код: 1 #ifndef COMMON_H_ 2 #define COMMON_H_ 3 #include <avr/io.h> 4 #include <utils/delay.h> 5 uint16_t findMiddleValue(uint16_t a, uint16_t b, uint16_t c); 6 #endif Подключаем этот файл в main.c и, например, в ещё одном .c файле, где нам это требуется. Каждое подключение (директива #include "myHeader.h") занимает процессорное время. Когда мы подключаем common.h, мы же заинтересованы в том, чтобы иметь возможность обращаться к частям "хедеров" avr/io и utils/delay, а также иметь возможность находить среднее значение из трёх переменных с помощью функции findMiddleValue(). Возникает вопрос - если мы уже однажды подключили common.h - надо ли нам тратить процессорное время на повторное подключение этого файла, учитывая, что его содержимое не изменилось? Ответ - наверное, нет. Второй вопрос - должны ли мы сами следить за подключениями? Ответ - наверное, тоже нет. Мы должны писать программу и подключать всё, что нам требуется в каждом файле (программист - не компилятор). Компилятор должен нам помочь в экономии процессорного времени, но мы должны "сказать" ему о том, что нам нужна здесь помощь. А теперь - суть. В момент, когда мы впервые подключили common.h мы проверяем не задефайнено ли значение COMMON_H_ (мы сами придумали эту запись; обратите внимание, что мы не пишем #define COMMON_H_ 100, мы просто "декларируем дефайн"), и если оно не задефайнено, мы его дефайнем и делаем все строки, начиная с третьей и заканчивая пятой, после чего идёт endif. Если мы после этого опять пытаемся подключить common.h, то мы опять натыкаемся на условие #ifndef, только в этом случае оно будет ложно (COMMON_H_ уже задефайнен) и мы, экономя процессорное время, прыгаем на сроку, после шестой в коде выше.

    • @some_alias
      @some_alias Před 8 měsíci

      @@michael_mmk Теперь стало более понятно, спасибо за развернутый ответ.

  • @openFrimeTv
    @openFrimeTv Před 8 měsíci

    а если я хочу получить не данные которые храняться в переменной по указателю, а само значение адреса? допустим так: uint32_t* memADR = (uint32_t*)0x0807FFF4; if (*memADR == 0xFFFFFFFF) { .... и теперь мне нужно передать не то что храниться по этому адресу, а само значение 0x0807FFF4; и я делаю вот так writeDataToMemory ((uint32_t)memADR, 100); это нормальная практика?

    • @michael_mmk
      @michael_mmk Před 8 měsíci

      Метод выглядит рабочим, VSCODE ни на что не ругается. Если нужно передать не просто абстрактный адрес (вот на это IDE ругается, потому что не факт, что по прописанному адресу что-то есть и не факт, что я обращусь к области памяти, которая мне не предназначается), а адрес конкретной переменной, то пишем просто int* memAdr = &myVar; (myVar тоже int) В этом случае будет возможность передавать адрес myVar, сравнивать его с какими то значениями и класть по этому адресу что-то.

    • @openFrimeTv
      @openFrimeTv Před 8 měsíci

      @@michael_mmkну я сделал чуть по другому, я все адреса в дефайн запихнул, а где нужно просто присваиваю его указателю)

  • @Maximko23life
    @Maximko23life Před 8 měsíci

    Здравствуйте. Спасибо огромное за труд для нас.

  • @__NEMO__
    @__NEMO__ Před 8 měsíci

    Эээ...Лайк конечно... но брат.... - с кем ты сейчас разговаривал? ))

  • @OttoLilo
    @OttoLilo Před 8 měsíci

    То, что нужно было. Спасибо, помогло разобраться с таймерами для настройке ШИМ в ATmega128

  • @user-un4mx2bv1s
    @user-un4mx2bv1s Před 8 měsíci

    Лекция очень понравилась. Спасибо вам за представленную информацию!

  • @dmitrijcuprina1332
    @dmitrijcuprina1332 Před 8 měsíci

    Михаил, прекрасно подаётся информация: без всяких "какбы" и прочих паразитных слов, но очень часто слышно словосочетание "чистота сигнала" но ни о каком фильтре речи не идёт, что вы имеете в виду, кода говорите "Чистота сигнала"?

    • @michael_mmk
      @michael_mmk Před 8 měsíci

      Спасибо. Скорее всего, я всё-таки имею ввиду "чАстоту сигнала", когда говорю о периодических сигналах. Вместо слова "чистота" я бы в своих записях использовал слово "помехозащищённость" или вариации слова "фильтрация".

  • @AntonContra
    @AntonContra Před 8 měsíci

    Михаил, Вы кандидат технический наук? Впши лекции просто высочайшего уровня. Досмотрю один курс и потом все сразу ваши лекции

    • @michael_mmk
      @michael_mmk Před 8 měsíci

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

    • @AntonContra
      @AntonContra Před 8 měsíci

      @@michael_mmk главное поставить цель

  • @AntonContra
    @AntonContra Před 8 měsíci

    Спасибо за Ваш труд!!! Благодаря таким уроком можно учиться и повышать свой тезнический уровень

  • @AntonContra
    @AntonContra Před 8 měsíci

    Отличные уроки и подача!! Спасибо!

  • @user-ts8on7nd2i
    @user-ts8on7nd2i Před 8 měsíci

    Офигенная подача для меня лично, даже немного не успеваю за материалом после рабочей смены, как говорят "не догоняю". Впервые на себе понял смысл "не догоняю".

  • @Maximko23life
    @Maximko23life Před 8 měsíci

    Спасибо!

  • @stepansml6713
    @stepansml6713 Před 8 měsíci

    Красивое. Давая расшифровку имен регистров прям как с ассемблера на си переходите. Становится намного понятнее (не тц или типа r33 а таймер коунтер...)

  • @Maximko23life
    @Maximko23life Před 8 měsíci

    Вы большой молодец. Спасибо за уроки.

  • @ruslanups6191
    @ruslanups6191 Před 9 měsíci

    Надо собрать такой стенд

    • @michael_mmk
      @michael_mmk Před 8 měsíci

      Можно ещё такой экран использовать - roboshop.spb.ru/display/simvolnye-displei/lcd-0802-green - он тоже символьный, но общается по TWI протоколу.

  • @ruslanups6191
    @ruslanups6191 Před 9 měsíci

    Спасибо за урок.