Тёмный

Операционная система FreeRTOS. Самый полный курс на русском языке. Часть 9. Семафоры. 

Подписаться
Просмотров 7 тыс.
% 305

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

Наука

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

 

28 янв 2023

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 42   
@DColins
@DColins 21 день назад
Здравствуйте, спасибо вам огромное за труд, очень интересно слушать вас, а потом практиковаться
@paulkvetkov8600
@paulkvetkov8600 Год назад
Видео где Автор делится опытом, разъясняет непонятные или сложные моменты, учит что-то делать практически - полезно и нужно по определению. Спасибо за Вашу работу!
@DIY_PLC
@DIY_PLC Год назад
Очевидно работа хорошая и нужная тут не может быть двух мнений.
@ЛюбомирБезган
@ЛюбомирБезган Год назад
Спасибо ещё раз! Каждое видео - это настоящий шедевр!
@viktorvoinov8349
@viktorvoinov8349 Год назад
Спасибо за Вашу работу!
@caska7850
@caska7850 Год назад
Спасибо вам за уроки, очень полезно!
@yuriyivanov9580
@yuriyivanov9580 Год назад
Классный курс получается! Рассказываете как проф. преподаватель (сам работал в вузе 19 лет). Знаком с FreeRtos лет 10, а то и более, но никогда не использовал. И кажется многое потерял... А тут вдруг пришлось использовать библиотеку, которая сделана под эту ОСь и вот я с вами ;-) Спасибо огромное за Вашу работу, обязательно воспользуюсь номером карты.
@VladimirMedintsev
@VladimirMedintsev Год назад
Спасибо огромное за позитивный отзыв.
@VasyaPupkinus
@VasyaPupkinus Год назад
День добрый. Как всегда , полезное и интересное видео, спасибо.
@markusdrive_com
@markusdrive_com Год назад
Большое спасибо, Владимир, за работу!
@nangelo0
@nangelo0 Год назад
Спасибо! Я надеюсь, весь курс будет залит на одну из российских платформ!
@Ololoshize
@Ololoshize Год назад
Сразу лайк до просмотра, заранее спасибо за этот курс.
@phisik1211
@phisik1211 Год назад
t=23:10 "обратите внимание, что последовательность изменилась". Ошибочное суждение. Во-первых, разницы между 19:43 и 23:10 очевидно нет. Во-вторых, ее и не может быть, т.к. код отличается на переход через for(;;), т.е. на одну инструкцию RJMP скорее всего. В первом случае она вызывается до osDelay(3), во втором - после. А на таком масштабе отдельных инструкцие не видно.
@valkoder_ex305
@valkoder_ex305 Год назад
Спасибо! Жду продолжеия.
@Gleb_Godlevski
@Gleb_Godlevski Год назад
Фишка этого курса - использование логич. анализатора для визуализации. Дякую. 👍 Интересно, а есть ли возможность показать вызов планировщика в анализаторе для полноты картины?
@justdoh
@justdoh Год назад
Всё-таки ожидаемый порядок обработки при выдаче двух семафоров подряд (25:53) с указанными приоритетами будет иным. Очевидно, уже после первого семафора будет происходить переключение контекста и передача управления в задачу 4 (видно на 27:20).
@ZuratonE
@ZuratonE Год назад
Про инверсию приоритета еще можно рассказать
@emmett980
@emmett980 Год назад
Большое спасибо! Особенно за наглядность процессов, прям понятно как отсчитываются временные промежутки и передается управление, кстати не подскажете где можно посмотреть библиотеки кода или примеры на ваш взгляд с наиболее правильными реализациями (примеры кода для различных задач с переферией uart ads spi и пр.)
@VladimirMedintsev
@VladimirMedintsev Год назад
Ну это же зависит от периферии и от используемого МК, не думаю, что рассмотрение таких вещей нужно вести в контексте РТОС
@koliamor3983
@koliamor3983 Год назад
двОичный режет слух...
@VladimirMedintsev
@VladimirMedintsev Год назад
У нас не урок русского языка и большая страна
@bb18299
@bb18299 6 месяцев назад
Как человек, который кучу проектов сделал по цифровым многоканальным источником питания, всяким хитрым системам реал-таймом, где процесс работы вымеряется до наносекунд и где периодичность различных процессов до сотен килогерц, а теперь вдруг заинтересовавшийся всякими ОСями... сижу и фигею... 1мс для меня это вечность 😀😀😀 и чем больше изучаю, тем больше понимаю - ну его нахрен... я своему коду больше доверяю.... а эти все ОСи пусть там турникетами да кнопками умного дома управляют. Доверить им что то мало мальски серьезное, на мой взгляд нельзя, хотя они вроде бы для этого и предназначены. В вашем примере если в систему кидаются 2 семафора. По всей логике как кода, так и теории, "задача" их обработки обязана быть вызвана ровно 2 раза! Но она вызывается 3 раза, и не важно что в третий раз она какой-то там огрызок доделывает! Причем этот огрызок не от пользовательской функции(где ты сам реально можешь косякнуть), а от системной функции самого ядра ОСи!! Это ж реал-тайм вещи с защитой потоковости, тут все должно быть четко как часы - 2 раза значит 2, и без вариантов! Иначе как на них нормально писать? И я подозреваю таких подводных камней в этих RTOS через чур много, если даже на учебном примере они вылезают. Это вопрос конечно не к автору, он то как раз большой молодец! Он как раз объясняет все очень неплохо! Побольше таких бы "косяковых" примеров работы))))
@BodinAndrey
@BodinAndrey Год назад
Спасибо, за Вашу работу, для многих она очень важна. Коллеги, подскажите один момент, когда планировщик переключает задачу на более приоритетную, он сохраняет ее стек, но не запоминает место, с которого она была переключена? Т.е задача всегда вызывается с самого начала тела функции? Или же этот механизм схож с прерываниям, когда программный счётчик останавливается, и запускается с места где остановился?
@VladimirMedintsev
@VladimirMedintsev Год назад
С места, где остановились.
@BodinAndrey
@BodinAndrey Год назад
@@VladimirMedintsev Спасибо!
@Andry_TV_channel
@Andry_TV_channel Год назад
Добрый день, спасибо! А если нужно переводить ряд задач-драйверов в режим готовности к выполнению из мастер-таска (и блокировать) не на один цикл, а на время до следующей блокировки? Можно ли это сделать как-то кроме vTaskSuspend(handle) из задачи-мастера? И считается ли вообще нормальным такое управление через задачу мастера с высшим приоритетом и vTaskDelay/vTaskResume? Сейчас у меня по прерыванию запускается задача-мастер и выполняется один раз, запуская нужный драйвер и блокируя не использующиеся. Спасибо за уроки, буду рад ответу!
@VladimirMedintsev
@VladimirMedintsev Год назад
Группа событий вас спасет.
@LitvinYaroslav
@LitvinYaroslav Год назад
Можно ли счетному семафору задать за один раз нужное значение или нужно вызывать give нужное количество раз?
@dpochechuev
@dpochechuev Год назад
Владимир спасибо за видео. Не понятно использование osDelay(1) после xSemaphoreTake. Ведь одной xSemaphoreTake будет достаточно для синхронизации этих задач? Ведь задача 4 будет находиться в блокировке по семафору? Это учебный трюк чтобы запутать студентов?
@VladimirMedintsev
@VladimirMedintsev Год назад
Это не для запутать, а для того, чтобы показать влияние каждой функции API на конечный результат. Нужно понимать почему планировщик делает то или иное. А без опыта и экспериментов никак.
@fly8r358
@fly8r358 Год назад
Спасибо за видео. Я так понимаю, что бинарные светофоры сродни флагам в масштабе ОС со всеми вытекающими плюшками? И семафор может например подсказать задаче выполнить чтение очереди, если он пришел? Правильно?
@VladimirMedintsev
@VladimirMedintsev Год назад
Да, правильно. Просто события они более гибкие. О них будет чуть позже. Ну и там потом вишенка на торте в виде нотификации.
@DIY_PLC
@DIY_PLC Год назад
Владимир доброе утро. Почему Вы это делаете? В чем Ваша мотивация?
@VladimirMedintsev
@VladimirMedintsev Год назад
Странный вопрос.
@user-wo3rx5oe1f
@user-wo3rx5oe1f Год назад
Приходит время, хочется поделиться с молодыми. Нормальный период жизни взрослого мужчины. Автору респект
@arzamas1988
@arzamas1988 Год назад
@@user-wo3rx5oe1f лично я люблю делиться знаниями с окружающими. Именно с этой целью создал канал на дзене. Так как все судят по себе, думаю и у Владимира подобная мотивация.
@Ololoshize
@Ololoshize Год назад
Почему, мистер Андерсон, почему? Во имя чего? Что вы делаете? Зачем, зачем встаете? Зачем продолжаете драться? Неужели вы верите в какую-то миссию, или вам просто страшно погибать? Так в чем же миссия, может быть, вы откроете? Это свобода, правда, может быть, мир, или вы боретесь за любовь? Иллюзии, мистер Андерсон, причуды восприятия. Хрупкие логические теории слабого человека, который отчаянно пытается оправдать свое существование - бесцельное и бессмысленное! Но они, мистер Андерсон, как и Матрица, столь же искусственны. Только человек может выдумать скучное и безжизненное понятие «любовь»! Вам пора это увидеть, мистер Андерсон, увидеть и понять! Вы не можете победить, продолжать борьбу бессмысленно. Почему, мистер Андерсон, почему вы упорствуете?
@chipsoft1
@chipsoft1 Год назад
Очень сложное введение для новичков. Начинать лекцию с варианта использования семафоров в прерываниях, как по мне не очень хорошая идея. Для тех, кто не до конца понял, зачем нужны семафоры, объясню на пальцах. Семафору нужны для исключения обращения разных задач к одному и тому же ресурсу. Как это выглядит на практике? Есть туалет с одним унитазом. В один момент он может обслуживать только одного человека. Ключ от туалета играет роль семафора. Ключ один (бинарный). Чтобы воспользоваться туалетом, посетитель должен взять ключ от туалета (TAKE), после использования туалета он должен отдать ключ (GIVE). Если кто-то пришел к туалету, а ключ (семафор) в состоянии TAKE, он не может им воспользоваться. После того, как предыдущий посетитель вернет ключ от туалета (GIVE) следующий посетитель сможет взять ключ (TAKE) и воспользоваться туалетом. И так далее.
@RepomanBY
@RepomanBY Год назад
Как раз-таки нет. Вы описали мьютекс, именно он служит для ограничения доступа к общему ресурсу. А семафор используется для синхронизации. Это две абсолютно разные сущности для разных задач. Хотя нередко двоичный семафор приравнивают к мьютексу
@chipsoft1
@chipsoft1 Год назад
@@RepomanBY Суть у них действительно похожа, просто мютекс можно использовать только из одного потока, а в случае с семафором - из разных. И именно благодаря этому можно использовать его для синхронизации в разных потоках.
@RepomanBY
@RepomanBY Год назад
Я знаю. Но даже в документации к фриртос сказано, что бинарный семафор лучше использовать для синхронизации, а мьютекс - для ограничения доступа
@olegp.3012
@olegp.3012 11 месяцев назад
​@@chipsoft1 никто не запрещает использовать mutex или бинарный semaphor из разных потоков для синхронизации. Но, если mutex или semaphor используется для ограничения доступа, то его нужно будет вернуть в том же потоке, в котором и взяли, ведь другой поток никогда не сможет взять этот же mutex или semaphor, что логично. Разница в том, что mutex поддерживает наследование приоритетов, и когда низкоприоритетная задача занимает какую то линию передачи данных (берет mutex), а в это время по этой же линии пытается отправить важные данные высокоприоритетная задача, то приоритет первой задачи повышается до приоритета второй задачи, что бы она меньше прерывалась другими задачами и как можно скорее освободила линию, вернув mutex.