Перейти к содержанию

Компиляция для STM32


DrobyshevAlex

Рекомендуемые сообщения

5 минут назад, DrobyshevAlex сказал:

Был бы признателен за краткое пояснение

Systick - системный таймер. Умеет просто тикать. На его основе удобно делать функцию delay. Можно настроить чтобы он тикал каждую миллисекунду, а дальше просто загонять в переменную значение и по событию от Systick декрементировать ее. Тактируется от тактовой ядра.

 

TIMx - обычные таймеры-счетчики, с прерываниями, переполнениями. Как в AVR, но функционал шире намного. Часть таймеров тактируется от APB1, а честь от APB2.

 

Есть еще вот такая программка, там довольно понятно изрисовано тактирование 10х серии. STM32generator.exe (я ей пользуюсь для настройки скорости UART чтобы ничего не считать). А начиная с 20х серии есть специальный Excel файлик (свой для каждой серии), который генерирует стартовый файлик для компилятора под заданные настройки тактирования. 

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, DrobyshevAlex сказал:

Могу предположить что I/E = Внутренний/Внешний генератор.

 

Так и есть. HSI - хай спид интернал генератор - работаем от внутреннего RC, HSE хай спид экстернал генератор, то есть внешний кварц. 

6 минут назад, DrobyshevAlex сказал:

Ну вот тут не совсем понятно, понятно что множитель это вроде как просто, 8x2 это 16, но это все таки частота, и я считаю что она должна быть через равные промежутки времени) То есть откуда этот PLL знает частоту внешнего кварца? Ну да ладно, в целом я могу принять как должное) Умножил и все тут, не разбираясь в тонкостях 6 то ли он вычисляет промежутки, то ли просто не равные промежутки времени выходят, не суть, есть частота есть множитель, я знаю результат.

PLL умножает частоту на величину заданную соответствующими битами регистра. Есть у нас кварц на 8 мгц, а нам этого не хватает, идем в регистр RCC->CR там выставляем бит HSEON - включили тактирование от внешнего кварца, далее в программе ждем установки бита HSERDY , идем в регистр RCC_CFGR там выбираем источник системы умножения наш HSE, и там же выбираем множитель PLLMUL, соответственно если множитель ==2, то тактовая будет 16 мгц, если множитель ==3 то тактовая будет 24 и.т.д После этого можно выставить биты SW для того что бы выбрать источник тактов микроконтроллера. LSI есть не во всех микроконтроллерах, надо смотреть даташит, она влияет только на внутренние часы если они есть.

По TIMx уже отписали. 

По таймерам, да и не только полно информации в интернете, только не надо вестись на простые примеры типа возмите куб. По началу страшно и не понятно, но после пары проб становится все понятным и простым. Без портянок.

 Вот про базовый таймер http://www.rotr.info/electronics/mcu/stm32_timer6_7.htm  http://www.rotr.info/electronics/mcu/stm32_tim6_7_example.htm их может быть 2 они самые простые. По ссылкам серия f100, но  для понимания  и помигать светодиодом в прерывании достаточно.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, elki сказал:

PLL умножает частоту

Это общее видимое действие, в реальности чуть сложнее.

PLL - это управляемый напряжением генератор высокой частоты (VCO) + управляемые делители образцовой и выходной частот + фазовый детектор + аналоговый фильтр. Всё вместе получается PLL - дико нестабильная штука, с диким фазовым шумом, и с невероятной чувствительностью к напряжению питания и температуре. Но благодаря обратной связи в виде фазового детектора - выходная частота всегда совпадает по фазе с образцовой частотой. Фазовый шум не исчезает полностью, по этому для очень ответственных вещей нужно что-то внешнее. 

PLL - это блок который не может стартовать мгновенно, или заранее. Ему сначала нужно подать готовую, заранее стабильную входную частоту. В случае с внешним кварцем - необходимо дождаться пока он станет стабильным (опрос флагов готовности). Записать значения делителей в PLL. И только после этого можно включать PLL. + нужно дождаться пока он станет стабильным. 

