Тёмный

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

Vladimir Medintsev
Подписаться 36 тыс.
Просмотров 19 тыс.
50% 1

Полный курс по операционной системе FreeRTOS. Часть 3.
Тема: Управление задачами.
По вопросам сотрудничества - vmedintsev@yandex.ru
Канал в телеграмм - t.me/vladimir_medintsev
Канал на RU-vid - / vladimirmedintsev
------------------------------------------
Если вы хотите поддержать автора канала номер карты Сбер:
2202-2023-2480-4008
------------------------------------------

Наука

Опубликовано:

 

4 янв 2023

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 87   
@Ground1981
@Ground1981 Год назад
Хорошая подача. Большой труд. Полезно и интересно. Спасибо !
@dmitriicharuiskii
@dmitriicharuiskii Месяц назад
Спасибо за данный курс! Смотрю 3-ю часть - супер!
@v.shindakov
@v.shindakov Год назад
Владимир, большое Вам спасибо за курс, подача материала просто идеальна, даже не замечаешь как время проходит, и полностью погружаешься в преподаваемый материал! Вы реально делаете неоценимый вклад в развитие Российских разработчиков, кто в теме, те поймут меня... По стечению обстоятельств сейчас и сам разбираюсь с различными ОС для МК и одноплатников, а на ГБ еще не дошли до FreeRTOS, и мне Ваш курс сейчас очень помогает разобраться и подготовиться на будущее. Большое Вам человеческое спасибо за Ваш труд!
@VladimirMedintsev
@VladimirMedintsev Год назад
Очень рад. Благодарю за добрые слова. Буду очень рад, если нашим замечательным студентам это пригодится. Этот курс намного лучше того, что есть в распоряжении GB. Я буду рад, если вы поделитесь ссылками с одногруппниками.
@serggorod1423
@serggorod1423 Год назад
So cool! Не знаю даже что комментировать, каждый момент круче предыдущего!
@igor0242
@igor0242 Год назад
НИЗКИЙ ПОКЛОН ВАМ ЗА ТАКУЮ РАБОТУ!!!!!!! Дай Бог вам здорвья!
@user-tn3bw1wg8w
@user-tn3bw1wg8w Год назад
Благодарю за ваши труды🙏 комментарий для продвижение🦾 лайк от души👍
@user-je8oz6lh6w
@user-je8oz6lh6w Год назад
Владимир, очень круто. Вы педагог по призванию и блогер от бога
@VladimirMedintsev
@VladimirMedintsev Год назад
Спасибо за позитивные отзывы. Благодарю.
@roman6572
@roman6572 3 месяца назад
Сейчас новый проект по работе, решил использовать rtos, спасибо вам за уроки 👍
@VladimirMedintsev
@VladimirMedintsev 3 месяца назад
Очень рад.
@borovtsovable
@borovtsovable Год назад
Огромное спасибо! С таким потоком информации - праздники удались!
@AlexanderBegoon
@AlexanderBegoon Год назад
Огромное спасибо! Курс - праздник!
@aecorp629
@aecorp629 Год назад
Владимир, еще раз хочется выразить Вам огромную благодарность! За Ваши труды, за знания - которые Вы несете в массы! Благодаря таким людям как Вы и например Narod Stream держится Мир! От всей души благодарен! И передаю Вам так же благодарности от нашей команды программистов из Нижнего. И спасибо за поддержку с дисплейчиками,надеюсь что скоро будем думать о серии..
@VladimirMedintsev
@VladimirMedintsev Год назад
Спасибо вам огромное за позитивные отзывы.
@zhdanvadim9536
@zhdanvadim9536 Год назад
Спасибо!
@ivanpetrov4374
@ivanpetrov4374 Год назад
Это очень интересно, спасибо.
@Ololoshize
@Ololoshize Год назад
Спасибо вам.
@user-cm2pl2sq9d
@user-cm2pl2sq9d Год назад
Спасибо за курс, Владимир!
@user-wq5mz7yj8z
@user-wq5mz7yj8z Год назад
Спасибо, очень интересно
@user-gk2bn9ff1k
@user-gk2bn9ff1k Год назад
Здравствуйте, Владимир! Отличный материал, уже отучился на ГБ, ещё на ваших занятиях! Очень здорово, что вы продолжаете нести светлое в умы)
@VladimirMedintsev
@VladimirMedintsev Год назад
Спасибо огромное. Очень рад.
@user-uc6sy6wi2j
@user-uc6sy6wi2j Год назад
вот. а так крутая подача, смотрится на одном дыхании, надо будет потом все серии на харде сохранить))
@astarkmn
@astarkmn Год назад
Хорошо зашло. Хотим ещё 😉
@maximnemo8982
@maximnemo8982 Год назад
спасибо огромное
@jonnikfogotcheck9363
@jonnikfogotcheck9363 Год назад
Спасибо
@Insideus2786
@Insideus2786 Год назад
Спасибо за прекрасный курс! Небольшая ремарка: usStackHighWaterMark - возвращает минимальное зарегистрированное значение оставшейся памяти выделенного стека в течении всего цикла задачи, а не минимальное значение самого стека.
@U_video
@U_video Год назад
Интересно, а как эта штука работает? Мне лично известен только один способ "подкрасить" весь стек.
@romankashirov9718
@romankashirov9718 Год назад
Владимир, здравствуйте. На 32:21 как переменная xLastWakeTime будет обновляться, если вызов функции xTaskGetTickCount() находится в области кода, который выполняется только при первом запуске? Разве не должна она находиться в бесконечном цикле?
@b2b4
@b2b4 9 месяцев назад
Тут нет ошибки. vTaskDelayUntil обновит значение xLastWakeTime. Мы не просто так передаем переменную xLastWakeTime именно по ссылке в vTaskDelayUntil : управление в задачу возвращается где-то внутри vTaskDelayUntil , и vTaskDelayUntil, сразу после возврата ей управления, самостоятельно обновит xLastWakeTime перед возвращением из функции.
@naitalar3390
@naitalar3390 6 месяцев назад
Хорошее объяснение. Должно помочь в проектировании. Буду смотреть дальше.
@Frutktt
@Frutktt Год назад
Про delayUntil рассказано неочевидно в сравнении с простым delay. Нужно упомянуть, что функция vPrint..., как пример, может иметь определённое "большое" время выполнения и при сложении с простым delay уже не обеспечивает нужную выдержку по времени.
@Embedded_Developer
@Embedded_Developer Год назад
#ТОП!
@user-le7cf1qk8l
@user-le7cf1qk8l Год назад
Чудо продолжается!
@Plohoi_Chelovek_REDISKA
@Plohoi_Chelovek_REDISKA Год назад
шикарный материал, на случай "важных переговоров" скачаю на компуктер, оглассите пожалуйста альтернативные площадки, где можно еще будет посмотреть эти видео.
@owmgsm
@owmgsm Год назад
Владимир, продолжайте!!! И не затягивайте с курсом! 😊
@VladimirMedintsev
@VladimirMedintsev Год назад
Слишком часто выкладывать ролики очень плохая идея. Люди устанут и не будет просмотров. Труды просто улетят в трубу. А на это были потрачены сотни часов работы.
@processdemidnet
@processdemidnet Год назад
Ку, дядя Вова :) Хоть я и в основном плотно сижу на OSA, но вопросы всё те же к и FreeRTOS. В основном проблемы две... 1) Как приоритетами вообще не заблокировать некоторые задачи, ибо их может быть несколько готовых к выполнению, но с разными приоритетами. 2) Как обеспечить атомарность операций, когда на выполнение задачи требуется больше чем квант (а то и несколько) времени. Понятно что все видео уже отсняты, но, или надеюсь что этому будет уделено время, или будет доснято отдельное кино.
@VladimirMedintsev
@VladimirMedintsev Год назад
Ответы на эти вопросы в курсе есть. Особенно про потокобезопасность и критические секции кода. Так, что вы найдете ответы на свои вопросы.
@michal621
@michal621 Год назад
Можно еще коснуться вопроса глобальных переменных при использовании FreeRTOS. И отдельно по дерективам при объявлении переменных, типа volatile и т.п.
@VladimirMedintsev
@VladimirMedintsev Год назад
Это есть в курсе. На это выделено целое видео по потокобезопасности. Но оно ближе к концу. Не помню 12е или 13е по счету...
@user-xr5rh8ig9s
@user-xr5rh8ig9s Год назад
Музыка такая интригующая на заставке)
@sozdatelEd
@sozdatelEd Год назад
а если поставить скорость воспроизведения ролика 0,25 и колонки погромче, то с ума сойти можно ещё до начала основной части ))
@alexandrl.5131
@alexandrl.5131 Год назад
Не смотрел еще ни одной части, хочу разом частей по пять смотреть(судя по отзывам это будет просмотр в запой), лайк везде проставил. "Переходи по ссылке, регистрируйся, присоединяйся к команде - " это уже не интерестно, ведь вас там нет.
@VladimirMedintsev
@VladimirMedintsev Год назад
Частей по 5 не получится. Все ролики длиной почти по часу...
@alexandrl.5131
@alexandrl.5131 Год назад
@@VladimirMedintsev "Все ролики длиной почти по часу..." это не проблема))), значит это будет круче чем я думал.
@koliamor3983
@koliamor3983 Год назад
Фи га ты пулемет)))) Только 2-у часть досмотрел)))
@reindeermosseater
@reindeermosseater Год назад
А разве TCB не должен хранить адрес текуще выполняемой операции (а не только адрес самой функции) ? Например шедулер отобрал управление у текущей задачи где-то посередине. Переменные мы запихнули в стэк, ок. Но когда нашей задаче снова дали порулить, то откуда шедулер узнает с какого места надо продолжить управление?
@b2b4
@b2b4 9 месяцев назад
(если я верно понимаю) В стеке присутствует адрес возврата текущей функции. То есть примерно в момент заморозки задачи в стеке лежит набор значений от нашей задачи, набор значений самой задачи vTaskDelay... и инструкция "продолжить выполнение с адреса X". Таким образом после восстановления стека, первой же инструкцией будет "продолжить выполнение с адреса X"
@Liberhaim
@Liberhaim Год назад
ого!
@LitvinYaroslav
@LitvinYaroslav Год назад
vTaskDelayUntil() позволяет выполнять задачу с заданной периодичность с учетом времени выполнения кода, чего не делает vTaskDelay(), так ведь? Наверное pdMS_TO_TICKS() лучше использовать везде чем писать в тиках? Таким образом будет более простой переход если изменится величина кванта времени (тика).
@VladimirMedintsev
@VladimirMedintsev Год назад
Да, верно. Про макрос pdMS_TO_TICK тоже верно. Но по умолчанию 1 тик = 1 мс. Но использование макроса конечно более правильно.
@eugenevladoff2758
@eugenevladoff2758 Год назад
Отлично, все понятно. Приступим к практике?
@VladimirMedintsev
@VladimirMedintsev Год назад
Да, практика следующее видео.
@bigbani1334
@bigbani1334 Год назад
Огромное спасибо за видео! Я заметил, что в данной архитектуре тип данных TickType_t имеет разрядность 32 бита. При частоте в 1 кГц это приведет к переполнению примерно через 50 дней. Мне интересно, не вызовет ли это переполнение проблем в операционной системе? Если я хочу использовать эту ОС в устройствах, которые будут находится во включенном состоянии очень долго, нужно ли как-то дополнительно учитывать этот момент?
@VladimirMedintsev
@VladimirMedintsev Год назад
Нет, эта проблема надуманная. Проблем при переполнении не возникает ведь это беззнаковое целое.
@d2mitryev
@d2mitryev Год назад
@@VladimirMedintsev т.е через 50 дней тик каунтер обнулится и начнет с начала. а не будет ли проблем если этот переход в ноль попадет на интервал заданный vTaskDelayUntil ?
@user-je8oz6lh6w
@user-je8oz6lh6w Год назад
Вопрос. А есть ли возможность блокировки задачи таким образом, что бы разблокировка произошла извне, например по прерыванию.
@VladimirMedintsev
@VladimirMedintsev Год назад
Да, разумеется, об этом есть одно из видео в учебном курсе.
@eugenedukatta9355
@eugenedukatta9355 Год назад
В каком месте программы вызывается vTaskDelete (NULL) ? Так, как указано в видео ( например здесь 7:39 ) никогда не выполнится, так как находится за бесконечным циклом?
@VladimirMedintsev
@VladimirMedintsev Год назад
И слава богу, что не выполнится. В видео отчетливо говорится что нельзя выходить из задачи не удалив ее. Иначе это приведет к повреждению ОС. Это по большей части механизм предотвращения проблем.
@U_video
@U_video Год назад
Здравствуйте. Спасибо за лекции. Я или прослушал, или не было сказано про принятую договорённость у FreeRTOS про маленькие буквы перед названием функции. И Вы как-то на мой взгляд сложно описали про переключение между кооперативным режимом и вытесняющим.
@alexeyx1561
@alexeyx1561 Год назад
Правильно ли я понял? Планировщик переключает на выполнение следующей задачи сразу ( в случае досрочного выполнения задачи), несмотря на то что квант времени отведённый этой задачи ещё не истек или он утилизирует остаток кванта, а потом переключает контекст?
@VladimirMedintsev
@VladimirMedintsev Год назад
В следующем ролике на графиках увидите.
@user-rn9jx7gt7r
@user-rn9jx7gt7r Год назад
Подскажите пожалуйста где выделяется память TCB?
@VladimirMedintsev
@VladimirMedintsev Год назад
В куче.
@user-rn9jx7gt7r
@user-rn9jx7gt7r Год назад
@@VladimirMedintsev спасибо
@kogram
@kogram Год назад
А будут примеры с уходом в сон, там же по сути основное(ые) ядро не работает (Режимы пониженного энергопотребления), и freeRTOS будет перезапущен при просыпании (скорее всего, точно не знаю). Хотя и в режиме пониженного энергопотребления есть область для хранения переменных, хоть и небольшая.
@VladimirMedintsev
@VladimirMedintsev Год назад
Принцип будет разобран очень подробно.
@arzamas1988
@arzamas1988 Год назад
Доброго дня. Я правильно понял, по умолчанию, если задача с более высоким приоритетом встала в состояние "ready", то планировщик приостанавливает текущую низкоприоритетную задачу и отдает процессор высокоприоритетной задаче не смотря на то, что текущая задача не завершила работу в своем кванте времени?
@VladimirMedintsev
@VladimirMedintsev Год назад
Абсолютно верно.
@arzamas1988
@arzamas1988 Год назад
@@VladimirMedintsev спасибо за ответ. Тогда мне не ясна логика работы планировщика. Он каждый момент времени проверяет состояние всех задач? Почему тогда в системе не "плывет" время. Планировщик же постоянно вынужден заниматься проверкой других задач, тратить на это сколько-то тактов процессора, пока одна задача выполняется.
@VladimirMedintsev
@VladimirMedintsev Год назад
Не спешите, следующее видео поставит все на свои места. Там все станет понятно на примерах.
@U_video
@U_video Год назад
@@arzamas1988 Что значит "Он каждый момент времени проверяет состояние всех задач"? Планировщик запускается только в отведённое ему время. В своём кванте времени никто задачу прерывать не будет, ну разве что если сама задача не дёрнет планировщик, ну или из какого-нибудь прерывания.
@arzamas1988
@arzamas1988 Год назад
@@U_video как тогда планировщик узнает, что более приоритетная задача в реди перешла? Значит планировщик должен работать каждый раз, когда меняется состояние задач.
@justdoh
@justdoh Год назад
Владимир, курс и правда получается подробным и интересным, но хотелось бы пару моментов уточнить: - 19:47 похоже на оговорку, планировщик не занимается выделением памяти из кучи; - 36:17 IdleHook функция обратного вызова задачи со своими особенностями реализации, но она не воплощает саму задачу простоя (бездействия) там ведь ядро ещё делает ряд служебных операций, например, по сборке мусора. Полагаю в практике это ещё будете разбирать?
@VladimirMedintsev
@VladimirMedintsev Год назад
Эти видео - компиляция из десятков записей лекций прочитанных в течении года. Мелкие шероховатости там есть и будут.
@VladimirMedintsev
@VladimirMedintsev Год назад
@@sergsapov2927 Скорее всего Дмитрий прочитал об этом в руководстве. Там они реально пишут о сборке мусора.
@justdoh
@justdoh Год назад
@@sergsapov2927 Сбор мусора = высвобождение ресурсов удалённых задач. Да официальная документация и исходник tasks.c (см. функцию portTASK_FUNCTION)
@justdoh
@justdoh Год назад
​@@sergsapov2927 По сути удалённая задача образует такие неиспользуемые участки в куче, которые не будут доступны, пока ядро явно не обработает их (не пометит как свободные) внутри этой задачи простоя. Понятие сборки мусора вполне хорошо описывает этот процесс и разумеется я его ввёл в контексте работы ОСРВ, а не конкретного языка.
@user-uc6sy6wi2j
@user-uc6sy6wi2j Год назад
походу дела таймслайсинг надо отключать при работе с ds1820 термометром, там вроде как в одну миллисекунду не получается его опросить, а шина критична ко времени.
@VladimirMedintsev
@VladimirMedintsev Год назад
Будет видео в данном курсе, где про это будет рассказано. Это будет 13е видео в курсе. Там как раз про такие случаи
@user-uc6sy6wi2j
@user-uc6sy6wi2j Год назад
@@VladimirMedintsev буду ждать как 17 мгновений весны))
@d2mitryev
@d2mitryev Год назад
подача топ, но фундаметальнейшая тема про кооперативн. /вытесняющ. режимы планировщика затронуты вскользь. с учетом таймслайсинга у нас 4 возможных конфигураций планировщика фриртоса. и каждый режим надо разобрать.
@vadymfedyukovych8660
@vadymfedyukovych8660 Год назад
И что общего между микропроцессорами и Крымским мостом?
@VladimirMedintsev
@VladimirMedintsev Год назад
А где в этом видео говорится о Крымском мосту?
Далее
I Built a EXTREME School Bus!
21:37
Просмотров 1,9 млн
Я КУПИЛ САМЫЙ МОЩНЫЙ МОТОЦИКЛ!
59:15
Новодельный ноутбук Pocket386
1:16:17