Разработки ecoins

Библиотеки для разных контроллеров

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#981

Сообщение o615ye161 » 07.04.2021{, 10:07}

ecoins писал(а):
07.04.2021{, 05:51}
Вернусь, будет возможность проверить Ваш проект на логическом анализаторе.
Успехов.
Благодарю

Отправлено спустя 41 минуту 29 секунд:
ecoins писал(а):
07.04.2021{, 05:51}
лучше период установить с небольшим сдвигом , например: 990,995,1000,1005,1010.
не понял где и как это сделать?

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#982

Сообщение ecoins » 07.04.2021{, 11:29}

o615ye161 писал(а):
07.04.2021{, 10:48}
не понял где и как это сделать?
Сейчас в каждом блоке ds1820 установлен параметр 1000мс- сделайте для разных блоков разные, это избавит от того, что они будут вызываться синхронно. Если блоки ds1820 разнесены по свободным задачам,, то это даёт несущественное улучшение, и не так и обязательно.

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#983

Сообщение Gordon0007 » 07.04.2021{, 13:55}

ecoins писал(а):
06.04.2021{, 21:52}
Возможно к концу месяца - многое делается сильно иначе.
Хочу оптимизировать свою программу, установить Ваш диспетчер задач и поставить Ваш блок дисплея 1602, и так по мелочи довести до ума.
Хочу использовать новые блоки чтоб потом не переделывать :smile469:
Поэтому я подожду релиза :smile38:

Отправлено спустя 1 час 38 минут 59 секунд:
Начал разбираться в блоке диспетчера задач и сразу появились вопросы:
СпойлерПоказать
Автономный дсипетчер задач.
Не требует дополнительных библиотек.
1.На выходе control изменение значения (0/1) в каждом цикле loop() Arduino.
Может использоваться для наблюдения логическим анализатором на одном из пинов работы проекта.
2.На выходе blink_10ms генератор меандра 10ms.
Не рекомендуется использовать в задачах "оперативная,быстрая,медленная,фоновая", так как возможно наложение
значений по времени генератора и периода вызова задач.
Хорошо и удобо использовать в "Свободной" задаче.
3. На пяти выходах генерит номера задач:
num_quick->Оперативная задача: период= 10ms; кол-во задач=5;
num_fast ->Быстрая задача: период= 50ms; кол-во задач=4;
num_slow ->Медленная задача: период=250ms; кол-во задач=4;
num_back->Фоновая задача: период=100ms; кол-во задач=5;
num_frdm ->Свободная задача: период=loop(); кол-во задач=25;
В каждый момент времени на выходе только один из номенов отличных от нуля.
Приоритет вызова в указанном выше порядке.
------------------------------------------------------------
ecoins@mail.ru 28.12.2020
1.
1.На выходе control изменение значения (0/1) в каждом цикле loop() Arduino.
если я правильно понял значения в первом цикле будет "1", во второи "0", в третем "1" и так далей 0101010101010...?
2.
На выходе blink_10ms генератор меандра 10ms.
если допустим операция занимает 20ms или стоит делей на 1 сек, как себя поведет этот режим?
3.
. На пяти выходах генерит номера задач:
num_quick->Оперативная задача: период= 10ms; кол-во задач=5;
num_fast ->Быстрая задача: период= 50ms; кол-во задач=4;
num_slow ->Медленная задача: период=250ms; кол-во задач=4;
num_back->Фоновая задача: период=100ms; кол-во задач=5;
num_frdm ->Свободная задача: период=loop(); кол-во задач=25;

3.1 не понятно от чего зависит кол-во задач?
3.2 не понятно как происходит задача, допустим "num_fast ->Быстрая задача: период= 50ms; кол-во задач=4;" 1-задача сработает раз в 50мс, а вторая раз в 100мс или все они отработаю одновременно через 50мс (прям совсем не понятно, что и как работает)? что будет происходить в двух не задействованных задачах?
3.3 Что будет если операция (цикл) занимает больше времени чем период задачи или стоит делей, как себя поведют эти режимы?
3.4 Сколько задач можно максимально задействовать?
3.5 можно ли выключить выключить не используемые задачи?
3.6 можно ли использовать этот блок если у меня используются кнопки с подчетом времени их нажатия или подсчет будет каждый раз прерываться и нужно это отслеживать без разрешения от этого блока

Понимаю вопросы могут быть глупыми, но я не программист и многим это тоже не понятно как и мне.
Очень прошу дать развернутые ответы и в описание к блоку добавить больше информации.
( пишите как для тупых "как для меня, чтобы не кого не обидеть")
Заранее СПАСИБО!!!

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#984