Есно переключаться на использование PLL в качестве основной частоты мк - можно после настройки делителей за основным переключателем + настройки латентности флеша. Вся схема из кубика читается стандартно слева на право и сверху вниз. И точно так-же обслуживается.

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

@DrobyshevAlex Вот тебе мой код настройки системы тактирования. Бери RM и смотри что последовательно происходит. Atollic абсолютно бесплатен и имеет отличные возможности в отладке.

void Sys_ClockInit(void)
{// HSE = 8000000; SYSCLK = 72000000; APB1 = 36000000; APB2 = 72000000
  FLASH->ACR = 0x30 | FLASH_ACR_LATENCY_2;  //

  RCC->CR |= RCC_CR_HSEON;                                                     //включаем генератор HSE
  while(!(RCC->CR & RCC_CR_HSERDY));                                           //ожидание готовности HSE
  RCC->CFGR = RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL9 | RCC_CFGR_PPRE1_2;          //источник тактовых сигналов дл¤ PLL выбираем HSE
  RCC->CR |= RCC_CR_PLLON;                                                     //включаем PLL
  while(!(RCC->CR & RCC_CR_PLLRDY));                                           //ожидание готовности PLL
  RCC->CFGR |= RCC_CFGR_SW_PLL;                                                //выбираем PLL для тактирования
}

 

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Про Systick немного поясню) Я не понял для чего нужно выбирать для SYS -> Timebase source -> TIMx вместо Systick, если я выберу FreeRTOS.

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

1) FreeRTOS имеет долгий код в прерывании таймера, и по этому рекомендуют использовать TIMx что бы не задерживать Systick. Хотя прерывание по TIM все равно будет же выполнятся :) И это будет вешать более low приоритетные прерывания.

2) Возможно TIM имеет большие настройки точности, что бы точнее функцию delay реализовать

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Цитата

Setting HAL timebase source By default, the STM32Cube HAL is built around a unique timebase source, the Arm® Cortex® system timer (SysTick).

However, HAL-timebase related functions are defined as weak so that they can be overloaded to use another hardware timebase source. This is strongly recommended when the application uses an RTOS, since this middleware has full control on the SysTick configuration (tick and priority) and most RTOSs force the SysTick priority to be the lowest.

Using the SysTick remains acceptable if the application respects the HAL programming model, that is, does not perform any call to HAL timebase services within an Interrupt Service Request context (no dead lock issue).

Нашел на сайте ST.

Тут просто не совсем понятна проблема для меня) Я так понял из текста, что можно изменить приоритет данного таймера. И многие RTOS понижают его до минимального.

Ну хорошо, но я нигде не нашел, что от этого таймера что то зависит в системе :) Ну понизят, а в чем беда?) Или это сделано на всякий случай, а вдруг я не буду подозревать этого, и заюзаю данный таймер в своих нуждах? А он с лоу приоритетом. Ну я то, если заюзаю его, то я знаю на что иду) Я с тем же успехом и другой выбраный таймер могу где то в коде заюзать, который ранее выбрал для timebase source...

Или же они предупреждают, что другие библиотеки могут использовать прерывания в своих целях для функции delay например? Но опять же, если это так, то где ж тут защита от того что я или кто то не перенастроит вообще таймер в своем коде далее?)

Ссылка на комментарий
Поделиться на другие сайты

9 hours ago, AVI-crak Home said:

Самый яркий пример это естественно хал. На нём очень легко писать код. Но если что-то сломалось - то проще написать заново, чем разобраться в причине поломки.

запишу эту в свою коллекцию бестолковой критики хал. За 3 года использования этой либы мне никто на реальном примере так и не смог пояснить в чем суть ее неправильности. Одни общие фразы непонятно о чем

10 hours ago, BARS_ said:

И опять же, ни один фанат говнолиб не может объяснить их преимуществ.

я смог обьяснить. По пунктам. Неоднократно. Никто правда чет не удосужился вникнуть...

зато теперь пишет

10 hours ago, BARS_ said:

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

