DrobyshevAlex

Members
  • Публикации

    621
  • Зарегистрирован

  • Посещение

Репутация

8 Обычный

О DrobyshevAlex

  • Звание
    Завсегдатай

Информация

  • Пол
    Мужчина
  • Город
    Армавир

Электроника

  • Стаж в электронике
    Не связан с электроникой
  1. Компиляция для STM32

    Эх... как же тяжко... я спросил, лишь, код выполняется параллельно или последовательно, а вы начинаете писать о компоте и мухах) Вы мне ответили, что параллельно) При чем тут вообще стиль кода??) Мдя, вот после этого я вас даже читать дальше не хотел)) Допустим вы пишите код, ну простенький сервер для игры. Вы просто пишите код, не создавая треды, а компилятор сам за вас это делает? Вы вообще в курсе что такое треды?) Компилятор умнее, ага. нафиг программисты)) То есть по сути типы которые FreeRTOS писали тоже дурные, зачем они кодили разделение на потоки если это компилятор сам сделает. То есть берем пишем просто, ну очень упрощенно вариант раскидывание клиентов для игры по комнатам и выполнение апдейт цикла комнат while(client = getClient()) { room = getNextRoom(); room->addUser(client); room->update(); } Все, дальше умный компилятор, сам создаст пулл потоков в зависимости от количества ядер, он же компилируя знает сколько их. А еще он будет плавающий, то есть зачем пладитьп отоки в памяти, и если новый не нужен не создавать. Более того, он еще и к субд создаст пулл коннектов, и будет всегда брать свободны коннект, а если закончились то ждать. И функцию апдейт он так же знает что нужно выполнять параллельно, будет брать из пулла свободный поток, брать из очереди пакет от клинета, и выполнять позаботившись о том, что бы другой поток не перезаписл где то в другом месте что то, то етсь он даже сам знает где мьютексы расставить) Блин, продайте мне свой компилятор)) Но потом, кое что вы написали как будто знаете о чем говорите))
  2. Компиляция для STM32

    Давайте без ругательств) Холивары были етсь и будут есть. Постоянно писать фразы типа Пытаясь показать что он крутой прогер... ну это такое себе доказательства. К чему вообще пальцем тыкать, а вот он делает так... Я уже привел несколько примеров прогеров с гугла и эйпла. Просто сказать я считаю что у ртос преимущество такие то, удобно сделать то то. Чо вот это переходить на личности, или ставить кого то в пример, а может он гавно ест, так мне тоже есть?) Сорри за мой французский)) Да, если брать пояснение как работают потоки в ОС, и это так, ясное дело что просто так задержка в 100 мс не появится) Но какая то появится естественно, ибо код есть, и он занимает не мало места, а значит на его выполнение нужно время)) Или эти крутые программисты написали код таким образом что он включает сразу все в себя, даже если ты не юзаешь, например stream он все равно включает даже если ты не подключил инклуд, ну то есть оне не вынесен отдельно, или сразу идет все в зависимостях друг от друга... Тогда я сомневаюсь в тех программистах)
  3. Компиляция для STM32

    Как так то? Не имеет отношения к ос но все же оно в ос... Это как раз таки только к ОС в данном случае и имеет отношение Именно ОС следит за распределением ресурсов МК среди задач. О чем вы всегда пишите что мне еще очень далеко а я спрашиваю где я не прав а вы не тыкнете пальцем) Чем отличается мк от "больших машин" в данном вопросе? Я лишь спросил тут идет распределение ресурсов именно, то есть две функции выполняются прям параллельно, с учетом тиков ОС и приоритетов, или же просто эмуляция, по факту выполняется вначале полностью одна потом другая. Вы ответили что параллельно, мне это и нужно было знать) Что, как уже писал выше, и следует из того, что юзаются семафоры) Значит в МК есть возможность после прерывания стартануть выполнение программы с любого адреса а не с того, на котором она была до прерывания. - вот этого я не нашел как сделать в atmega8 Да, про MDA уже почитал, спасибо, но я пока хотел понять суть работы этой FreeRTOS, что она реально делает, не разбирая пока по полочкам ее исходники. Ну я вижу, в том, что для меня не нужно кодить эту самую многопоточность) Если вдруг она реально пригодится. Если б я делал это для работы, или себе много делал чего, то может свое бы написал уже, необходимый минимум, что бы не было лишних тормозов, а по вашим словам там есть проверки от дурачка лишние. Ну вот я тоже привык делать чтобы скорость была выше, все таки сервера не терпят 100 мс лагов)) По этому мы писали вначале с разными там ace wrappers и boost asio а потом отказались (а они очень даже шустрые, оч хорошими программистами думаю пишутся, вряд ли хуже тех кто FreeRTOS написал), и написали свою упрощенную версию, для шустраты работы, и хуже не сделали, уже не один год работает) Но все же, как я написал чуть выше, в данной ситуации, я ради того что бы посмотреть это, заюзаю видимо в главном блоке, ну как минимум потому что я пока не вижу нужды там скорости работы большой, ну и я еще не писал под стм Нужно посмотреть что юзают люди. Да и накодить мне видимо будет все таки проще юзая thread + queue + events. Чем городить свое на один раз. Вообщем мой вывод, если @AVI-crak Home говорит правду, про то как происходит обработка кода в параллельных тредах, то данная ОС дает хороший функционал. Не юзал, не знаю скорости работы. Но для некоторых проектов однозначно можно использовать, если свое лень кодить, или это разовое что то и не требует скорости работы. Вот тут не понимаю. FreeRTOS вроде бы не несет функционал настроек данных, через структуры. Это, я так понимаю HAL. Так что тут уже немного другой холивар Я пока про RTOS выясняю)
  4. Компиляция для STM32

    так, постараюсь более понятно переформулировать вопрос. Имеем две функции с длинным кодом, выполнение пусть 100 мс каждый код. Без delay, именно код выполняется. Они запущены в двух различных тредах с одинаковым приоритетом. Вначале выполнится полностью код одной функции, потом второй, потом опять первый и тд? Или выполнится на время 1го такта ОС код из однйо функции на время второго такта из второй, третий такт из первой и тд... То есть код внутри одной функции остановится без различного рода delay и начнет выполнятся код другой функции, а через 1 тик процессора вернется на то место где уснул в первой функции? Или все же там многопоточность как у питона с GIL, пока одна функция не дойдет вторая будет ожидать? Да я полный идиот, если я считаю что не всегда 100 мс простоя ненужного может убить прилу)
  5. Компиляция для STM32

    Ткните пальцем в то место где я не понял пожалуйста) где я написал неверно) FreeRTOS не служит инструментам асинхронного выполнения кода разбивая на кодинг на треды?) А мк управляет форсунками ДВС. НУ и черт с ним что двигатель не заводится)) зато РТОС есть)
  6. Компиляция для STM32

    Ну так а объем кода не ухудшает чтение? Или вы видите в строке все, или же вам надо скролить что бы увидеть всю инициализацию чего то)) Ну так я и сказал что это минут, а в РТОС разве код потоков выполняется внутри прерывания? Я прочел что таймер нужен для обеспечения равных тиков, или как человек выше любит слово "квантов" времени) И вот он может переключатся, то етсь шла моя функция где то тут var ++; <-- а тут прервалась и началась другая функция lcd_draw(var); Понятно что приоритет прерываний может это обеспечить) И более высокоприоритетное прерывание будет это делать, но там же юзается только 1 таймер с 1 прерыванием для выполнения всех потоков параллельно или я ошибся и код одного потока дойдет до конца?)
  7. Компиляция для STM32

    Это я понимаю, я вот выше написал чего не понимаю)) Про то как код запустить с другого места. Вот например у меня выполняется отправка чего то на сервер, или вывод на дисплей, а мне пришло прерывание от датчика дума например, я хочу бросить все и начать выполнять другой код, то есть это вообще не проблема, если выполнять его в прерывании, но это же повесит систему прерываний на время выполнения кода, я бы хотел выставить флаг и перейти в основной цикл. И иметь возможность еще какое либо важное прерывание не пропустить) Просто судя по тому что есть мьютексы, доступ к одной переменной может быть из разных потоков "одновременно" то есть где то с интервалом пару тиков процессора. А это значит что мк не выполняет код одного треда до упора как это делает тот же питон. А значит можно реализовать то что я описал выше с флагом и выполнением параллельно кода. Понятно, что это сомнительная нужда, но все таки может где то понадобится в более важном месте.
  8. Компиляция для STM32

    Вот именно такая мысль у меня была когда куб предложил заменить таймер системный на любой другой) До сих пор не понял зачем)) что мне помещает в любом месте потом испортить не системный таймер )) Спор о чтении кода, по мне табуляция, пробелы и скобки влияют на читабельность куда больше чем уход от битовых операций к структурам)) Мне пока понравилось то, что там реализована многопоточность, плюс сейчас в офф доке нашел что есть еще Events system. Понятно что не проблема себе самому написать систему такую, да и без лишних проверок что бы не тратить ресурсы, но это если заниматься таким часто, а я же возможно первый и последний раз пишу код такого обхема, это же только с своих нуждах)) Ну вот я в данном случае, не понимаю как по таймеру запустить выполнение кода с другого места)) А в freeRTOS я так понял это реализовано) если она опенсоурс то можно конечно глянуть) Я как то гуглил, как мне по таймеру запустить код не с того места где он выполнялся в момент срабатывания прерывания, и я НЕ нашел! Возможно плохо искал, или атмега 8 этого не позволяет...
  9. Компиляция для STM32

    А где там каша?) Я лет 15 знаю что такое семафоры, треды и очереди, я писал для 3х мморпг сервера на плюсах, пулл (менеджер) тредов писался как раз мной) Просто в 4 утра не спалось, успел прочесть бегло только 3 статьи) А под мк я в целом мало писал, в основном под линукс... Тут же все пишут юзайть надо рилТайм юзать! и хоть бы кто написал в кратце что это вообще, хоть пару плюшек, типа многопоточность/асинхронность. Все что я увидел тут, это "диспечер ресурсов" каких? следить за деньгами? следить за утечкой памяти при освобождении переменных созданных через new? Управлять массивом ресурсов, который у нас называли менеджером ресурсов? Или еще какой то? А вот прочитав три статье, теперь хоть немного имею представление о возможностях потоки + очереди это то что я привык юзать, теперь главное что бы они работали, а не то что Кокос закрылся, гугл+ закрывается, так и фрииРтос забросят выяснив что там что то тупило ой, забыл, там же все таки лучшие программисты) так что пошел дальше читать про фрииРтос Но, вот я делал гирлянду с программным шимом на атмеге8 на 8 шим каналов, мне надо было минимум затрат ресурсов, что бы светодиоды успевали все отработать как надо, с учетом того что еще и проводов всего 8, то есть 2 общих и 4 канала, и мне там RTOS вряд ли пригодилась бы. Или вот у меня блок один, это nrf24 работающий только на передачу когда сработает прерывание от геркона. Зачем мне там ртос?) Ну, у меня так то там атмега8, но если б я накупил ток смт32 и кодил все на нем вряд ли я бы видел смысл, от ртос, что она там етсь что нет разницы 0. памяти достаточно, код генерируется автоматически, так что на количество строк написания не думаю что повлияло бы) С другой стороны, там мк у меня все время в powerdown пока прерывание не сработает, я даже на текущий момент не уверен, не повредила ли бы мне rtos)) Прерывание будет мк и ставит только 1 флаг. цикл проснулся из за прерывания, флаг есть? вызвал отправку команды, все опять выключились. Ну хоть не НАНО Открыл вики, все что там увидел, это то же самое, это инструмент для многопоточности и все в целом. Меня устраивает для главного блока. и что же вы думаете когда я кликнул по ссылке документация на русском?) Русскую документацию на которую ссылалась вики уже забросили...
  10. Компиляция для STM32

    Почитал про FreeRTOS, ну, многопоточность + семафоры/мьютексы + очереди - все это очень даже заманчиво для крупных проектов) Я привык кодить асинхронно. Но нужно еще разобраться, как там устроена эта многопоточность) Но с другой стороны, потоки как у питона я не особо люблю) они ж выполнятся так же поочередно, ну разве что плюсом можно назвать разбитие удобное кода на потоки... А выходит, создай массив указателей на функции, и вызывай по очередности те же самые функции... Конечно для варианта с приоритетами придется немного усложнить самописный код)) Но, беглый осмотр статей показал, что тут многопоточность тут не как у питона, ну хотя бы даже наличие семафоров говорит о том что ОС не будет ждать полного выполнения потока перед запуском второго, и это не может не радовать)
  11. Компиляция для STM32

    Не хочу встревать в спор)) Просто сарказм конечно я обажаю, но сколько раз гугл-кодеры накосячили? последний раз буквлаьно неделю назад была новость, при публикации ссылки в профиле гугл+ Решили закрыть вообще Google+ эйпл например от подбора паролей мобильную версию сайта не закрыл, и фоточки айклауда слил... Я уж молчу про майкрософт) Все мы люди... Но в ST работают лучшие) Какой смысл от очередного холивара юзать или не юзать) Для себя я решу юзать или нет глядя на проект, например для главного блока я хочу написать с использованием FreeRTOS хотя бы для того, чтобы понять чего бы я (возможно) лешился без RTOS, ибо там будет кода не мало, как минимум nrf24 для общения с отдельными модулями например на двери, камерой, выключателями света + rc522 + color lcd + кнопочек несколько + wifi для обращений к внешнему серверу в ДЦ + sim модуль если нет вайфая + автономная работа минимальная если нет электричества, отправка смс хотя бы о том что останется работать, датчик движения и открытия двери. Но с другой стороны, я не уверен хватит ли памяти) Хотя я часть логики видимо унесу в esp8266, изначально не хотел его шить, но думаю так будет удобней если я правильно спланировал все Но с другой стороны, на авр я без RTOS как то жил) И я представляю как это там сделать) Упрощенная версия без сим и lcd есть уже. Но, вот я пишу на авр, там тоже регистры, да там меньше возможностей, но меня пока не смущало набросать пару макросов вспомогательных и обозвать цифры через дефайны удобно. Если вот это int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_GPIO, ENABLE); GPIO_InitStructure.GPIO_Pin = LED1_PIN | LED2_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init( LED_PORT , &GPIO_InitStructure); LED_PORT->ODR ^= LED2_PIN; while (1) { LED_PORT->ODR ^= LED2_PIN; LED_PORT->ODR ^= LED1_PIN; Delay(0x7FFFF); } return 0; } Код без HAL то я не вижу тут ничего непонятного)
  12. Компиляция для STM32

    Нашел на сайте ST. Тут просто не совсем понятна проблема для меня) Я так понял из текста, что можно изменить приоритет данного таймера. И многие RTOS понижают его до минимального. Ну хорошо, но я нигде не нашел, что от этого таймера что то зависит в системе Ну понизят, а в чем беда?) Или это сделано на всякий случай, а вдруг я не буду подозревать этого, и заюзаю данный таймер в своих нуждах? А он с лоу приоритетом. Ну я то, если заюзаю его, то я знаю на что иду) Я с тем же успехом и другой выбраный таймер могу где то в коде заюзать, который ранее выбрал для timebase source... Или же они предупреждают, что другие библиотеки могут использовать прерывания в своих целях для функции delay например? Но опять же, если это так, то где ж тут защита от того что я или кто то не перенастроит вообще таймер в своем коде далее?)
  13. Компиляция для STM32

    Про Systick немного поясню) Я не понял для чего нужно выбирать для SYS -> Timebase source -> TIMx вместо Systick, если я выберу FreeRTOS. Я почитал несколько статей, и пока что приходит на ум, это два варианта 1) FreeRTOS имеет долгий код в прерывании таймера, и по этому рекомендуют использовать TIMx что бы не задерживать Systick. Хотя прерывание по TIM все равно будет же выполнятся И это будет вешать более low приоритетные прерывания. 2) Возможно TIM имеет большие настройки точности, что бы точнее функцию delay реализовать
  14. Компиляция для STM32

    Могу предположить что I/E = Внутренний/Внешний генератор. Ну вот тут не совсем понятно, понятно что множитель это вроде как просто, 8x2 это 16, но это все таки частота, и я считаю что она должна быть через равные промежутки времени) То есть откуда этот PLL знает частоту внешнего кварца? Ну да ладно, в целом я могу принять как должное) Умножил и все тут, не разбираясь в тонкостях 6 то ли он вычисляет промежутки, то ли просто не равные промежутки времени выходят, не суть, есть частота есть множитель, я знаю результат. А вот это уже интересней) То есть первый вариант это именно тактирование процессора, а LSI это только часов? Я припоминаю что я читал что мк содержит RTC с питанием от батареи. То есть эта настройка отвечает только за часы. Просто изначально я думал что для low частоты мк нужна эта настройка. Тогда вторая не трогается. Это и смущало) Вроде бы сейчас более менее понятно. Но остался вопрос о Был бы признателен за краткое пояснение @BARS_ пока писал, вы как раз отвечали. Ну в целом вроде бы с тактированием HSE/HSI я понял
  15. Компиляция для STM32

    Ну вот, даже тут я вижу две входные частоты.