Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Не могу понять код опроса кнопки STM32

Сб апр 23, 2022 20:59:57

НовыйДень писал(а):Занавес! А что же тогда делают драйвера периферии? Мдяяя....

Коллега, не будь так категоричен. Тут дело в том, какую степень близости к "железу" закладывают авторы ОС. Поэтому и COKPOWEHEU тоже несколько категоричен в своём утверждении. ИМХО, в данном случае истина ровно посередине между вашими мнениями. Хотя, следуя логики классических учебников по ОС, утверждение COKPOWEHEU справедливо, а вот реалии таковы, что не все ОС берут на себя управление "железом", тут твоя правда, НовыйДень.

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 08:20:22

Занавес! А что же тогда делают драйвера периферии? Мдяяя....

Попробуйте из своей винды попосылать ATA-команды жесткому диску, получится это сделать без админских прав?
Нет, не получится, потому что работа с железом и распределение памяти и процессорного времени это задача ядра. То, что вы слышали только про примитивные ОС без разделения прав доступа (в вашей RTOS хотя бы разделение юзерского и машинного кода есть?), ограничения доступа к памяти и периферии, динамического приоритета, на значит, что это везде так. Это сделано только ради экономии памяти и скорости, и допустимо только для монолитной системы, когда все процессы известны заранее.
с ОСРВ я работаю уж лет 10

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

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 08:34:51

если мне не изменяет память, Windows вплоть до Win95 была кооперативной ОС, и только с появлением NT стала содержать элементы "принуждения" для потоков...

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 09:25:54

А кто-нить тут понимает разницу между ОС компьютера и ОСРВ микроконтроллера? :))) Не ожидал от контингента Радиокота такого низкого уровня.
Потому как даже в балшом кампутере ОС с железом работает через драйверы. Драйвер видеокарты, драйвер HDD, драйвер звука, драйвер сетевой карты. Просто они написаны через API, принятое в ОС. Но они не являются составом ядра ОС. То, что стандартные драйвера устройств поставляются вместе с ОС, не говорит о том, что ядро ОС работает непосредственно с видеокартой, например. Это просто заблуждение. ОС работает с видеокартой через API драйвера видеокарты, который, в свою очередь написан так, что может работать в этой конкретной ОС. Тут всё просто.

Та же ситуация и в ОСРВ микроконтроллера. ОСРВ не имеет привязки к физическим входам-выходам, интерфейсам SPI, I2C, UART, RTC, LTDC, ADC и тому подобным. Операционка (универсальная) имеет небольшой файл портирования, обеспечивающий привязку к ядру МК, но не ко всей периферии.
Доводилось видеть единичных изобредателей, пытающихся написать подобие операционки, впихнув в нее работу с периферией МК. Но такие операционки были обречены на провал из-за их ограниченности. COKPOWEHEU, как видно, ратует именно за такую операционку. Но этот вариант не получил распространения именно из-за его ограниченности, фактически из-за дублирования.
В частности, COKPOWEHEU предлагал внедрить в стандартную библиотечную ф-цию strlen пользовательский код, выполняющий проверку системного таймера с целью узнать, истекло ли время или нет. Причем, в этом случае он не пояснил, как часто нужно выполнять эти проверки, сколько раз нужно дублировать этот код в ф-ции strlen. Это конечно, "изобредательство", достойное звания "индусский код".
Чего конкретно обсуждает COKPOWEHEU, понимает только он сам, поскольку его мотает из стороны в сторону, и он уже даже сам запутался, что он говорил и не признает свои же слова. Единственное, в чем он преуспел, так это в полемике - способности переврать слова и обвинить других в собсвенных бедах. Псаки гордилась бы им.

КА - это не синоним многозадачности. КА - это просто блок с набором состояний.
И напрасно COKPOWEHEU пытается что-то противопоставить моему 20-летнему опыту и знаниям, его обвинения так же смешны, как утверждения Псаки о морских берегах Белоруссии :))) COKPOWEHEU просто начинает слишком хорошо изворачиваться и уходить в сторону, закидывая какашками в ответ, чтобы не признать свое поражение. Вот и всё, соппсна...

разделение юзерского и машинного кода