что абсолютно не применимо в случае голого регистрового кода. Он НЕ читаем. А если и читаем, то только в первую неделю после окончания писанины. Уже через месяц

9 hours ago, AVI-crak Home said:

проще написать заново, чем разобраться в причине поломки

в общем... не убедительно вы аргументируете. То что код получается обьемный, это не минус. Рост обьема машинного кода заметен только на этапе конфигурации, потом растет очень медленно и в итоге разница на уровне статпогрешности к концу проекта. А если использовать LL то вообще никакой разницы. Мне лично памяти программ всегда хватало, а в таком разе чего парится то? Результат один и тот же, затраты времени в разы (!) меньше. Ну и опять же - говнокодеры из ST настоящие идиоты. Нужно всегда об этом помнить . Создали говнолибу на свою голову. Чуть ли не ардуинщиков и тру программеров делают. А кодеры из Keil еще и CMSIS OS запилили им в подмогу. Ваще дееебииилы!

 

А вас всех парниша развел на бесплатные курсы простым вопросом блондинки - мне тут с часиками нипанятнааа (на этом месте хлопает ресничками и дует губки). И вы как истинное стадо самизнаетекого айда с умными заточками пояснять :bye:

нынешнее поколение егэшных абаблов этот прием уже где только не применяет. И люди ведутся. В их время ценности были иные. А клипарю надо чтобы ему здесь и сейчас за 5, а лучше за 3 минуты раскидали то что люди копытили годами желательно бесплатно и он побежал колотить лавэ. Легкий бабатролинг и все. Мозгали у тя на пальце вертятся

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

27 минут назад, mail_robot сказал:

Ну и опять же - говнокодеры из ST настоящие идиоты.

Не хочу встревать в спор)) Просто сарказм конечно я обажаю, но сколько раз гугл-кодеры накосячили? последний раз буквлаьно неделю назад была новость, при публикации ссылки в профиле гугл+ Решили закрыть вообще Google+ 

Цитата

Сторонние разработчики имели несанкционированный доступ к данным 52,5 миллиона пользователей социальной сети Google+ из-за программной недоработки, говорится в сообщении компании 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 то я не вижу тут ничего непонятного)

Изменено пользователем DrobyshevAlex
Ссылка на комментарий
Поделиться на другие сайты

Почитал про FreeRTOS, ну, многопоточность + семафоры/мьютексы + очереди - все это очень даже заманчиво для крупных проектов) Я привык кодить асинхронно.

Но нужно еще разобраться, как там устроена эта многопоточность) Но с другой стороны, потоки как у питона я не особо люблю) они ж выполнятся так же поочередно, ну разве что плюсом можно назвать разбитие удобное кода на потоки... А выходит, создай массив указателей на функции, и вызывай по очередности те же самые функции... Конечно для варианта с приоритетами придется немного усложнить самописный код))

Но, беглый осмотр статей показал, что тут многопоточность тут не как у питона, ну хотя бы даже наличие семафоров говорит о том что ОС не будет ждать полного выполнения потока перед запуском второго, и это не может не радовать)

Ссылка на комментарий
Поделиться на другие сайты

ртос это квантовая ос с кучей нюансов. То что написано выше, это только первое прочтение и каша в голове. Еще читать и читать...

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

А где там каша?) Я лет 15 знаю что такое семафоры, треды и очереди, я писал для 3х мморпг сервера на плюсах, пулл (менеджер) тредов писался как раз мной)

Просто в 4 утра не спалось, успел прочесть бегло только 3 статьи) А под мк я в целом мало писал, в основном под линукс...

Тут же все пишут юзайть надо рилТайм юзать! и хоть бы кто написал в кратце что это вообще, хоть пару плюшек, типа многопоточность/асинхронность. Все что я увидел тут, это "диспечер ресурсов" каких? следить за деньгами? следить за утечкой памяти при освобождении переменных созданных через new? Управлять массивом ресурсов, который у нас  называли менеджером ресурсов? Или еще какой то?

