Операционная система FreeRTOS. Самый полный курс на русском языке. Часть 3. Управление задачами.

Поділитися
Вставка
  • Опубліковано 6 вер 2024
  • Полный курс по операционной системе FreeRTOS. Часть 3.
    Тема: Управление задачами.
    По вопросам сотрудничества - vmedintsev@yandex.ru
    Канал в телеграмм - t.me/vladimir_...
    Канал на UA-cam - / vladimirmedintsev
    ------------------------------------------
    Если вы хотите поддержать автора канала номер карты Сбер:
    2202-2023-2480-4008
    ------------------------------------------

КОМЕНТАРІ • 87

  • @Ground1981
    @Ground1981 Рік тому +15

    Хорошая подача. Большой труд. Полезно и интересно. Спасибо !

  • @v.shindakov
    @v.shindakov Рік тому +9

    Владимир, большое Вам спасибо за курс, подача материала просто идеальна, даже не замечаешь как время проходит, и полностью погружаешься в преподаваемый материал! Вы реально делаете неоценимый вклад в развитие Российских разработчиков, кто в теме, те поймут меня... По стечению обстоятельств сейчас и сам разбираюсь с различными ОС для МК и одноплатников, а на ГБ еще не дошли до FreeRTOS, и мне Ваш курс сейчас очень помогает разобраться и подготовиться на будущее. Большое Вам человеческое спасибо за Ваш труд!

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому +2

      Очень рад. Благодарю за добрые слова. Буду очень рад, если нашим замечательным студентам это пригодится. Этот курс намного лучше того, что есть в распоряжении GB. Я буду рад, если вы поделитесь ссылками с одногруппниками.

    • @serggorod1423
      @serggorod1423 Рік тому

      So cool!
      Не знаю даже что комментировать, каждый момент круче предыдущего!

  • @roman6572
    @roman6572 5 місяців тому

    Сейчас новый проект по работе, решил использовать rtos, спасибо вам за уроки 👍

  • @igor0242
    @igor0242 Рік тому +3

    НИЗКИЙ ПОКЛОН ВАМ ЗА ТАКУЮ РАБОТУ!!!!!!! Дай Бог вам здорвья!

  • @user-je8oz6lh6w
    @user-je8oz6lh6w Рік тому +8

    Владимир, очень круто. Вы педагог по призванию и блогер от бога

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      Спасибо за позитивные отзывы. Благодарю.

  • @dmitriicharuiskii
    @dmitriicharuiskii 3 місяці тому +1

    Спасибо за данный курс! Смотрю 3-ю часть - супер!

  • @romankashirov9718
    @romankashirov9718 Рік тому +3

    Владимир, здравствуйте. На 32:21 как переменная xLastWakeTime будет обновляться, если вызов функции xTaskGetTickCount() находится в области кода, который выполняется только при первом запуске? Разве не должна она находиться в бесконечном цикле?

    • @b2b4
      @b2b4 10 місяців тому +1

      Тут нет ошибки.
      vTaskDelayUntil обновит значение xLastWakeTime.
      Мы не просто так передаем переменную xLastWakeTime именно по ссылке в vTaskDelayUntil : управление в задачу возвращается где-то внутри vTaskDelayUntil , и vTaskDelayUntil, сразу после возврата ей управления, самостоятельно обновит xLastWakeTime перед возвращением из функции.

  • @user-tn3bw1wg8w
    @user-tn3bw1wg8w Рік тому +4

    Благодарю за ваши труды🙏 комментарий для продвижение🦾 лайк от души👍

  • @aecorp629
    @aecorp629 Рік тому +2

    Владимир, еще раз хочется выразить Вам огромную благодарность! За Ваши труды, за знания - которые Вы несете в массы! Благодаря таким людям как Вы и например Narod Stream держится Мир! От всей души благодарен! И передаю Вам так же благодарности от нашей команды программистов из Нижнего. И спасибо за поддержку с дисплейчиками,надеюсь что скоро будем думать о серии..

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      Спасибо вам огромное за позитивные отзывы.

  • @borovtsovable
    @borovtsovable Рік тому +2

    Огромное спасибо! С таким потоком информации - праздники удались!

  • @AlexanderBegoon
    @AlexanderBegoon Рік тому +3

    Огромное спасибо! Курс - праздник!

  • @Frutktt
    @Frutktt Рік тому +3

    Про delayUntil рассказано неочевидно в сравнении с простым delay. Нужно упомянуть, что функция vPrint..., как пример, может иметь определённое "большое" время выполнения и при сложении с простым delay уже не обеспечивает нужную выдержку по времени.

  • @zhdanvadim9536
    @zhdanvadim9536 Рік тому +1

    Спасибо!

  • @Ololoshize
    @Ololoshize Рік тому +3

    Спасибо вам.

  • @user-gk2bn9ff1k
    @user-gk2bn9ff1k Рік тому +1

    Здравствуйте, Владимир! Отличный материал, уже отучился на ГБ, ещё на ваших занятиях! Очень здорово, что вы продолжаете нести светлое в умы)

  • @Plohoi_Chelovek_REDISKA
    @Plohoi_Chelovek_REDISKA Рік тому +4

    шикарный материал, на случай "важных переговоров" скачаю на компуктер, оглассите пожалуйста альтернативные площадки, где можно еще будет посмотреть эти видео.

  • @Insideus2786
    @Insideus2786 Рік тому +1

    Спасибо за прекрасный курс! Небольшая ремарка: usStackHighWaterMark - возвращает минимальное зарегистрированное значение оставшейся памяти выделенного стека в течении всего цикла задачи, а не минимальное значение самого стека.

    • @U_video
      @U_video Рік тому

      Интересно, а как эта штука работает? Мне лично известен только один способ "подкрасить" весь стек.

  • @user-wq5mz7yj8z
    @user-wq5mz7yj8z Рік тому +1

    Спасибо, очень интересно

  • @Embedded_Developer
    @Embedded_Developer Рік тому +2

    #ТОП!

  • @user-uc6sy6wi2j
    @user-uc6sy6wi2j Рік тому +1

    вот. а так крутая подача, смотрится на одном дыхании, надо будет потом все серии на харде сохранить))

  • @maximnemo8982
    @maximnemo8982 Рік тому +1

    спасибо огромное

  • @processdemidnet
    @processdemidnet Рік тому +3

    Ку, дядя Вова :) Хоть я и в основном плотно сижу на OSA, но вопросы всё те же к и FreeRTOS. В основном проблемы две... 1) Как приоритетами вообще не заблокировать некоторые задачи, ибо их может быть несколько готовых к выполнению, но с разными приоритетами. 2) Как обеспечить атомарность операций, когда на выполнение задачи требуется больше чем квант (а то и несколько) времени. Понятно что все видео уже отсняты, но, или надеюсь что этому будет уделено время, или будет доснято отдельное кино.

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому +1

      Ответы на эти вопросы в курсе есть. Особенно про потокобезопасность и критические секции кода. Так, что вы найдете ответы на свои вопросы.

  • @astarkmn
    @astarkmn Рік тому +1

    Хорошо зашло. Хотим ещё 😉

  • @naitalar3390
    @naitalar3390 7 місяців тому

    Хорошее объяснение. Должно помочь в проектировании. Буду смотреть дальше.

  • @jonnikfogotcheck9363
    @jonnikfogotcheck9363 Рік тому +1

    Спасибо

  • @ivanpetrov4374
    @ivanpetrov4374 Рік тому +1

    Это очень интересно, спасибо.

  • @user-cm2pl2sq9d
    @user-cm2pl2sq9d Рік тому

    Спасибо за курс, Владимир!

  • @michal621
    @michal621 Рік тому +2

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

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому +2

      Это есть в курсе. На это выделено целое видео по потокобезопасности. Но оно ближе к концу. Не помню 12е или 13е по счету...

  • @user-le7cf1qk8l
    @user-le7cf1qk8l Рік тому +2

    Чудо продолжается!

  • @owmgsm
    @owmgsm Рік тому +1

    Владимир, продолжайте!!! И не затягивайте с курсом! 😊

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому +1

      Слишком часто выкладывать ролики очень плохая идея. Люди устанут и не будет просмотров. Труды просто улетят в трубу. А на это были потрачены сотни часов работы.

  • @reindeermosseater
    @reindeermosseater Рік тому +1

    А разве TCB не должен хранить адрес текуще выполняемой операции (а не только адрес самой функции) ? Например шедулер отобрал управление у текущей задачи где-то посередине. Переменные мы запихнули в стэк, ок. Но когда нашей задаче снова дали порулить, то откуда шедулер узнает с какого места надо продолжить управление?

    • @b2b4
      @b2b4 10 місяців тому

      (если я верно понимаю) В стеке присутствует адрес возврата текущей функции. То есть примерно в момент заморозки задачи в стеке лежит набор значений от нашей задачи, набор значений самой задачи vTaskDelay... и инструкция "продолжить выполнение с адреса X". Таким образом после восстановления стека, первой же инструкцией будет "продолжить выполнение с адреса X"

  • @user-xr5rh8ig9s
    @user-xr5rh8ig9s Рік тому +1

    Музыка такая интригующая на заставке)

    • @sozdatelEd
      @sozdatelEd Рік тому

      а если поставить скорость воспроизведения ролика 0,25 и колонки погромче, то с ума сойти можно ещё до начала основной части ))

  • @alexandrl.5131
    @alexandrl.5131 Рік тому +2

    Не смотрел еще ни одной части, хочу разом частей по пять смотреть(судя по отзывам это будет просмотр в запой), лайк везде проставил.
    "Переходи по ссылке, регистрируйся, присоединяйся к команде - " это уже не интерестно, ведь вас там нет.

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      Частей по 5 не получится. Все ролики длиной почти по часу...

    • @alexandrl.5131
      @alexandrl.5131 Рік тому

      @@VladimirMedintsev "Все ролики длиной почти по часу..." это не проблема))), значит это будет круче чем я думал.

  • @eugenevladoff2758
    @eugenevladoff2758 Рік тому +1

    Отлично, все понятно. Приступим к практике?

  • @koliamor3983
    @koliamor3983 Рік тому +2

    Фи га ты пулемет)))) Только 2-у часть досмотрел)))

  • @LitvinYaroslav
    @LitvinYaroslav Рік тому +1

    vTaskDelayUntil() позволяет выполнять задачу с заданной периодичность с учетом времени выполнения кода, чего не делает vTaskDelay(), так ведь?
    Наверное pdMS_TO_TICKS() лучше использовать везде чем писать в тиках? Таким образом будет более простой переход если изменится величина кванта времени (тика).

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому +1

      Да, верно. Про макрос pdMS_TO_TICK тоже верно. Но по умолчанию 1 тик = 1 мс. Но использование макроса конечно более правильно.

  • @Liberhaim
    @Liberhaim Рік тому +2

    ого!

  • @d2mitryev
    @d2mitryev Рік тому +1

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

  • @user-je8oz6lh6w
    @user-je8oz6lh6w Рік тому +1

    Вопрос. А есть ли возможность блокировки задачи таким образом, что бы разблокировка произошла извне, например по прерыванию.

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      Да, разумеется, об этом есть одно из видео в учебном курсе.

  • @eugenedukatta9355
    @eugenedukatta9355 Рік тому

    В каком месте программы вызывается vTaskDelete (NULL) ? Так, как указано в видео ( например здесь 7:39 ) никогда не выполнится, так как находится за бесконечным циклом?

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      И слава богу, что не выполнится. В видео отчетливо говорится что нельзя выходить из задачи не удалив ее. Иначе это приведет к повреждению ОС. Это по большей части механизм предотвращения проблем.

  • @user-rn9jx7gt7r
    @user-rn9jx7gt7r Рік тому +1

    Подскажите пожалуйста где выделяется память TCB?

  • @kogram
    @kogram Рік тому

    А будут примеры с уходом в сон, там же по сути основное(ые) ядро не работает (Режимы пониженного энергопотребления), и freeRTOS будет перезапущен при просыпании (скорее всего, точно не знаю). Хотя и в режиме пониженного энергопотребления есть область для хранения переменных, хоть и небольшая.

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      Принцип будет разобран очень подробно.

  • @U_video
    @U_video Рік тому +2

    Здравствуйте. Спасибо за лекции. Я или прослушал, или не было сказано про принятую договорённость у FreeRTOS про маленькие буквы перед названием функции. И Вы как-то на мой взгляд сложно описали про переключение между кооперативным режимом и вытесняющим.

  • @arzamas1988
    @arzamas1988 Рік тому +2

    Доброго дня. Я правильно понял, по умолчанию, если задача с более высоким приоритетом встала в состояние "ready", то планировщик приостанавливает текущую низкоприоритетную задачу и отдает процессор высокоприоритетной задаче не смотря на то, что текущая задача не завершила работу в своем кванте времени?

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому +1

      Абсолютно верно.

    • @arzamas1988
      @arzamas1988 Рік тому

      @@VladimirMedintsev спасибо за ответ. Тогда мне не ясна логика работы планировщика. Он каждый момент времени проверяет состояние всех задач? Почему тогда в системе не "плывет" время. Планировщик же постоянно вынужден заниматься проверкой других задач, тратить на это сколько-то тактов процессора, пока одна задача выполняется.

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому +1

      Не спешите, следующее видео поставит все на свои места. Там все станет понятно на примерах.

    • @U_video
      @U_video Рік тому +1

      @@arzamas1988 Что значит "Он каждый момент времени проверяет состояние всех задач"? Планировщик запускается только в отведённое ему время. В своём кванте времени никто задачу прерывать не будет, ну разве что если сама задача не дёрнет планировщик, ну или из какого-нибудь прерывания.

    • @arzamas1988
      @arzamas1988 Рік тому

      @@U_video как тогда планировщик узнает, что более приоритетная задача в реди перешла? Значит планировщик должен работать каждый раз, когда меняется состояние задач.

  • @alexeyx1561
    @alexeyx1561 Рік тому

    Правильно ли я понял? Планировщик переключает на выполнение следующей задачи сразу ( в случае досрочного выполнения задачи), несмотря на то что квант времени отведённый этой задачи ещё не истек или он утилизирует остаток кванта, а потом переключает контекст?

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      В следующем ролике на графиках увидите.

  • @justdoh
    @justdoh Рік тому

    Владимир, курс и правда получается подробным и интересным, но хотелось бы пару моментов уточнить:
    - 19:47 похоже на оговорку, планировщик не занимается выделением памяти из кучи;
    - 36:17 IdleHook функция обратного вызова задачи со своими особенностями реализации, но она не воплощает саму задачу простоя (бездействия) там ведь ядро ещё делает ряд служебных операций, например, по сборке мусора. Полагаю в практике это ещё будете разбирать?

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

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

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      @@sergsapov2927 Скорее всего Дмитрий прочитал об этом в руководстве. Там они реально пишут о сборке мусора.

    • @justdoh
      @justdoh Рік тому

      @@sergsapov2927 Сбор мусора = высвобождение ресурсов удалённых задач. Да официальная документация и исходник tasks.c (см. функцию portTASK_FUNCTION)

    • @justdoh
      @justdoh Рік тому

      ​@@sergsapov2927 По сути удалённая задача образует такие неиспользуемые участки в куче, которые не будут доступны, пока ядро явно не обработает их (не пометит как свободные) внутри этой задачи простоя. Понятие сборки мусора вполне хорошо описывает этот процесс и разумеется я его ввёл в контексте работы ОСРВ, а не конкретного языка.

  • @bigbani1334
    @bigbani1334 Рік тому

    Огромное спасибо за видео! Я заметил, что в данной архитектуре тип данных TickType_t имеет разрядность 32 бита. При частоте в 1 кГц это приведет к переполнению примерно через 50 дней. Мне интересно, не вызовет ли это переполнение проблем в операционной системе? Если я хочу использовать эту ОС в устройствах, которые будут находится во включенном состоянии очень долго, нужно ли как-то дополнительно учитывать этот момент?

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      Нет, эта проблема надуманная. Проблем при переполнении не возникает ведь это беззнаковое целое.

    • @d2mitryev
      @d2mitryev Рік тому

      @@VladimirMedintsev т.е через 50 дней тик каунтер обнулится и начнет с начала. а не будет ли проблем если этот переход в ноль попадет на интервал заданный vTaskDelayUntil ?

  • @user-uc6sy6wi2j
    @user-uc6sy6wi2j Рік тому

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

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      Будет видео в данном курсе, где про это будет рассказано. Это будет 13е видео в курсе. Там как раз про такие случаи

    • @user-uc6sy6wi2j
      @user-uc6sy6wi2j Рік тому

      @@VladimirMedintsev буду ждать как 17 мгновений весны))

  • @vadymfedyukovych8660
    @vadymfedyukovych8660 Рік тому

    И что общего между микропроцессорами и Крымским мостом?

    • @VladimirMedintsev
      @VladimirMedintsev  Рік тому

      А где в этом видео говорится о Крымском мосту?