Машинный код? Хм. Это который
200001ce: b480
200001d0: af00
200001d2: bf00
?
Или быть может имеете ввиду привилегированные режимы доступа, защищенные области памяти и тому подобное? Так это не "машинный код"! Вы бы терминологию подтянули, чтоль :) А то ваш "мышинный код" вызывает снисходительную улыбку.

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 10:50:43

А кто-нить тут понимает разницу между ОС компьютера и ОСРВ микроконтроллера?

Да все понимают кроме вас.
Потому как даже в балшом кампутере ОС с железом работает через драйверы. Драйвер видеокарты, драйвер HDD, драйвер звука, драйвер сетевой карты.

Они в юзерспейсе работают по-вашему?
COKPOWEHEU, как видно, ратует именно за такую операционку.

Учитывая, что я уже штук пять разных описал, с разными подходами, какую именно "такую" вы пытаетесь мне приписать?
В частности, COKPOWEHEU предлагал внедрить в стандартную библиотечную ф-цию

Не предлагал, а описывал существующее (точнее, существовавшее).
КА - это не синоним многозадачности. КА - это просто блок с набором состояний.

КА это простейший способ организации многозадачности.
И напрасно COKPOWEHEU пытается что-то противопоставить моему 20-летнему опыту и знаниям

А чего тут противопоставлять. У меня знания есть, я мим делюсь. У вас нет, вы только бред несете, причем без малейшей конкретики.
утверждения Псаки о морских берегах Белоруссии

Это здесь каким боком?! Зачем вы в какую-то политику или еще хз куда сползаете? Думаете, так ваш бред будет солиднее выглядеть?
Машинный код? Хм. Это который

Если бы я написал Machine mode, Hypervisor mode, System mode, User mode, вам бы это ничего не сказало ввиду отсутствия базовых знаний, поэтому и упрощаю чтобы даже вы поняли. Не знаю как бы вам еще проще объяснить. На аналогиях с зайчиками что ли?!

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 11:11:22

Так между словами Code и Mode есть разница? Для вас, вижу, нет, даже визуальной. Впрочем, довольно этого цирка. Вы показали наглядно, что слишком хорошо изворачиваетесь, не желая признать даже долю своей неправоты. Это поведение псаководов.
На этом ставлю жыыырную точку. Дальше можете хоть обосраться от счастья, все равно ваш уровень слишком слабый, зато вы хорошо преуспели в полемике стипя псаки.

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 16:51:13

Так между словами Code и Mode есть разница?
Для вас, очевидно, нет.
не желая признать даже долю своей неправоты
Только потому что какой-то политически озабоченный неуч об этом орет? Я вас огорчу, чтобы я признал неправоту, нужны факты, а не крики.
На этом ставлю жыыырную точку.
То есть наконец-то прекратите нести свой бред? Ну наконец-то!

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 16:57:44

кстати, функция yeild (если я правильно написал) была и в кооперативках, есть и в других, в т.ч. rtos, да и sleep никто не отменял - все эти функции принудительно переключают задачи.

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 16:58:14

COKPOWEHEU писал(а):работа с железом и распределение памяти и процессорного времени это задача ядра

Нифига. Пример- QNX. Кстати, и MINIX построена по такому же принципу.
COKPOWEHEU писал(а):Они в юзерспейсе работают по-вашему?

Не в ядре! У х86 так-то 4 уровня привилегий. 0- это ядро, 3- юзверь. А между ними ещё 2, вот в них и работают.
НовыйДень писал(а):А кто-нить тут понимает разницу между ОС компьютера и ОСРВ микроконтроллера?

Нет никакой разницы. Опять же, ядро QNX занимает всего 8К, ИМХО, немногим более FreeRTOS. :)))
НовыйДень писал(а):Просто они написаны через API, принятое в ОС

Совершенно верно. Подсистема ввода-вывода может работать не в пространстве ядра, тогда у одного ядра могут быть разные API для работы с периферией. И работой с периферией происходит через менеджер периферии, который для ядра ОС является обычной задачей.

Судя по вашим постам, вы кроме Выньды и Линукса из ОС ничего не пользовали. Почитайте, например, про QNX. Только не трогайте ядро NT. Это химера, полученная путём скрещивания ёжика с ужиком, то бишь микроядерной ОС, основанной на передаче сообщений, и монолитной а-ля MS-DOS.

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 16:59:56

это я к тому, что никто не мешает писать функции, заставляя в нужных местах ОС переключать задачи.

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 17:54:16