А вот прочитав три статье, теперь хоть немного имею представление о возможностях потоки + очереди это то что я привык юзать, теперь главное что бы они работали, а не то что Кокос закрылся, гугл+ закрывается, так и фрииРтос забросят выяснив что там что то тупило :) ой, забыл, там же все таки лучшие программисты) так что пошел дальше читать про фрииРтос

Но, вот я делал гирлянду с программным шимом на атмеге8 на 8 шим каналов, мне надо было минимум затрат ресурсов, что бы светодиоды успевали все отработать как надо, с учетом того что еще и проводов всего 8, то есть 2 общих и 4 канала, и мне там RTOS вряд ли пригодилась бы.

Или вот у меня блок один, это nrf24 работающий только на передачу когда сработает прерывание от геркона. Зачем мне там ртос?) Ну, у меня так то там атмега8, но если б я накупил ток смт32 и кодил все на нем вряд ли я бы видел смысл, от ртос, что она там етсь что нет разницы 0. памяти достаточно, код генерируется автоматически, так что на количество строк написания не думаю что повлияло бы)

С другой стороны, там мк у меня все время в powerdown пока прерывание не сработает, я даже на текущий момент не уверен, не повредила ли бы мне rtos))
Прерывание будет мк и ставит только 1 флаг. цикл проснулся из за прерывания, флаг есть? вызвал отправку команды, все опять выключились.

1 час назад, mail_robot сказал:

квантовая ос

Ну хоть не НАНО :)

Открыл вики, все что там увидел, это то же самое, это инструмент для многопоточности и все в целом. Меня устраивает для главного блока.

и что же вы думаете когда я кликнул по ссылке документация на русском?)

Цитата

Не удается получить доступ к сайту

Не удалось найти IP-адрес сервера emproj.com.

8 минут назад, DrobyshevAlex сказал:

Кокос закрылся, гугл+ закрывается, так и фрииРтос забросят