Сообщение o615ye161 » 07.04.2021{, 18:35}

ecoins писал(а):
07.04.2021{, 11:29}
Сейчас в каждом блоке ds1820 установлен параметр 1000мс- сделайте для разных блоков разные, это избавит от того, что они будут вызываться синхронно. Если блоки ds1820 разнесены по свободным задачам,, то это даёт несущественное улучшение, и не так и обязательно.
Спасибо

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#985

Сообщение ecoins » 07.04.2021{, 21:45}

Gordon0007 писал(а):
07.04.2021{, 15:34}
если я правильно понял значения в первом цикле будет "1", во второи "0", в третем "1" и так далей 0101010101010...?
Да, как Вы написали.
Gordon0007 писал(а):
07.04.2021{, 15:34}
если допустим операция занимает 20ms или стоит делей на 1 сек, как себя поведет этот режим?
Чудес не бывает - будет затягивание полупериода на это время. Поэтому мы и разрабатываем свои библиотеки, с так называемым программным прерыванием, в которых отсутствуют delay().
Gordon0007 писал(а):
07.04.2021{, 15:34}
3.2 не понятно как происходит задача, допустим "num_fast ->Быстрая задача: период= 50ms; кол-во задач=4;" 1-задача сработает раз в 50мс, а вторая раз в 100мс или все они отработаю одновременно через 50мс (прям совсем не понятно, что и как работает)? что будет происходить в двух не задействованных задачах?
Плата, которая вызывается по условию быстрая задача=1, С Вашими параметрами будет вызываться 1 раз в 200мс (50х4).
Плата, которая вызывается по условию быстрая задача=2, будет вызываться 1 раз в 200мс (50х4), но со сдвигом относительно предыдущей платы на 50 мс и т.д.
Если нет платы с условием быстрая задача=3, то после проверки снова возвращается к диспетчеру для получения следующего номера одного из типа задач от диспетчера. Сама процедура проверки достаточно быстрая - для Nano 10-12mcs.
Gordon0007 писал(а):
07.04.2021{, 15:34}
3.3 Что будет если операция (цикл) занимает больше времени чем период задачи или стоит делей, как себя поведют эти режимы?
Будет сдвижка по фазе времени всего диспетчера, но все задачи будут последовательно выполнены. Это можно наблюдать на дисплее на нашем блоке -все работает, но медленно, сигнальная звездочка реже моргает.
Gordon0007 писал(а):
07.04.2021{, 15:34}
3.4 Сколько задач можно максимально задействовать
255 каждого типа. Увлекаться не стоит - проверка на вызов каждой задачи, когда подходит время её выполнения для Nano - 10-12mcs.
Gordon0007 писал(а):
07.04.2021{, 15:34}
3.5 можно ли выключить выключить не используемые задачи?
Они включаются тогда, когда вы привязываете плату к условию номер задачи одного из типов.
На практике, если нужно отключить плату вызываемую плату, то достаточно указать в условиях платы неиспользуемый номер платы, например для быстрой задачи это больше 4. Ставьте =50 и не промахнетесь.
Gordon0007 писал(а):
07.04.2021{, 15:34}
3.6 можно ли использовать этот блок если у меня используются кнопки с подчетом времени их нажатия или подсчет будет каждый раз прерываться и нужно это отслеживать без разрешения от этого блока
Это плохое решение -нужно использовать другие блоки с типом задачи свободная или делать это по аппаратным прерываниям от кнопки или таймера.
——-
Пишите. Спрашивайте, уточняйте вопросы.
Успехов.

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#986

Сообщение Gordon0007 » 09.04.2021{, 11:42}

ecoins писал(а):
07.04.2021{, 21:45}
Успехов.
Спасибо, за ваши ответы
Надеюсь что эти пояснения появятся в описание к блоками.
Особенно полезно было узнать что количество задач это множитель значения и смещение происходит на время задачи, ну и ограничения в 255 значений.

Осталось не понятно как все таки поведет себя задача, допустим у меня задача "Быстрая задача: период= 50ms; кол-во задач=3;" 1 задача выполняется 15мс, вторая 200мс, третья вообще имеет в себе делей на 2сек;
Вопрос с какой скважностью будет выполняться первая, вторая и треть задача?
Задача: нужно чтобы первая задача раз в 150мс моргала светодиодом и опрашивал время зажатия кнопок, вторая по I2C отправляла текст на 5шт дисплеем 2004, и третья общалась со другим контроллером при изменение переменной или раз в 5 минут по интерфейсу. Опрос должен происходить не реже чем 150мс ."задача условная и не имеет не чего общего с моими задачами"