это я к тому, что никто не мешает писать функции, заставляя в нужных местах ОС переключать задачи.

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

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 18:37:51

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

как бы реплика со стороны, только и всего...

Re: Не могу понять код опроса кнопки STM32

Вс апр 24, 2022 21:56:12

кстати, функция yeild (если я правильно написал) была и в кооперативках, есть и в других, в т.ч. rtos, да и sleep никто не отменял - все эти функции принудительно переключают задачи.
Вы, наверное, имели в виду добровольно. Вызывая функцию ожидания поток говорит ядру "мне процессорное время пока не нужно, отдай кому-нибудь другому".
Нифига. Пример- QNX. Кстати, и MINIX построена по такому же принципу.
Это уже развитие в другую сторону: вместо работы с устройствами напрямую ядро делегирует эту задачу (и соответствующие права) выделенным процессам.
Не в ядре! У х86 так-то 4 уровня привилегий. 0- это ядро, 3- юзверь. А между ними ещё 2, вот в них и работают.
Это с какой стороны посмотреть. Про х86 сказать не могу, но в RISC-V тоже 4 уровня: машина, гипервизор, система и юзер. А учитывая сказанное вами ранее, работа с устройствами может быть проброшена на любой уровень.
Тут, правда, возникает вопрос что считать ядром - гипервизор или гостевую ОС. Скорее всего, все же гостевую, ведь ей либо пробрасывают реальные устройства, либо эмулируют виртуальные. А гипервизор работает скорее в упомянутой вами философии микроядра: раздал кому надо права, а в тонкости не лезет.
А кто-нить тут понимает разницу между ОС компьютера и ОСРВ микроконтроллера?[/quote]
Нет никакой разницы.

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

Re: Не могу понять код опроса кнопки STM32

Пн апр 25, 2022 06:48:33

COKPOWEHEU писал(а):Это уже развитие в другую сторону: вместо работы с устройствами напрямую ядро делегирует эту задачу (и соответствующие права) выделенным процессам.

Это просто другая архитектура построения ОС. Я же не зря выше заметил, что кроме Выньды и Линукса спорщики ничем не пользовались и не узучали.
COKPOWEHEU писал(а):Контроллеры заточены под быструю и предсказуемую реакцию на внешние события при малой вычислительной нагрузке, поэтому для них обычно пишут на регистрах, конечных автоматах и ОСРВ.COKPOWEHEU,

Вооот, я же говорю, что курс по ОС вам в институте не читали, и сами вы не изучали и не пользовались. Например, QNX- это ОСРВ, для которой детерминировано время реакции на внешние события.
COKPOWEHEU писал(а): Скорее всего, все же гостевую, ведь ей либо пробрасывают реальные устройства, либо эмулируют виртуальные. А гипервизор работает скорее в упомянутой вами философии микроядра: раздал кому надо права, а в тонкости не лезет.

Какай, нафиг, гипервизор, какая гостевая ОС? Блин, вы чё? Это ядро так устроено! И сделано это было аж в начала 1980-х, когда на х86 появился защищённый режим. Почитайте устройство OS/2, которая на всю катушку, в отличие от Выньды, использовала возможности х86. А ещё лучше, изучите устройство QNX, тогда ужаснётесь, как много вы не знаете об ОС.

Re: Не могу понять код опроса кнопки STM32

Пн апр 25, 2022 09:19:17

Это просто другая архитектура построения ОС. Я же не зря выше заметил, что кроме Выньды и Линукса спорщики ничем не пользовались и не узучали.
Дело не в винде и линуксе, дело в соображениях безопасности. Нельзя просто так давать всем юзерским приложениям доступ ко всей памяти, периферии и прочему. Соответственно, ядро должно хотя бы раздать права доверенным приложениям.
Например, QNX- это ОСРВ, для которой детерминировано время реакции на внешние события.
Продолжайте свою мысль. Пока никакого противоречия с моими высказываниями не вижу.
Какай, нафиг, гипервизор, какая гостевая ОС?
Я говорю об уровнях привилегий процессора и коде, который на них работает. Открываем документацию на процессор и видим Machine mode, Hypervisor mode, System mode, User mode и наборы регистров, которые на них доступны. Для машины у них будет префикс m, для гипервизора h, для системы s, для юзера u. Например, регистр адреса возврата из прерывания mepc, hepc, sepc, uepc (хотя не уверен, возможно, юзерские прерывания уже выкинули из спецификации).