:(

Русскую документацию на которую ссылалась вики уже забросили...

Изменено пользователем DrobyshevAlex
Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, mail_robot сказал:

я смог обьяснить. По пунктам. Неоднократно. Никто правда чет не удосужился вникнуть.

Ага. И на первом месте был "быстрый перенос с камня на камень". Вот только его нет, этого переноса. Особенно между сериями. В то время, как мои проекты без говнолиб очень легко переносятся куда угодно. Заменил настройки под конкретный МК и все!

 

5 часов назад, mail_robot сказал:

что абсолютно не применимо в случае голого регистрового кода. Он НЕ читаем. А если и читаем, то только в первую неделю после окончания писанины. Уже через месяц

Вот не надо сказок, мыша. Как раз таки код без говнолиб очень легко читаем, благо в заголовочнике на МК все названия нативно понятны. А если что-то подзабыл, то легко свериться с даташитом. И никаких простыней кода, все кратко и лаконично.

Например:

SPI2->CR1 = SPI_CR1_MSTR |  SPI_CR1_SSI | SPI_CR1_SSM | SPI_CR1_SPE | SPI_CR1_BR_1;          

Вот что тут непонятного? И всего ОДНА строка кода, а не простыня записи параметров с малопонятными названиями в структуру, которую потом запаришься листать! Плюс на написание этой строки я потрачу времени в 5 раз меньше, чем с применением говнолиб. И где ж твоя хваленная экономия времени? Согласен, настройка портов не выглядит такой понятной на первый взгляд, по крайней мере в 10х серии. Но вот начиная с 20х серии и там все логично и понятно.

 

5 часов назад, mail_robot сказал:

Мне лично памяти программ всегда хватало

А при чем тут память. Во-первых с объемным кодом неудобно работать, во-вторых, скорость работы программы получается в разы ниже. 

 

5 часов назад, mail_robot сказал:

Результат один и тот же, затраты времени в разы (!) меньше

И снова туфта, и выше я уже показал почему.

 

5 часов назад, mail_robot сказал:

Ну и опять же - говнокодеры из ST настоящие идиоты. Нужно всегда об этом помнить . Создали говнолибу на свою голову.

Я уже выше писал, почему эти либы говно. Универсальность еще ни к чему хорошему не приводила. Плюс 100500 защит от дурака, которые там нафиг не уперлись. Как будто либу пилили не под программистов, а под детей, которые будут писать в регистры что попало. Что-то я начинаю сомневаться в ваших выдающихся программерских способностях. С вашим-то подходом... Сталкивались мы по работе с программерами STM, поставили 40х камень (или даже 70х, но не суть), развернули на нем RTOS и управляли источником питания. И вроде как все ничего, пока не начали опрашивать блок по RS, получив задержку ответа около 100мс (!!!!). В то время, как для этой задачи с головой хватило бы 8-битника. А вы тут RTOS, HAL. Тьфу, хрень полная! Программист либо понимает, как сделать правильный и быстро работающий код и делает его, либо нихрена не понимает и отдает все на откуп RTOS, в надежде, что она справится за него.

10 минут назад, DrobyshevAlex сказал:

Тут же все пишут юзайть надо рилТайм юзать! и хоть бы кто написал в кратце что это вообще, хоть пару плюшек, типа многопоточность/асинхронность. Все что я увидел тут, это "диспечер ресурсов" каких? следить за деньгами? следить за утечкой памяти при освобождении переменных созданных через new? Управлять массивом ресурсов, который у нас  называли менеджером ресурсов? Или еще какой то?

Тут просто такие пользователи RTOS, что сами не знают, нафиг ее пользуют. Просто потому что круто и звучит красиво.

 

11 минуту назад, DrobyshevAlex сказал:

теперь хоть немного имею представление о возможностях потоки + очереди

Дык, руками все пишется легко и просто. Главное понимать, что пишешь. Точнее не так даже, понимать надо логику работы вашей проги. К примеру, есть у вас дисплей. На него выводится некая инфа от нескольких датчиков, которые опрашиваются не одновременно. Или часть данных вообще приходит из вне в случайные моменты времени. А значит вы должны учесть, что дисплей у вас общий ресурс для нескольких задач и исходя из этого организовать правильный доступ к нему, чтобы не получился одновременный вывод из разных мест кода. Аналогично и с остальными задачами. На самом деле все очень просто, надо просто начать мыслить в соответствующем русле и все.

Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, BARS_ сказал:

Как будто либу пилили не под программистов, а под детей, которые будут писать в регистры что попало

Вот именно такая мысль у меня была когда куб предложил заменить таймер системный на любой другой) До сих пор не понял зачем)) что мне помещает в любом месте потом испортить не системный таймер ))

Спор о чтении кода, по мне табуляция, пробелы и скобки влияют на читабельность куда больше чем уход от битовых операций к структурам))

Мне пока понравилось то, что там реализована многопоточность, плюс сейчас в офф доке нашел что есть еще Events system. Понятно что не проблема себе самому написать систему такую, да и без лишних проверок что бы не тратить ресурсы, но это если заниматься таким часто, а я же возможно первый и последний раз пишу код такого обхема, это же только с своих нуждах))

12 минуты назад, BARS_ сказал:

либо нихрена не понимает

Ну вот я в данном случае, не понимаю как по таймеру запустить выполнение кода с другого места)) А в freeRTOS я так понял это реализовано) если она опенсоурс то можно конечно глянуть)

Я как то гуглил, как мне по таймеру запустить код не с того места где он выполнялся в момент срабатывания прерывания, и я НЕ нашел! Возможно плохо искал, или атмега 8 этого не позволяет...

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, DrobyshevAlex сказал:

Спор о чтении кода, по мне табуляция, пробелы и скобки влияют на читабельность куда больше чем уход от битовых операций к структурам))

Чтению мешают не структуры, они сами по себе довольно удобны при написании кода, а увеличение объема кода + невозможность проверки по референс мануалу.

 

2 минуты назад, DrobyshevAlex сказал:

Ну вот я в данном случае, не понимаю как по таймеру запустить выполнение кода с другого места))

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

Ссылка на комментарий
Поделиться на другие сайты

16 минут назад, BARS_ сказал:

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

Это я понимаю, я вот выше написал чего не понимаю)) Про то как код запустить с другого места.

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

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