Gordon0007
Сержант
Сообщения: 138
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

Разработки ecoins

#987

Сообщение Gordon0007 » 09.04.2021{, 12:03}

ecoins,
Вы не подумайте не чего плохого, я не придираюсь. Просто хочу разобраться сам и сделать блок лучше для других.
Просто я открыв свой проект через 2 года, я даже не вспомню как пользоваться ПБ блоком, а не дай бог я сделаю для кого другого прошивку и пользователь решит внести изменения так меня замучают вопросами, на которые у меня даже ответов не будет.
Описание к блокам очень скудное и без обид не понятное. Нужно описание делать максимально развернуто, иначе пользователям сложно разобраться, даже если ответы есть где то на форуме это не чего не значит, так как найти этот ответ зачастую очень сложно, а для вас ответив на вопрос на форуме нет не какой сложность поправить версию блока дополнить описание и вуаля пользователь скачал новенькую версию с полным описанием.
Моё мнение: блок должен обязательно иметь версию и иметь описание краткое, и пояснение чуть ниже с подробным описанием и примерами.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#988

Сообщение ecoins » 10.04.2021{, 14:58}

Gordon0007 писал(а):
09.04.2021{, 11:42}
Осталось не понятно как все таки поведет себя задача, допустим у меня задача "Быстрая задача: период= 50ms; кол-во задач=3;" 1 задача выполняется 15мс, вторая 200мс, третья вообще имеет в себе делей на 2сек;
Вопрос с какой скважностью будет выполняться первая, вторая и треть задача?
Задача: нужно чтобы первая задача раз в 150мс моргала светодиодом и опрашивал время зажатия кнопок, вторая по I2C отправляла текст на 5шт дисплеем 2004, и третья общалась со другим контроллером при изменение переменной или раз в 5 минут по интерфейсу. Опрос должен происходить не реже чем 150мс ."задача условная и не имеет не чего общего с моими задачами"
Предлагаю поглубже вникнуть в организацию выполнения задач на одном контроллере Arduino.
1. По таймеру прерывается выполнение текущей задачи. После этого надо сохранить все регистры прерванной задачи и восстановить значения регистров для задачи, которая планируется быть вызвана. У этого подхода помимо непростого и немаленького softa есть целый ряд проблем, которые перекладываются на плечи разработчика.
--Прежде всего это связано с работой 16-32 разрядных регистров на 8-ми битовых контроллерах - например 1-байт записался, произошло прерывание задачи, через некоторое время вызвана задача повторно, а другая задача уже использует неверное (не до конца записанное значение) и могут возникать проблемы с работой алгоритмов проекта. Обычно для решения этой проблемы перед копированием запрещают прерывания, копируют, затем восстанавливают прерывания. Это существенно увеличивает нагрузку на разработчика и ведет к ряду побочных проблем.
--Возможны проблемы с некоторыми интерфейсами, в которых требуется арбитр получаемых ответов от устройства. Прежде всего это касается интерфейса i2c. Несмотря на то, что многие контроллеры имеют аппаратные прерывания i2c, стандартная библиотека их не использует, поскольку это все сильно бы усложнило. Работает библиотека по принципу - до конца выполняется текущая операция, даже если это требует программно-аппаратной задержки. Этот интерфейс один из значимых источников "торможения" - с ним надо работать аккуратно. Именно по этой причине, например, стандартный блок FLProg MCP23017 "подтормаживает".
--Большинство библиотек Arduino будут работать, но с проблемами.
--И наконец в существующей версии FLPpog реализовать такой подход не просто.
--В итоге -прерывание по таймеру это не для не опытных пользователей и не для FLProg.
2.Второй путь - это последовательный вызов задач. Такой подход собственно и реализован в FLProg - выполняются платы в той последовательности как они размещены в проекте.
Подход ecoins - это усовершенствование описанного метода, но вызов задач выполняется не так как размещены платы, а по условиям (номера задач разного типа) диспетчера. Поскольку при каждом входе в диспетчер на его выходе только один ненулевой номер задачи, то в каждом цикле вызывается только одна плата. Для полной синхронизации по времени всех плат (если это важно) плата не должна выполняться более 6-9 мс. Для этого следует использовать специально разработанные библиотеки.
--------------------------------------------------
Если плата имеет delay 2 сек, то процессор будет ждать 2 сек.
Описанная Вами задача достаточно просто реализуется средствами диспетчера или средствами FLPrpog - много генераторов с выделением фронта и вызова платы по условию появления этого фронта.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#989

Сообщение ecoins » 10.04.2021{, 15:12}