Добавлено after 2 minutes 59 seconds:
тогда ужаснётесь, как много вы не знаете об ОС.
Я не спорю, что многого не знаю, но о чем не знаю, я и не говорю. Например, я не знаю как называются уровни привилегий в x86, так я сразу сказал, что говорю про risc-v. Я не знаю какова точно конвенция сохранения регистров в arm, так я и говорю про risc-v и avr. Общая-то суть остается одинаковой.
Впрочем, если у меня есть фактические ошибки - укажите на них.

Re: Не могу понять код опроса кнопки STM32

Пн апр 25, 2022 09:23:35

самое главное, что все это непосредственно касается опроса кнопок на конкретной архитектуре...

Re: Не могу понять код опроса кнопки STM32

Пн апр 25, 2022 10:01:54

Здесь же священный спор: сидеть в суперлупе с конечными автоматами или же не вылезать из прерываний; не допускать блокирующих операций или абдуринничать; разбивать все тяжелые операции на элементарные или абдуринничать; писать нормальный код без сторонних говнолиб или же абдуринничать…

Re: Не могу понять код опроса кнопки STM32

Пн апр 25, 2022 10:42:39

Eddy_Em писал(а):писать нормальный код
ну, поскольку тут пошел уже сплошной оффтоп, скажу и я.

я за свою жизнь имел счастье/несчастье видеть много чужого кода. и ни один вариант я не могу назвать "нормальный" - при виде любого чужого кода у меня на языке вертится "какой дебил так пишет?!"

скачивал Windows DDK с кучей примеров в исходниках. казалось бы, ведущая фирма-разработчик ПО, уж у них-то код должен быть на уровне, там же рефакторинг, контроль, тестирование и т.п. куда там! если считать, что чем сильнее раздроблен код на функции, тем качественнее он, то да, майкрософтовский код идеален, полно функций типа
Код:
int user_data_invalid_set_value_driver_usart_vitality_exception_loop(LPTRN_vector *data_user_invalid){
   return data_user_invalid->invalid_def_data ? 0 :  data_user_invalid->invalid_def_data->error_definition->text;
}


открываешь сишник - там одна (одна, Карл!!!) функция.

про исходники на Delphi, с которой у меня самые теплые отношения, я вообще молчу - даже в книгах (в книгах, Карл!!!) приводятся примеры, за которые положено убивать путем запихивания клавиатуры в задницу с проворотом.

и каждый, кто написал хоть три строки кода, считает себя вправе рассказывать, как ПРАВИЛЬНО писать код...

кто-то подвинут на MISRA, хотя на 99% пишет несовместимый с ним код, кто-то на Буче, кто-то на Страуструпе... и тем не менее то, что они делают, так же ужасно, как то, что они критикуют.

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

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

Re: Не могу понять код опроса кнопки STM32

Пн апр 25, 2022 11:30:49

ARV писал(а):и каждый, кто написал хоть три строки кода, считает себя вправе рассказывать, как ПРАВИЛЬНО писать код...

Хороший, качественный, прозрачный, быстрый, защищённый...
Всё это умещается в одно слово - красиво.
А красиво бывает только в одном случае, когда не мешают в одну кучу содержимое блоков и слоёв.
Пределы видимости игнорируют 99,99% программистов. Почти любой исполнительный файл для вин приложения - содержит шапку из 10-30 подключаемых хидеров. Там священная война за абстракции дала сбой - оружие раздали, а врага не показали. В результате простые вещи абстрактно обзываются по сотни раз, собираются в мега_длинные структуры, и весь этот кал тащится через несколько слоёв, для простых математических операций.

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

Re: Не могу понять код опроса кнопки STM32

Пн апр 25, 2022 11:40:39

AVI-crak писал(а):Всё это умещается в одно слово - красиво.
а красота - понятие субъективное.
AVI-crak писал(а):Пределы видимости игнорируют 99,99% программистов.
и это не мешает существованию 99,99% успешно работающих, прекрасных и полезных приложений

и что же из этого следует?

вспомнилось: каждая программа содержит хотя бы одну ошибку. самая простая программа состоит из 1 строки. следовательно, безошибочная программа не содержит ни одной строки.
Ответить