Понятно, что это сомнительная нужда, но все таки может где то понадобится в более важном месте.

Ссылка на комментарий
Поделиться на другие сайты

эх коша коша... ничего то вы не поняли

@DrobyshevAlex

RTOS-ка очень приятная штуковина. Как ложка. То что барсик пихает ее не в рот а простите в жо, это его личные собственные проблемы. Ложка инструмент универсальный, но не идеальный. Но если ее нет, то придется жрать руками. Что конечно можно, но не так удобно

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, BARS_ сказал:

Чтению мешают не структуры, они сами по себе довольно удобны при написании кода, а увеличение объема кода + невозможность проверки по референс мануалу.

Ну так а объем кода не ухудшает чтение? Или вы видите в строке все, или же вам надо скролить что бы увидеть всю инициализацию чего то))

4 минуты назад, BARS_ сказал:

Только в этом случае прерывания будут заморожены

Ну так я и сказал что это минут, а в РТОС разве код потоков выполняется внутри прерывания? Я прочел что таймер нужен для обеспечения равных тиков, или как человек выше любит слово "квантов" времени)

И вот он может переключатся, то етсь шла моя функция где то тут

var ++;
<-- а тут прервалась и началась другая функция
lcd_draw(var);
    

Понятно что приоритет прерываний может это обеспечить) И более высокоприоритетное прерывание будет это делать, но там же юзается только 1 таймер с 1 прерыванием для выполнения всех потоков параллельно или я ошибся и код одного потока дойдет до конца?)

Ссылка на комментарий
Поделиться на другие сайты

совершенно не всегда от контроллера требуются экстремально быстрые отклики на события. Ну опоздает он на 100 мс там например на нажатие кнопки или тот же геркон. И что?

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

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, mail_robot сказал:

ничего то вы не поняли

Ткните пальцем в то место где я не понял пожалуйста) где я написал неверно)

FreeRTOS не служит инструментам асинхронного выполнения кода разбивая на кодинг на треды?)

Только что, mail_robot сказал:

Ну опоздает он на 100 мс там например на нажатие кнопки или тот же геркон. И что?

А мк управляет форсунками ДВС. НУ и черт с ним что двигатель не заводится)) зато РТОС есть)

Ссылка на комментарий
Поделиться на другие сайты

3 minutes ago, DrobyshevAlex said:

или я ошибся и код одного потока дойдет до конца?)

код потока дойдет до конца (до маркера передачи контекста) только если пока он выполняется не возникнет более приоритетных задач.

2 minutes ago, DrobyshevAlex said:

А мк управляет форсунками ДВС. НУ и черт с ним что двигатель не заводится)) зато РТОС есть)

вы, гражданин, слабоумный что-ли?

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Только что, mail_robot сказал:

только если пока он выполняется не возникнет более приоритетных задач.

так, постараюсь более понятно переформулировать вопрос.

Имеем две функции с длинным кодом, выполнение пусть 100 мс каждый код.
Без delay, именно код выполняется.

Они запущены в двух различных тредах с одинаковым приоритетом.

Вначале выполнится полностью код одной функции, потом второй, потом опять первый и тд?

Или выполнится на время 1го такта ОС код из однйо функции на время второго такта из второй, третий такт из первой и тд...

То есть код внутри одной функции остановится без различного рода delay и начнет выполнятся код другой функции, а через 1 тик процессора вернется на то место где уснул в первой функции? Или все же там многопоточность как у питона с GIL, пока одна функция не дойдет вторая будет ожидать?

 

7 минут назад, mail_robot сказал:

вы, гражданин, слабоумный что-ли?

Да я полный идиот, если я считаю что не всегда 100 мс простоя ненужного может убить прилу)

 

Ссылка на комментарий
Поделиться на другие сайты

27 минут назад, DrobyshevAlex сказал:

Имеем две функции с длинным кодом, выполнение пусть 100 мс каждый код.