Gordon0007 писал(а):
09.04.2021{, 12:03}
ecoins,
Вы не подумайте не чего плохого, я не придираюсь. Просто хочу разобраться сам и сделать блок лучше для других.
Просто я открыв свой проект через 2 года, я даже не вспомню как пользоваться ПБ блоком, а не дай бог я сделаю для кого другого прошивку и пользователь решит внести изменения так меня замучают вопросами, на которые у меня даже ответов не будет.
Описание к блокам очень скудное и без обид не понятное. Нужно описание делать максимально развернуто, иначе пользователям сложно разобраться, даже если ответы есть где то на форуме это не чего не значит, так как найти этот ответ зачастую очень сложно, а для вас ответив на вопрос на форуме нет не какой сложность поправить версию блока дополнить описание и вуаля пользователь скачал новенькую версию с полным описанием.
Моё мнение: блок должен обязательно иметь версию и иметь описание краткое, и пояснение чуть ниже с подробным описанием и примерами.
Причин непонятности могут быть разные - и часто не знакомство с темой и отличие предлагаемых подходов отличных от привычных.
Лучше всего изучать не по описаниям блоков, а по примерам их использования - их выложено много.
По описанию существующих блоков - сам процесс создания описания в понятной и удобной для разных пользователей оказалась непростой задачей.
В этой теме было предложено объединить усилия по описанию наших блоков, но поддержки этого мы не обнаружили. Скорее наоборот...
И в прежнем редакторе это было не просто делать - при всей внешней простоте... ecoins разработал описание в отдельных текстовых файлах в разных форматах, но это не вызвало интереса и мало кто с ними знакомился.
В новом редакторе гораздо больше возможностей и описание будут в некой структуре и подробнее.
Однако это не освободит заинтересованных пользователей от осваивании тестовых примеров и потом уже буду уместны замечания и предложения по совершенствованию описаний блоков.
-----
Успехов.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#990

Сообщение o615ye161 » 10.04.2021{, 15:32}

ecoins подскажите пожалуйста, из-за диспетчера на esp32 может не работать АЦП? если в скетче только выход АЦП и LCD то все работает, в чем причина не понятно выводит только 4095 не реагирует на изменение напряжения на входе
Вложения
groubox.flp
(2.43 МБ) 28 скачиваний

Аватара пользователя
belyx
Сержант
Сообщения: 247
Зарегистрирован: 24.07.2016{, 20:38}
Репутация: 20
Откуда: Витебск Беларусь

Разработки ecoins

#991

Сообщение belyx » 10.04.2021{, 18:49}

ECOINS ! Посмотрите пожалуйста эту тему
касательно совместной работы ваших блоков и штатных блоков меню.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#992

Сообщение ecoins » 10.04.2021{, 21:50}

belyx писал(а):
10.04.2021{, 18:49}
ECOINS ! Посмотрите пожалуйста эту тему
касательно совместной работы ваших блоков и штатных блоков меню.
Посмотрел и ответил.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#993

Сообщение ecoins » 10.04.2021{, 22:00}

o615ye161 писал(а):
10.04.2021{, 15:32}
ecoins подскажите пожалуйста, из-за диспетчера на esp32 может не работать АЦП? если в скетче только выход АЦП и LCD то все работает, в чем причина не понятно выводит только 4095 не реагирует на изменение напряжения на входе
Из справки:
ESP32 имеет входные каналы АЦП 18 x 12 бит. Это GPIO, которые можно использовать в качестве АЦП:

ADC1_CH0 (GPIO 36)
ADC1_CH1 (GPIO 37)
ADC1_CH2 (GPIO 38)
ADC1_CH3 (GPIO 39)
ADC1_CH4 (GPIO 32)
ADC1_CH5 (GPIO 33)
ADC1_CH6 (GPIO 34)
ADC1_CH7 (GPIO 35)
ADC2_12 GPO (0)
ADC2_CH2 (GPIO 2)
ADC2_CH3 (GPIO 15)
ADC2_CH4 (GPIO 13)
ADC2_CH5 (GPIO 12)
ADC2_CH6 (GPIO 14)
ADC2_CH7 (GPIO 27)
ADC2_CH8 (GPIO 25)
ADC2_CH9 (GPIO 26)
Примечание: контакты ADC2 нельзя использовать при использовании Wi-Fi. Поэтому, если вы используете Wi-Fi и у вас возникают проблемы с получением значения от GPIO ADC2, вы можете вместо этого рассмотреть возможность использования GPIO ADC1, что должно решить вашу проблему.

