Не могу понять код опроса кнопки STM32
Re: Не могу понять код опроса кнопки STM32
[uquote="Eddy_Em",url="/forum/viewtopic.php?p=4219170#p4219170"]Это что ж такое нужно в суперлупе делать, чтобы он так медленно выполнялся? Налицо адово рукожопие!!![/uquote]
Ну как что? Все тяжеловесные объемные функции с большим числом действий как раз и помещаются в таких циклах. А где они, по-вашему, должны еще быть? Рукожопие вовсе тут не при чем. Если вы с таким не сталкивались, то и не можете даже представить. Например, тяжеловесная графика, объемные аналитические вычисления. Вы просто ограничиваетесь мелкими задачками, но это не значит, что другие люди не решали более тяжеловесных задач.
USB сейчас мало кого интересует, в принципе то. Робот-пылесос с USB-шнурком или флешкой? Фффуууу! А вот с вай-фаем или блютузом - да.
Я так полагаю, ваши споры как бы неуместны, поскольку они узкоориентированы на личные ваши проблемы и не шибко то отражают реалии в общем случае.
Ну как что? Все тяжеловесные объемные функции с большим числом действий как раз и помещаются в таких циклах. А где они, по-вашему, должны еще быть? Рукожопие вовсе тут не при чем. Если вы с таким не сталкивались, то и не можете даже представить. Например, тяжеловесная графика, объемные аналитические вычисления. Вы просто ограничиваетесь мелкими задачками, но это не значит, что другие люди не решали более тяжеловесных задач.
USB сейчас мало кого интересует, в принципе то. Робот-пылесос с USB-шнурком или флешкой? Фффуууу! А вот с вай-фаем или блютузом - да.
Я так полагаю, ваши споры как бы неуместны, поскольку они узкоориентированы на личные ваши проблемы и не шибко то отражают реалии в общем случае.
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: Не могу понять код опроса кнопки STM32
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4219334#p4219334"]Рукожопие вовсе тут не при чем.[/uquote]
Очень даже при чем! Длинные блоки можно разбить на куски. И каждому по КА завести. Так будет правильно.
А фигачить один цикл суперлупа десятки миллисекунд - рукожопие высшего пилотажа!
Очень даже при чем! Длинные блоки можно разбить на куски. И каждому по КА завести. Так будет правильно.
А фигачить один цикл суперлупа десятки миллисекунд - рукожопие высшего пилотажа!
Re: Не могу понять код опроса кнопки STM32
Даже если разобьете на куски, вы ничего, кроме кусков, не получите, это и будет "рукожопие", которое потом надо будет еще и сшивать, увеличивая накладные расходы. Например, вытесняющая RTOS разбивает длинные блоки на временнЫе слоты, но имеет накладные расходы. И это уже несколько другая парадигма программирования, определяющая иные подходы.
Вобщем, если не пробовали сами, лучше не говорите. А то сиё шапкозакидательство несерьезно и глупо.
Вобщем, если не пробовали сами, лучше не говорите. А то сиё шапкозакидательство несерьезно и глупо.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Не могу понять код опроса кнопки STM32
А вам говорят про кооперативную многозадачность, не про вытесняющую.Например, вытесняющая RTOS разбивает длинные блоки на временнЫе слоты
Re: Не могу понять код опроса кнопки STM32
Неее, тут говорят какую-то дичь
про то, что всенепременно нужно дробить длинные блоки на части. Хотя в этом случае прерывания и будут тем самым дроблением на части. Просто надо выбирать подход в зависимости от задачи, а не пытаться впихнуть задачу в рамки того, что умеешь делать.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Не могу понять код опроса кнопки STM32
То, что вы не понимаете что вам говорят, не значит, что говорят дичь. А между прочим, это один из старейших подходов организации многозадачности. В стандартные библиотечные функции встраивался код, определяющий прошло ли достаточно времени, и если да - переключающий контекст.
А чтобы выбирать, неплохо знать как вообще такая задача обычно решается. В простейшем случае это линейный код на "тупых" задержках. Посложнее - конечный автомат. Еще сложнее - набор отдельных задач для ОС.Просто надо выбирать подход в зависимости от задачи, а не пытаться впихнуть задачу в рамки того, что умеешь делать.
Re: Не могу понять код опроса кнопки STM32
Господин, и это вы мне объясняете, что является "старейшим подходом"?
Я уже 20 лет в разработке электроники, и сам могу что угодно абяснить 
Шо ви мне тут имеете за задержки, КА и ОС?
Ващета, прерывания являются одним из вариантов этой вашей многозадачности. А что до "встраивать в библиотеки код, определяющий достаточно ли времени прошло" - эт, извините, что-то с чем-то
Не, пасаны, давайте не изобредать уж совсем небылиц в стиле ардуинщиков. Вы напутали одно с другим и с третьим. Если ф-ция дошла до конца, то она дошла до конца и закончилась, настанет очередь другой ф-ции. А если нужны временнЫе слоты, то этим занимается ядро вытесняющей ОС без встраивания в библиотечные ф-ции, а по сигналам системного таймера передает исполнение следующей в очереди задаче. Не мешайте всё в одну кучу.
Шо ви мне тут имеете за задержки, КА и ОС?
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: Не могу понять код опроса кнопки STM32
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4219654#p4219654"]Я уже 20 лет в разработке электроники, и сам могу что угодно абяснить
[/uquote]
Однако, вы, батенька, несете такой отборный бред, как будто только-только 5 класс закончили и научились копипастить код для абдурины!
Однако, вы, батенька, несете такой отборный бред, как будто только-только 5 класс закончили и научились копипастить код для абдурины!
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Не могу понять код опроса кнопки STM32
А что делать, если вас так удивляют подобные вещи? Приходится их объяснять.Господин, и это вы мне объясняете, что является "старейшим подходом"?
Именно что одним из. И прерывания по таймеру являются обязательными только для вытесняющей многозадачности, когда ядро силой отбирает выполнение у потока. Но ведь есть еще кооперативная многозадачность, когда поток отдает управление добровольно.Ващета, прерывания являются одним из вариантов этой вашей многозадачности.
И в плане эффективности кооперативная многозадачность выгоднее. Поток сам точно знает, когда прервется, и точно знает какие переменные ему нужно сохранить, а какие уже не нужно. В частности, можно не сохранять половину регистров.
Можете придумать способ лучше? Без прерываний, естественно. Сам по себе вызов функции обозначает, что часть регистров не будет сохранена."встраивать в библиотеки код, определяющий достаточно ли времени прошло" - эт, извините, что-то с чем-то
Re: Не могу понять код опроса кнопки STM32
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4219649#p4219649"]В стандартные библиотечные функции встраивался код, определяющий прошло ли достаточно времени, и если да - переключающий контекст..[/uquote]
Ну хорошо, и как вы представляете себе это, как должен этот встраиваемый код определять, достаточно ли времени прошло, с какой периодичностью он должен проверять это, на что опираться, на чем основываться, а что он должен делать, если прошло недостаточно времени, а как быть с переносимостью кода, а что делать с уже скомпилированными и закрытыми библиотеками? Вот подумайте и ответьте на эти вопросы. Только конкретно.
И это... Кажись, вы путаете теплое с соленым, кооперативную многозадачность с гибридной.
Как выглядит рядовой пример без ОС:
в цикле по флагам готовности ф-ции выполняются без ограничения их длительности. Если хотите принудительно ограничить максимальную длительность каждой ф-ции, вы вовсе не должны встраивать внутрь этой функций никакого кода! Наоборот, вы должны запустить системный таймер, который бы по истечении выделенного интервала вызывал прерывание, а в прерывании происходила бы принудительная передача исполнения на следующую ожидающую исполнения ф-цию. То есть, механизм переключения работает извне, а не изнутри функции, особенно библиотечной, в которую вообще нежелательно влезать руками.
При этом, во избежание потерь результатов текущей работы ф-ции, у каждой ф-ции должен быть собственный стек, в котором бы и хранились эти результаты и точка возврата, с которой нужно возобновить выполнение прерванной ф-ции.
Вот. А то, что вы там нафантазировали про "достаточно ли времени", то вы путаете гибридную многозадачность ОС с кооперативной. В операционной системе поверх всего работает ядро ОС, которое заведует распределением процессорного времени, будь то передача исполнения по команде из задачи или принудительное вытеснение задачи по времени и приоритетам.
Вам не мешает подробнее ознакомиться с внутрянкой ОС и её внутренней работой.
Создайте проект с FreeRTOS, в конфиге в строчке configUSE_PREEMPTION поставьте 0 и посмотрите, как именно реализованы механизмы ОС. Есть просто некоторые правила написания тела задачи для ОС и есть предоставляемый ОС инструментарий. Но ничего такого, что бы потребовало распиливания библиотечных функций и внедрения в них какого-то самовыдуманного кода, определяющего, истекло ли чего-то там или нет.
Посмотрите подробнее тему касательно работы стека вызовов, работы указателя стека, различия между Main Stack Pointer и Process Stack Pointer, места хранения локальных переменных, посмотрите генерируемый ассемблерный код при вызовах и возвратах ф-ций. А то у вас есть некоторое недопонимание того, где и как хранится содержимое регистров ядра.
Ну хорошо, и как вы представляете себе это, как должен этот встраиваемый код определять, достаточно ли времени прошло, с какой периодичностью он должен проверять это, на что опираться, на чем основываться, а что он должен делать, если прошло недостаточно времени, а как быть с переносимостью кода, а что делать с уже скомпилированными и закрытыми библиотеками? Вот подумайте и ответьте на эти вопросы. Только конкретно.
И это... Кажись, вы путаете теплое с соленым, кооперативную многозадачность с гибридной.
Как выглядит рядовой пример без ОС:
Код: Выделить всё
while(1)
{
if(f0_ready)
{
f0_ready = 0;
Funct0();
}
if(f1_ready)
{
f1_ready = 0;
Funct1();
}
if(f2_ready)
{
f2_ready = 0;
Funct2();
}
}
При этом, во избежание потерь результатов текущей работы ф-ции, у каждой ф-ции должен быть собственный стек, в котором бы и хранились эти результаты и точка возврата, с которой нужно возобновить выполнение прерванной ф-ции.
Вот. А то, что вы там нафантазировали про "достаточно ли времени", то вы путаете гибридную многозадачность ОС с кооперативной. В операционной системе поверх всего работает ядро ОС, которое заведует распределением процессорного времени, будь то передача исполнения по команде из задачи или принудительное вытеснение задачи по времени и приоритетам.
С чего бы это вдруг? Во-первых, никто не запрещает дописать сохранение нужных регистров (да оно так и делается, только для сишного текста незаметно). А во-вторых, дело не только в сохранении регистров. В ОС для каждой задачи выделяется отдельный стек, в котором она хранит все свои результаты работы. При переключении задач происходит переключение указателя стека на стек другой задачи. Этим занимается ядро ОС, оно для того и писано.Сам по себе вызов функции обозначает, что часть регистров не будет сохранена.
Вам не мешает подробнее ознакомиться с внутрянкой ОС и её внутренней работой.
Создайте проект с FreeRTOS, в конфиге в строчке configUSE_PREEMPTION поставьте 0 и посмотрите, как именно реализованы механизмы ОС. Есть просто некоторые правила написания тела задачи для ОС и есть предоставляемый ОС инструментарий. Но ничего такого, что бы потребовало распиливания библиотечных функций и внедрения в них какого-то самовыдуманного кода, определяющего, истекло ли чего-то там или нет.
А две трети можно? А четыре пятых? А шесть вторых?В частности, можно не сохранять половину регистров.
Посмотрите подробнее тему касательно работы стека вызовов, работы указателя стека, различия между Main Stack Pointer и Process Stack Pointer, места хранения локальных переменных, посмотрите генерируемый ассемблерный код при вызовах и возвратах ф-ций. А то у вас есть некоторое недопонимание того, где и как хранится содержимое регистров ядра.
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Не могу понять код опроса кнопки STM32
Любая библиотечная функция, например, расчет strlen, помимо своей основной задачи смотрит системный таймер - прошло ли достаточно времени с предыдущего переключения. Если прошло, то переключает. Если нет, то не переключает.Ну хорошо, и как вы представляете себе это, как должен этот встраиваемый код определять, достаточно ли времени прошло, с какой периодичностью он должен проверять это, на что опираться, на чем основываться, а что он должен делать, если прошло недостаточно времени, а как быть с переносимостью кода, а что делать с уже скомпилированными и закрытыми библиотеками? Вот подумайте и ответьте на эти вопросы. Только конкретно.
Поскольку функция библиотечная, то юзерский код разницы не заметит, так что с переносимостью проблем нет.
Скомпилированные библиотеки никакой роли не играют, поскольку точно также дергают API системы.
Вы опять описываете вытесняющую многозадачность.Если хотите принудительно ограничить максимальную длительность каждой ф-ции, вы вовсе не должны встраивать внутрь этой функций никакого кода! Наоборот, вы должны запустить системный таймер, который бы по истечении выделенного интервала вызывал прерывание, а в прерывании происходила бы принудительная передача исполнения на следующую ожидающую исполнения ф-цию.
Если выполнение прервано "снаружи", надо сохранять все регистры, включая временные. Если "изнутри" - только обязательные для сохранения. Согласно большинству конвенций, часть регистров вызываемая функция имеет право не восстанавливать после завершения. Помимо РОНов, это могут быть регистры для FPU, флаги и т.п. Соответственно, при вытесняющей многозадачности ядро обязано сохранить вообще все регистры, а при кооперативной - небольшую кучку, помеченную обязательными.С чего бы это вдруг? Во-первых, никто не запрещает дописать сохранение нужных регистров (да оно так и делается, только для сишного текста незаметно).
Пока для практического применения моих знаний достаточно. Достаточно даже для того чтобы вас просвещать.Вам не мешает подробнее ознакомиться с внутрянкой ОС и её внутренней работой.
Зависит от конвенции. Обычно сохраняемые это примерно половина от РОН.А две трети можно? А четыре пятых? А шесть вторых?
Временные регистры не сохраняются, флаговые не сохраняются, FPU не сохраняются.
Что конкретно мне там посмотреть?Посмотрите подробнее тему касательно работы стека вызовов, работы указателя стека, различия между Main Stack Pointer и Process Stack Pointer, места хранения локальных переменных, посмотрите генерируемый ассемблерный код при вызовах и возвратах ф-ций.
Re: Не могу понять код опроса кнопки STM32
ТА НУУУ???? Ну что тут еще скажешь. Вы не правы, господин. С вами тут больше не о чем разговаривать. Потому как вы предлагаете распилить скомпилированные закрытые библиотеки (а что делать с лицензионными аналитическими библами??) и вклеить в них какой-то самопридуманный кусок кода. Это конечно вы сказали "новое слово" в парадигме программирования. Надо вам за это мэдаль выдать. За самое бесполезное и бестолковое изобреДениеstrlen, помимо своей основной задачи смотрит системный таймер - прошло ли достаточно времени с предыдущего переключения.
Извините, но подобную ересь можете мне не рассказывать. Это конечно "новое слово в программировании", но такая ересь, такая ересть...
То, из чего состоит FreeRTOS, как она сделана, как работает. А касательно регистров ядра, посмотреть программинг мануал и разобраться в терминах, чтобы было не "примерно половина временных и флаговых", а было понимание, какие регистры что содержат и вообще как всё это работает.Что конкретно мне там посмотреть?
Вас ист дас "временные и флаговые"? И если с "флаговыми" можно еще догадаться, что это program staus, то вот что такое "временные" - хэзэ. Таких определений нет в мануале.Зависит от конвенции. Обычно сохраняемые это примерно половина от РОН.
Временные регистры не сохраняются, флаговые не сохраняются,
Автоматически сохраняются r0-r3, r12, psr и pc при переходе в прерывания и исключения. Остальное сохраняется программно, это генерируется компилятором и незаметно на языке Си, но видно на ассемблере.
При вызовах ф-ций регистры r0-r12 (особенно первые
Так это же вы её сами описали, написав, что "встраивать в библиотеки код, определяющий достаточно ли времени прошло". Если вы путаетесь в терминах и не понимаете разницы - ну это ваша проблема.Вы опять описываете вытесняющую многозадачность.
Вобщем, вы изрядный фантазёр
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Не могу понять код опроса кнопки STM32
То есть аргументов нет, и подтвердить свое высказывание вы не в силах.ТА НУУУ???? Ну что тут еще скажешь. Вы не правы, господин. С вами тут больше не о чем разговаривать.
Зачем вы предлагаете что-то там распиливать и вклеивать?! При чем здесь закрытые библиотеки?Потому как вы предлагаете распилить скомпилированные закрытые библиотеки (а что делать с лицензионными аналитическими библами??) и вклеить в них какой-то самопридуманный кусок кода.
Да как-то и не пытался, это вы начали какую-то ересь нести, а потом ее же пугаться.Извините, но подобную ересь можете мне не рассказывать.
Повторяю вопрос: что конкретно мне для вас посмотреть? "из чего состоит FreeRTOS" это слишком размытая тема.То, из чего состоит FreeRTOS, как она сделана, как работает.
Вас ист дас "временные и флаговые"?
Да, примерно то, что вы описали. Правда, я сталкивался больше чем с одним семейством контроллеров (хотя как раз с ARM немного), поэтому и сказал в общем виде.Автоматически сохраняются r0-r3, r12, psr и адрес возврата. Остальное сохраняется программно, это генерируется компилятором и незаметно на языке Си, но видно на ассемблере.
r0-r3, и прочие сохраняются только в прерывании, для функций, насколько я помню, соглашение чуть другое, например rl и sp сохранять не надо.
В AVR сохраняются r2-r17, r28, r29, тогда как r18-r27, r30, r31 и SREG могут быть изменены.
В RISC-V сохраняются s0-s11 (x8, x9, x18-x27), sp, gp, tp (x2-x4), но не сохраняются t0-t6 (x5-x7, x28-x31), a0-a7 (x10-x17), регистры FPU.
И так далее. Но это не важно. Важно что при вытесняющей многозадачности надо сохранить вообще все регистры. А при кооперативной - только часть.
Что значит "встраивать"? В той ОС, в которой это использовалось, библиотеки изначально были написаны с расчетом на кооперативную многозадачность.Так это же вы её сами описали, написав, что "встраивать в библиотеки код, определяющий достаточно ли времени прошло". Если вы путаетесь в терминах и не понимаете разницы - ну это ваша проблема.
Если вы не в состоянии прочитать и осознать столь "длинный" пост - это ваша проблема и ваше невежество.
TLDR:
Кооперативная многозадачность: поток сам отдает управление тогда, когда сочтет нужным, прервать его невозможно.
Вытесняющая многозадачность: ОС прерывает потоки тогда, когда хочется ей, помешать поток не может.
Может, хоть так поймете.
Re: Не могу понять код опроса кнопки STM32
Аргументов привел уже столько, что даже совсем упоротый дундук бы понял
Это вообще уже выходит за рамки именно этой темы. Не знаю, как на этом форуме, но на некоторых других такие отхождения не любят.
В целом, тут всё ясно, вы пытаетесь изобрести неведому зверушку, идя вразрез с общепризнанными правилами. Удачи вам в этом.
Что такое "кооперативная", "вытесняющая" и "гибридная" многозадачность я знал еще задолго до того, как вы написали свой первый "хеловорлд"
С хранением стека задачи, с тем, где его хранить... Вы вообще хорошо понимаете, что такое стек задачи?
А то заладили про регистры да про кооперативность.
Хотя и есть системы на кооперативной многозадачности. Однако, в чистом виде она не дает больших преимуществ.
И уж точно кооперативная система не имеет таких факторов как проверка "осталось ли время или истекло". И уж точно никто не будет ломать библиотечные стандартные ф-ции типа qsort, printf, strcpy, memset внедряя в них какие-то проверки системного таймера.
Вы бы лучше изучали основы РТОС, и поменьше писали тут длинных постов.
Это предложили ВЫ сами. Не надо передергивать и перевирать. Перечитайте свои предыдущие сообщения, если не уверены.Зачем вы предлагаете что-то там распиливать и вклеивать?
В целом, тут всё ясно, вы пытаетесь изобрести неведому зверушку, идя вразрез с общепризнанными правилами. Удачи вам в этом.
Что такое "кооперативная", "вытесняющая" и "гибридная" многозадачность я знал еще задолго до того, как вы написали свой первый "хеловорлд"
Лучше расскажите, что делать с текущими результатами работыпри вытесняющей многозадачности надо сохранить вообще все регистры. А при кооперативной - только часть.
что делает невозможным распараллеливание работы. У вас на компе Винда то как работает?поток сам отдает управление тогда, когда сочтет нужным, прервать его невозможно.
Хотя и есть системы на кооперативной многозадачности. Однако, в чистом виде она не дает больших преимуществ.
И уж точно кооперативная система не имеет таких факторов как проверка "осталось ли время или истекло". И уж точно никто не будет ломать библиотечные стандартные ф-ции типа qsort, printf, strcpy, memset внедряя в них какие-то проверки системного таймера.
Не "когда захочется", а по границам тайм-слотов. И "помешать" ей можно просто установкой более высокого приоритета по отношению к остальным задачам. Когда у данной задачи установлен самый высокий приоритет в системе, то ни одна другая задача не может быть активирована.ОС прерывает потоки тогда, когда хочется ей, помешать поток не может
Вы бы лучше изучали основы РТОС, и поменьше писали тут длинных постов.
Re: Не могу понять код опроса кнопки STM32
Jman, вы прослушали спектакль о проблеме "спор на пустом месте"
один герой вяло рассуждал о методах реализации многозадачности;
другой - (напялив очки RTOS) агрессивничал, мол он здесь аксакал и слушать надо только его.
какую же парадигму Вы выберете для своих часиков?
или надо еще подумать, как-то тема виртуализации не достаточно раскрыта.

если что, никого не хотел обидеть
просто озвучил как эти терки выглядят со стороны
один герой вяло рассуждал о методах реализации многозадачности;
другой - (напялив очки RTOS) агрессивничал, мол он здесь аксакал и слушать надо только его.
какую же парадигму Вы выберете для своих часиков?
или надо еще подумать, как-то тема виртуализации не достаточно раскрыта.
если что, никого не хотел обидеть
просто озвучил как эти терки выглядят со стороны
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Не могу понять код опроса кнопки STM32
...что в теме вы не разбираетесь. Тут действительно аргументов достаточно, все все поняли.Аргументов привел уже столько, что даже совсем упоротый дундук бы понял...
Цитату в студию!Это предложили ВЫ сами.
Мне абсолютно неинтересно опровергать все, что вы там себе нафантазировали. Сначала предлагает существующие закрытые библиотеки распиливать и еще как-то курочить, потом приписывает этот свой бред мне, а потом требует это доказывать. Нет уж, сами придумали бред, сами его и доказывайте.
Результаты задачи хранятся, кто бы мог подумать, в оперативной памяти. При создании новой задачи ей выделяется свой диапазон памяти и соответствующие права на нее. Как она будет организовывать там свой стек - ее дело. Естественно, каждой задаче в пространстве ядра выделяется соответствующая структура, включающая сохраненные регистры, адрес возврата, диапазоны памяти и права на нее. Ну и другие служебные данные. В общем случае ядро не может доверять, что юзерские процессы не запортят себе стек.Лучше расскажите, что делать с текущими результатами работыС хранением стека задачи, с тем, где его хранить...
Но для более простых ядер регистры и все остальное можно сохранять и на стек задачи. Я так делал, когда писал модельную ОС для AVR.
А в еще более простом случае - конечном автомате - каждая задача сама решает где ей хранить свое состояние, никакого разделения не происходит.
Слово "многозадачность" вам, как я понимаю, не говорит ни о чем.что делает невозможным распараллеливание работы.
Честное слово, лучше бы упирали на объективные недостатки кооперативной многозадачности. Например, если зависает задача - зависает вообще все. Или принципиальная невозможность организовать таким образом реалтайм. Или возможность написать поток таким образом (не использовать системные вызовы) чтобы он монопольно завладел всем процессорным временем.
Ну и зачем было придуриваться, если понимаете о чем речь?Хотя и есть системы на кооперативной многозадачности. Однако, в чистом виде она не дает больших преимуществ.
Основные преимущества - чуть проще в реализации и чуть меньше накладных расходов.
Никак, ее у меня нет. А у вас винда что, организована по принципу кооперативной многозадачности?У вас на компе Винда то как работает?
Нет, именно когда захочется. Это ядро устанавливает свои таймеры и другие прерывания. Задача может только попросить дать ей побольше времени.Не "когда захочется", а по границам тайм-слотов. И "помешать" ей можно просто установкой более высокого приоритета по отношению к остальным задачам.
Споры спорами, но подходы обсуждаются реально применяющиеся. Если кому-то будет интересно, он сможет хотя бы поверхностно про них здесь почитать.если что, никого не хотел обидеть
просто озвучил как эти терки выглядят со стороны
Re: Не могу понять код опроса кнопки STM32
COKPOWEHEU, многа букав пишите. Чукча не читатель?
даже скриншоты, если вы не помните свои слова. Прискорбно, что вы стали отказываться от собственных слов и приписывать их якобы мне. Так только псако-политики делают. Видимо, сейчас это популярно - перевести стрелки. Вот смотрите и любуйтесь своим текстом, это написали именно вы:

Так что, коль вы даже не помните, что сами писали, то дальнейшие споры с вам считаю бессмысленными. Вы всё равно не готовы слышать собеседника, а только уперлись рогами в землю и обвиняете других, не глядя на себя самого. Меня вы ничем не убедили, вы неправы, и точка. Пока не осознаете, в чем вы неправы и пока не разберетесь, как работает ОС - вы ничего не поймете.
[uquote="a797945",url="/forum/viewtopic.php?p=4220314#p4220314"]просто озвучил как эти терки выглядят со стороны[/uquote]
Эхехех, вы бы лучше чего по делу озвучили. А то как осуждать других со стороны, так все горазды, а как по делу чего разобраться, с теми же кнопками, так все язык засунули поглубже и в незнайку играют.
С помощью каких инструментов она будет "просить больше времени"? А "побольше" - это сколько конкретно "побольше"? А по какому критерию она будет просить?
Нет таких понятий, как "побольше времени". Но есть понятия приоритетов в системе. Повышенный относительно других задач приоритет будет давать задаче право первоочередного доступа на исполнение, и как следствие, больше процессорного времени. Выражаться то нужно на общепринятых терминах, чтобы все однозначно понимали, о чем речь идет.

А сейчас вы уже говорите, что "чуть проще, чуть меньше". То бишь, выгода "чуть-чуть".
Вот вы всё время пытаетесь обвинить меня, а сами городите то, чего вообще нет. Вы хотябы потрудитесь хоть немного почитать материалы. Да, сейчас стиль псако-политики очень популярен: Белоруссия, стоящая на берегу моря, и горы в Ростове-на-Дону. Вот и у вас так же.
та нивапрос!Цитату в студию!
Так что, коль вы даже не помните, что сами писали, то дальнейшие споры с вам считаю бессмысленными. Вы всё равно не готовы слышать собеседника, а только уперлись рогами в землю и обвиняете других, не глядя на себя самого. Меня вы ничем не убедили, вы неправы, и точка. Пока не осознаете, в чем вы неправы и пока не разберетесь, как работает ОС - вы ничего не поймете.
[uquote="a797945",url="/forum/viewtopic.php?p=4220314#p4220314"]просто озвучил как эти терки выглядят со стороны[/uquote]
Эхехех, вы бы лучше чего по делу озвучили. А то как осуждать других со стороны, так все горазды, а как по делу чего разобраться, с теми же кнопками, так все язык засунули поглубже и в незнайку играют.
У ядра есть один таймер - системный, отсчитывающий системные тики. Он синхронизирован с тактовым сигналом микрокрнтроллера. Из "других прерываний" ядро ОС использует прерывание системного таймера и прерывания системных вызовов для обслуживания системных запросов. Остальные прерывания и таймеры являются пользовательскими.Это ядро устанавливает свои таймеры и другие прерывания.
Задача, она что, человек чтоль, что "просит побольше времени"?Задача может только попросить дать ей побольше времени.
Нет таких понятий, как "побольше времени". Но есть понятия приоритетов в системе. Повышенный относительно других задач приоритет будет давать задаче право первоочередного доступа на исполнение, и как следствие, больше процессорного времени. Выражаться то нужно на общепринятых терминах, чтобы все однозначно понимали, о чем речь идет.
А до этого вы утверждали, что дескать "кооперативная многозадачность выгоднее" (пролистайте тему выше и перечитайте собственные мессаги. Если не найдете - я заскриншотил, могу показать, штоба не отказывалисьОсновные преимущества - чуть проще в реализации и чуть меньше накладных расходов.
А сейчас вы уже говорите, что "чуть проще, чуть меньше". То бишь, выгода "чуть-чуть".
Вот вы всё время пытаетесь обвинить меня, а сами городите то, чего вообще нет. Вы хотябы потрудитесь хоть немного почитать материалы. Да, сейчас стиль псако-политики очень популярен: Белоруссия, стоящая на берегу моря, и горы в Ростове-на-Дону. Вот и у вас так же.
- AVI-crak
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Сб янв 09, 2016 15:51:17
- Контактная информация:
Re: Не могу понять код опроса кнопки STM32
Прекратите мацать слона в тёмной комнате. Слону конечно нравится, но могу подсказать - это не хобот!!!
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Не могу понять код опроса кнопки STM32
Ну так учитесь читать длинные осмысленные посты. Если все же найдете в себе силы осваивать операционные системы, пригодится: там текста гораздо больше и он сложнее, чем мои объяснения на пальцах. Хотя если вы даже их понять не можете, у меня для вас плохие новости...COKPOWEHEU, многа букав пишите
Ну кто бы сомневался, что эта цитата не будет иметь никакого отношения к вашим фантазиям.Цитату в студию!та нивапрос!
Повторяю: мне неинтересно слушать ваши голословные обвинения и фантазии.Меня вы ничем не убедили, вы неправы, и точка. Пока не осознаете, в чем вы неправы и пока не разберетесь
У ядра есть все таймеры и все прерывания. Работа с железом - задача ОС, а не юзерспейса.У ядра есть один таймер - системный, отсчитывающий системные тики.
Повторяю: хватит придуриваться. Вы прекрасно поняли о чем речь, но пытаетесь цепляться к словам.Задача, она что, человек чтоль, что "просит побольше времени"?
как вам удается "меньше накладных расходов" противопоставлять "выгоднее". Или для вас чем больше процессорного времени тратится впустую, тем оно эффективнее?А до этого вы утверждали, что дескать "кооперативная многозадачность выгоднее"
Re: Не могу понять код опроса кнопки STM32
Занавес! А что же тогда делают драйвера периферии? Мдяяя....Работа с железом - задача ОС, а не юзерспейса.
Кто еще так считает? Тут вообще есть граждане, имевшие дело с распространенной FreeRTOS? Скажите, как по-вашему, работает ли операционная система (её ядро) непосредственно с железом, кроме как с системным таймером и исключениями ядра для системных вызовов? Кто-нить тут разбирается?
сли все же найдете в себе силы осваивать операционные системы,