Это не имеет значения для работы мк под ос. В составе ос всегда сеть таймер реального времени, типичное время 1мс. Две задачи будут выполняться кусочками по 1мс последовательно, общее время цикла выполнения будет чуть больше 200мс. Это если решение в лоб, то-есть вообще без оптимизации.

В реальности задачи пишутся всегда и везде для определённой конечной цели, даже те что работают в цикле. Это означает что задача когда-либо достигнет точки выполнения, даже та что работает в цикле. Если мк не успевает выполнить задачу к расчётной точки времени - значит либо код гамно, либо мк слаб, или всё сразу.

Но мне кажется что до применения ос ещё очень и очень далеко. Вам нужно разобраться с примитивными вещами, которые очень сильно отличаются от кода больших машин.

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, DrobyshevAlex сказал:

но это же повесит систему прерываний на время выполнения кода, я бы хотел выставить флаг и перейти в основной цикл. И иметь возможность еще какое либо важное прерывание не пропустить)

Все верно. Именно флагами это и организуется. Ну и если отправлять большие объемы данных, то удобно юзать DMA, который будет делать отправку "в фоне", не останавливая основную программу.

 

4 часа назад, DrobyshevAlex сказал:

Ну так а объем кода не ухудшает чтение?

Так я ж как раз про то, что ухудшает. У меня настройка тот же SPI занимает одну строку, у мыша десяток.

 

4 часа назад, mail_robot сказал:

Но в реально жизни контроллеры управляют микроволновками и стиральными машинками. Которым скорость истребителя в хрен не впилась.

Т.е. серьезных проектов ты не делал. Ну а мигать лампочками можно и на RTOS, не критично.

 

4 часа назад, mail_robot сказал:

RTOS-ка очень приятная штуковина. Как ложка. То что барсик пихает ее не в рот а простите в жо, это его личные собственные проблемы. Ложка инструмент универсальный, но не идеальный. Но если ее нет, то придется жрать руками. Что конечно можно, но не так удобно

Мыша, вот не надо тут сказок.Ты уже десяток раз сказал, что RTOS супер-пупер вещь, но ни одного преимущества назвать не можешь. Это если не считать твою врожденную и непобедимую лень.

 

4 часа назад, mail_robot сказал:

К сожалению людям типа барсика у которых мир только черный и только белый хрен это обьяснишь

А у меня проекты посерьезнее будут, в которых важна скорость работы, а не скорость написания кода (да, для моих проектов задержка в 100мс = вечности. За это время меня раз 10 может опросить ЭВМ и выплюнуть оператору сообщение о потере связи. Или, что еще хуже, блок выйдет из строя из-за того, что я вовремя не увидел аварийную ситуацию.). Тем более я уже показал, что у меня написание кода занимает МЕНЬШЕ времени, даже если тупо учитывать количество нажатий клавиш. Но ты упорно этого не видишь. Тебе уже много раз и не на одном форуме говорили, что кодер из тебя хреновый. Но ты упорно плаваешь на поверхности и несешь бредовые идеи в массы.

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, AVI-crak Home сказал:

Это не имеет значения для работы мк под ос

6 часов назад, AVI-crak Home сказал:

В составе ос всегда сеть таймер реального времени, типичное время 1мс. Две задачи будут выполняться кусочками по 1мс последовательно

Как так то? Не имеет отношения к ос но все же оно в ос...
Это как раз таки только к ОС в данном случае и имеет отношение :)
Именно ОС следит за распределением ресурсов МК среди задач.

6 часов назад, AVI-crak Home сказал:

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

О чем вы всегда пишите что мне еще очень далеко а я спрашиваю где я не прав а вы не тыкнете пальцем) Чем отличается мк от "больших машин" в данном вопросе? Я лишь спросил тут идет распределение ресурсов именно, то есть две функции выполняются прям параллельно, с учетом тиков ОС и приоритетов, или же просто эмуляция, по факту выполняется вначале полностью одна потом другая.

Вы ответили что параллельно, мне это и нужно было знать) Что, как уже писал выше, и следует из того, что юзаются семафоры) Значит в МК есть возможность после прерывания стартануть выполнение программы с любого адреса а не с того, на котором она была до прерывания. - вот этого я не нашел как сделать в atmega8 :)