Входные каналы АЦП имеют разрешение 12 бит. Это означает, что вы можете получить аналоговые показания в диапазоне от 0 до 4095, в которых 0 соответствует 0 В, а 4095 - 3,3 В. У вас также есть возможность установить разрешение ваших каналов в коде, а также диапазон АЦП.
=======
Рекомендую забыть в проектах входя АЦП ADC2 - используйте пины с 32 по 39 под АЦП.
У Вас в проекте используется пин 14 и Wi-Fi.
Успехов.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#994

Сообщение o615ye161 » 10.04.2021{, 22:33}

ecoins писал(а):
10.04.2021{, 22:00}
Рекомендую забыть в проектах входя АЦП ADC2 - используйте пины с 32 по 39 под АЦП.
У Вас в проекте используется пин 14 и Wi-Fi.
Успехов.
Спасибо

Отправлено спустя 19 минут :
ecoins писал(а):
10.04.2021{, 22:00}
ESP32 имеет входные каналы
у вас может еще есть какая то информация по ESP32 какие выходы и когда можно использовать, если есть такая инфа, поделитесь пожалуйста. :smile453:

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#995

Сообщение ecoins » 11.04.2021{, 02:32}

o615ye161 писал(а):
10.04.2021{, 22:52}
у вас может еще есть какая то информация по ESP32 какие выходы и когда можно использовать, если есть такая инфа, поделитесь пожалуйста.
Неплохая ссылка https://diytech.ru/projects/spravochnik ... ispolzovat
В новой редакции библиотеки пины по группам могут (для справки) выводится на консоль.

o615ye161
Сержант
Сообщения: 198
Зарегистрирован: 19.12.2019{, 14:47}
Репутация: 3
Имя: Сергей

Разработки ecoins

#996

Сообщение o615ye161 » 11.04.2021{, 16:37}

ecoins писал(а):
11.04.2021{, 02:32}
o615ye161 писал(а):
10.04.2021{, 22:52}
у вас может еще есть какая то информация по ESP32 какие выходы и когда можно использовать, если есть такая инфа, поделитесь пожалуйста.
Неплохая ссылка https://diytech.ru/projects/spravochnik ... ispolzovat
В новой редакции библиотеки пины по группам могут (для справки) выводится на консоль.
признателен

Dmabst
Сержант
Сообщения: 149
Зарегистрирован: 08.12.2018{, 16:49}
Репутация: 10
Имя: Дмитрий

Разработки ecoins

#997

Сообщение Dmabst » 21.04.2021{, 00:47}

ecoins писал(а):
12.02.2021{, 22:18}

Выкладываю библиотеку и тест. ПБ в самом тесте.
RT_25_HW_HTU21_v0.2.zip
Test_HTU21.flp

ПБ полностью автономен - требуется только библиотека RT_25_HW_HTU21_v0.2.zip.
Test_HTU21.flp не компилируется по причине отсутствия в библиотеке RT_25_HW_HTU21_v0.2.zip файла RT_HW_BASE.h.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#998

Сообщение ecoins » 21.04.2021{, 06:59}

[uhide]
Dmabst писал(а):
21.04.2021{, 00:47}
Test_HTU21.flp не компилируется по причине отсутствия в библиотеке RT_25_HW_HTU21_v0.2.zip файла RT_HW_BASE.h.
[/uhide]
1.Для исправления надо добавить библиотеку RT_HW_BASE.h.
2.Можно убрать(закомментировать) в библиотеке RT_HW_HTU21.h строку #include "RT_HW_BASE.h"
3.Подождать выхода новой версии - пока работа занимает гораздо больше времени и усилий, чем представлялось в начале (переход на новый редактор FLProg), но оно того стоит.

Dmabst
Сержант
Сообщения: 149
Зарегистрирован: 08.12.2018{, 16:49}
Репутация: 10
Имя: Дмитрий

Разработки ecoins

#999

Сообщение Dmabst » 21.04.2021{, 18:25}

Dmabst писал(а):
21.04.2021{, 00:47}
1.Для исправления надо добавить библиотеку RT_HW_BASE.h.
Ее нет в вашем zip файле RT_25_HW_HTU21_v0.2.zip

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Разработки ecoins

#1000

Сообщение ecoins » 21.04.2021{, 21:11}

Dmabst писал(а):
21.04.2021{, 18:25}
Ее нет в вашем zip файле RT_25_HW_HTU21_v0.2.zip
Это отдельная библиотека и отдельный файл.
В вашем случае (чтобы не разбираться с библиотекой RT_HW_BASE.h ) рекомендую п.2

Закрыто

Вернуться в «Команда ecoins»