2 часа назад, BARS_ сказал:

удобно юзать DMA

Да, про MDA уже почитал, спасибо, но я пока хотел понять суть работы этой FreeRTOS, что она реально делает, не разбирая пока по полочкам ее исходники.

2 часа назад, BARS_ сказал:

ни одного преимущества назвать не можешь.

Ну я вижу, в том, что для меня не нужно кодить эту самую многопоточность) Если вдруг она реально пригодится. Если б я делал это для работы, или себе много делал чего, то может свое бы написал уже, необходимый минимум, что бы не было лишних тормозов, а по вашим словам там есть проверки от дурачка лишние.

2 часа назад, BARS_ сказал:

А у меня проекты посерьезнее будут, в которых важна скорость работы

Ну вот я тоже привык делать чтобы скорость была выше, все таки сервера не терпят 100 мс лагов)) По этому мы писали вначале с разными там ace wrappers и boost asio а потом отказались (а они очень даже шустрые, оч хорошими программистами думаю пишутся, вряд ли хуже тех кто FreeRTOS написал), и написали свою упрощенную версию, для шустраты работы, и хуже не сделали, уже не один год работает)

Но все же, как я написал чуть выше, в данной ситуации, я ради того что бы посмотреть это, заюзаю видимо в главном блоке, ну как минимум потому что я пока не вижу нужды там скорости работы большой, ну и я еще не писал под стм :) Нужно посмотреть что юзают люди. Да и накодить мне видимо будет все таки проще юзая thread + queue + events. Чем городить свое на один раз.

Вообщем мой вывод, если @AVI-crak Home говорит правду, про то как происходит обработка кода в параллельных тредах, то данная ОС дает хороший функционал. Не юзал, не знаю скорости работы. Но для некоторых проектов однозначно можно использовать, если свое лень кодить, или это разовое что то и не требует скорости работы.

2 часа назад, BARS_ сказал:

у меня написание кода занимает МЕНЬШЕ времени

Вот тут не понимаю. FreeRTOS вроде бы не несет функционал настроек данных, через структуры. Это, я так понимаю HAL. Так что тут уже немного другой холивар :) Я пока про RTOS выясняю)

Изменено пользователем DrobyshevAlex
Ссылка на комментарий
Поделиться на другие сайты

скорость работы кода под RTOS понятие очень интересное. Что там удалось сделать барсику, чтобы получить время отклика 100 мс мне сложно представить, у меня как то на такие подвиги тямы не хватает. Однако при помощи того же хал и той же ос мне удавалось включить в петлю пару 8266 и заставить их слать друг дружке на скорости 3,5 мб/с с реалтаймовой параллельной обработкой потока. (причем по UART!). Я про это уже писал не раз и код выкладывал на обозрение. Система была ессно тестовая, чисто посмотреть сколько можно выжать из этого железа и этого софта. Камень 103С8. На той скорости был предел, потому как уровень ошибок стал достигать 10е-6. И ограничение да, наступило по скорости контроллера/софта. Не успевал выгружаться буфер и происходили наложения. Голова догоняла хвост в кольце при любом размере

Но по мнению барса наверное дело было так - одна 8266 высылала письмо по пневмопочте, вторая через 100 мс его получала, пару суток думала, и писала назад.

Все эти рассуждения просто от неумения и нежелания вникать глубже в толковые в принципе темы. И меня еще обзывают лентяем. Ни хал ни ртос не тормозят камень. Вот прям настолько, насколько это преподносят. Тормозит его криворукий кодер. Я знаю по крайней мере один проект, где на ртос реализовано управление BLDC с передачей видеопотока по вафле для OSD. камень 407-ой. Парень тоже, тупой как пробка... Рукожоп конкретный

кому интересно его блог http://vedder.se/2014/11/open-source-esc-video-logging-on-electric-longboard/

там и на гит ссылка есть, можно код посмотреть. Используется ChibiOS. Но это не важно, они все в целом похожи очень

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...