![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
Ruslan1
-
Постов
3 026 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные Ruslan1
-
-
4 часа назад, artemkad сказал:
Или вообще не делается, потому как парочка задач с высоким приоритетом отбирает все процессорное время. И, что самое забавное, обычно эти задачи с высоким приоритетом ничего не делают(зачастую ожидают результатов тех самых расчетов с низким приоритетом).
Если оно "ждет", то спит и вообще не занимает ресурс, проснется по событию RTOS (очередь или семафор).
Само собой, нужно понимать что от чего зависит и как. Да, я помню, еще в описании uC/OS-II было описание как докатиться до взаимной блокировки, задач, конечно же такое возможно и в FreeRTOS.
4 часа назад, artemkad сказал:А для тех, кто хоть раз пытался разделить задачи между ядрами ESP32, слово "запросто" вызывает недоумение.
А что не так? у меня сейчас есть проект такой на ESP32. Общение между задачами происходит через стандартные сервисы FreeRTOS: задача, запущенная на одном ядре, выдает данные в очередь, а задача, запущенная на другом ядре, эту очередь ждет. Работает, проверял логическим анализатором- очень все предсказуемо (задержки и время обработки). Я Espressif фреймворк использую. Там есть в документации кратко, как "ванильный FreeRTOS" у них рапараллелен на два ядра: ESP-IDF FreeRTOS SMP Changes.
4 часа назад, artemkad сказал:Единственное что там "запросто" получается это усыпить(отключить) все ядра оставив лишь одно с убогой системой команд на дежурке. В остальном-же для каждого ядра пишется свой отдельный код который мало взаимодействует между ядрами.
Вот этого не пробовал. Знаю, что можно RTOS только на одном ядре запустить, а другое врукопашную использовать (то есть без сервисов и шедулера), но я так глубоко не копал.
-
32 минуты назад, Arlleex сказал:
Ну а во-вторых, какая RTOS, если надо по UART/SPI/I2C че-то настроить, пару раз отправить показания датчика и заснуть? Мне лично будет даже лень расчехлять RTOS для этого.
Да пожалуйста:
Задача1: раз в какое-то время запускать опрос датчика
Задача2: просыпается по прерыванию, которое посылает сюда сообщение из датчика (принятое, например, по ПДП или побайтово). Обработка и отсылка сообщения в задачу, собирающую данные со всех датчиков для формирования из них нужного пакета (например, передача 20 показаний датчика за раз, или десяти опрошенных датчиков).
задача3: работа с внешним интерфейсом (запросы-ответы от линии связи, передача всех запрошенных данных)
задача4: работа с внешним интерфейсом (периодические отсылки, например измеренные данные)
задача5: локальный интерфейс (лампочки-кнопочки-дисплейчики)
задача6: локальный отладочный терминал (обычно UART с системой команд и/или отладочным логом)
задача7: опрос набортных сенсоров (ну например напряжение питания и состояние батареи).
задача6: вотчдог, контролирующий все задачи: принимает сообщения от всех задач и ребутит систему или отдельные задачи если ему чего-то не нравится.
А еще очень помогают приоритеты, чего суперлупом не сделать. Например, когда длинные вычисления делаются в задаче с малым приоритетом в фоне, а подача в нее новых данных (буферизация) идет средствами RTOS (очередь сообщений). Понятно, что природу не обмануть и суммарное время нужно считать (чтобы все вычисления успевались до переполнения очереди), но для особо настырных есть многоядерные камни (начиная с народного ЕСП32)- и задачи запросто могут быть разделены между ядрами. У меня есть проект, где одно ядро ЕСП32 только DSP вычислениями загружено по такой схеме.
И что значит "расчехлять"? оно такое страшное? Первый раз, конечно, нужно документацию прочитать, чтобы сконфигурировать ну и вообще понять что это и как. Но даже тут сэкономить можно: просто найти на используемый камень пример в Интернете с морганием светодиодом, и использовать как опору. И читать документацию, смотря на этот пример.
9 минут назад, jcxz сказал:ааа.... Я уж было подумал, что вы реально на Юкос работали. И в нефти купались.
Не, так глубоко я не заплывал. К сожалению. Или к счастью, это сейчас спорный вопрос. 🙂
-
1 час назад, jcxz сказал:
Ого! Юкос уже лет 20 как в лучшем из миров. Хотя на железке бочки с его названием ещё встречаются. Получается, что вы здесь - один из ветеранов РТОС-пользования?!
я тут в 2006 зарегился, как раз когда первую свою борду на ARM разрабатывал (AT91RM9200), тогда параллельно как раз и uC/OS-II изучал для него же (был честно купленный микриум под исследовательский грант в НИИ). И то и другое успешно заработало, а я зауважал системы реального времени.
-
27 минут назад, jcxz сказал:
ЗЫ: Если люди, которые когда-то что-то освоили. Давно. Чуть-чуть. И потом, даже под страхом пытки не хотят изучать ничего нового, лучшего. И никакие разумные аргументы не действуют.
Я тоже из этих. Базы данных с индексированием и поиском на ассемблере на PIC18 писал (с внешней RAM с батарейкой). И перешел на Си наверное лет на 5 позже чем это было уже возможно. То же самое и с RTOS, но тут меня подтолкнули (проект на юкосе подсунули). И обратно на ассемблер и суперлуп не перейду.
Это как пересел в машине на атомат после ручки- я ее поюзал лет 20 и в любой момент могу снова потому что умею, но! только в случае сильной нужды и точно не по собственному желанию 🙂
-
RTOS имеет смысл использовать. Всегда.
RTOS позволяет делать систему гибкой и расширяемой. А это экономит главный и невосполнимый ресурс- наше время и наши нервы, и сейчас (во время реализации кода) и в будущем (поддержка и развитие уже имеющегося продукта).
Только не нужно рассказывать про ресурсожручесть. Я впервые RTOS на PIC16 с 370 байт RAM пробовал, и уже там это имело смысл.
FreeRTOS- замечательный образчик RTOS. И сам на нем уже много лет сижу, и всем советую именно его как базу для нового софта. Бесплатен, популярен, исходники доступны.
-
В 21.12.2023 в 07:45, sidy сказал:
Да действительно, соптимизировал:
3,4 мкс занимает такое преобразование.
Так а нужно-то сколько? просто больше или просто меньше- это не на инженерном языке.
Если больше чего то не годится? если меньше чего то подходит?
Ну и проверять доли микросекунд пином- так себе тест. Нужно или такты в симуляторе/эмуляторе считать, или таймер аппаратный под эту проверку использовать.
-
12 часов назад, SimSup сказал:
Спасибо. Была идея, что это что-то служебное, но проверить сложно, документацию в отличие от файлов мне не дали )
За программу спасибо, спрошу у заказчика тоже.
А как без этой программы ESI файлы и hex(bin)-файлы EEPROM к своим устройствам создавать? Можно, конечно, и врукопашную, в текстовом редакторе, но смысла нет никакого. Эта SSC интересная софтинка (еще и си-исходники может), но я ее только для ESI файлов и прошивки EEPROM использую.
Области EEPROM и адреса полностью прописаны в документации ECAT. Например, ethercat_esc_datasheet_sec1_technology_2i3.pdf, раздел "11 SII EEPROM"
-
Однозначно Git. Много лет пользую и пока не разочаровался.
Если у конторы есть нужда (абсолютная приватность) и возможности(сервер и администратор) - то на своем сервере
Если с этим тяжко- то облачный сервис. Мне исторически гитлаб нравится больше, чем гитхаб.
-
(У меня не et1100, но думаю это не имеет значения.)
Вероятно, не шьет служебную область, которая влияет на общение по ECAT (Vendor ID и прочее, что влияет на выбор ESI файла) ?
Попробуйте через EtherCAT Slave Stack Code (SSC), тоже от beckhoff . Там есть EEPROM Programmer внутри. Только через него мне удавалось прошить устройства с еще чистым EEPROM. Соединение должно быть точка-точка, то есть на линии ECAT должно быть только одно еще не сконфигурированное устройство.
-
1
-
-
В 28.06.2023 в 12:16, xvr сказал:
А поставить триггер на DRDY и получить на его выходе WS для I2S не подошло?
Я тут жаловался летом на тормоза с прерываниями в ESP32 и что мне пришлось программный огород городить и делать поллинг коротного сигнала DRDY на отдельном ядре.
Оказалось, что даже на отдельном ядре, даже с vTaskSuspendAll() в этой единственной задаче, процессор умудряется периодически отвлекаться/зависать на 5-6 микросекунд (на 240 MHz) и не поллить то, что мне нужно. Уж не знаю, что там он делает- просто все-таки шедулер или функция библиотеки ESP-IDF запущенные на другом ядре, тормозят оба ядра, то ли доступ к какой-то памяти блокирует работу другого ядра, вариантов много. Но факт налицо- я не могу гарантировать непрерывное выполнение единственной задачи на выделенном ядре. Может без RTOS можно, но мне не подходит.
Бяка неприятная, и если не знать что искать- то можно долго разбираться.
Так что пришлось все-таки городить из короткого DRDY нормальный CS длительностью немного больше времени передачи нужного количества байт, и далее стандартным драйвером SPI Slave обрабатывать принятое. Обошелся формирователем из таймера 555 плюс два транзистора для инверсии входа и выхода как мне нужно. Так как у меня есть запас по времянке (длительность передачи нужных байт примерно 30% от периода транзакций) , то считать клоки для точного формирования CS не нужно, стабильности таймера на RC достаточно.
В-общем, вот такой интересный факт при задействовании второго ядра ESP32 и FreeRTOS.
-
Очень актуальная мне темка, апну.
Подключил JTAG (Espressif Systems ESP-PROG за 12 долларов) к своей платке на ESP-32 WROOM 32, спасибо доброму человеку за шикарное описание на ютубе: ESP32 - DEBUGGING your ESP-IDF code using JTAG [VS CODE]
Ну и конечно первоисточник от Espressif: JTAG Debugging
Вроде как-то работает, но млин... Есть кучка вопросов к удобству и устойчивости, но может потому что я настроил VScode плохо.
И мой JTAG от ESP-IDF не имеет сигнала TRST (EN на ESP32) на разъеме JTAG (хотя на самой плате ESP32-PROG он его обслуживает, но для не-JTAG выходного разъема).
А если я куплю этот VisualGDB, то оно лучше работает чем то что у меня уже есть от OpenOCD/GDB? И я не понял, можно ли этот Visual GDB подружить с моим ESP-IDF JTAG железом и VS Code IDE?
И у меня Visual Studio Code, а там вроде все для Visual Studio в примерах? оно с VS Code работает?
Мне ничего хитрого не нужно: удобно отлаживать мой код, написанный для ESP32 под ISP-IDF (FreeRTOS), не Ардуино. Чтобы пошагово проходить, брейкпоинты условные ставить на переменные и на регистрируемые процессором исключения, смотреть переменные после останова.
Upd: О, у них есть демо 30 дней, но все равно непонятно про железо
Upd2: нашел в форумах что вроде пока этот VisualGDB только в VS работает, и нет версии для VS Code. Жаль.
А что есть для VS Code и JTAG с поддержкой ESP32? Согласен купить, если не мильон стоит.
-
В 02.10.2023 в 15:39, Alt.F4 сказал:
180сек - это край, если проблема только при первом включении, вероятно что-то с авто-определением скорости
Вполне возможно. Но как-то странно. Получается, что через 3 минуты периодической посылки в него "AT" он все-таки автоопределяется и отвечает "ОК"? Такое возможно, если в прошивке с завода в модеме какой-то регистр, хранящийся во флеше, не инициировали в нужный дефолт, и зависящий от него счетчик, пройдя через переполнение, наконец-то вызвал реакцию нужной фукции его фирмвари, и модем таки проинициализировался, ну и переписал этот флешовый регистр.
Про плохое питание и прочие полтергейсты в обвязке- все может быть. Но почему это все влияет только на первый запуск? И дальше никогда не повторяется?
Но это все мелочи, нужно знать чтоб не нервничать, реакции от производителя не прошу. Просто замечание, вруг что-то подобное моему у топикстартера делается.
-
В 05.09.2023 в 09:47, Alt.F4 сказал:
Наткнулся на странное поведение, после PWRKEY напряжение 1.8В на VDD_EXT есть, на STATUS нет, и на AT-команды не реагирует (20сек ожидание ответа модема, перезапуск и повтор цикла).
Из интересного.
20 секунд очень мало. я на SIM7600 установил таймаут ожидания реакции на первую AT команду после сброса 180 секунд. Ибо были прецеденты, именно с первым запуском собранного устройства. Во время всех следующих включения время от сброса до начала отвечания на AT команды значительно меньше.
Понимаю, модемы разные, но все-таки.
-
Я справился. Все врукопашную: тестер-пищалка плюс микроскоп и ручка с бумагой. Долго, но предсказуемо 🙂
Рисовал на бумаге выделенные модули, переносил в схемный редактор в компьютере, сразу же рисуя УГО компонентов.
Очень помог набор "микрокрокодилов" с алиэеспресса, примерно 10 баксов за комплект. Отлично цеплялись к SOIC 1.27mm, и к SOT-23, и к микрухам с шагом 0.5 мм. Гуглится по фразе "Universal Chip micro IC clamp SSOP"
-
1
-
-
21 минуту назад, CADiLO сказал:
При любых тестах туда извне генерация не подается.
Сигналы всегда генерит модуль управляемый служебными командами.
На выход подключается что-то типа такого через штатный разъем.
Угу. Значит это только для "членов профсоюза", и простой пользователь никак не может использовать этот разъем?
Тогда зачем они его в документации рисуют?
Upd: так есть смысл ставить тестовый разъем или это только для проверки в лаборатории Симкома может пригодиться?
-
Здравствуйте!
Рисую очередную плату с модемом, и захотелось однажды измерить, насколько согласованы цепи на плате и антенна, какое там реально волновое и прочее.
Симком в документации дает картинку со вторым разъемом ("RF connector"). Это для SIM7022, но такое же везде.
и пишет:
ЦитатаTo facilitate the antenna tuning and certification test, a RF connector and an antenna matching circuit should be added. The following figure is the recommended circuit.
...
The RF test connector is used for the conducted RF performance test, and should be placed as close as to the module’s MAIN_ANT pin. The traces impedance between SIM7022 and antenna must be controlled in 50Ω.Вопрос: могу ли я подключить к разъему "RF connector" моё оборудование (например, VNA) при впаянном модеме? не убью ли я модем во время тестирования, когда VNA будет генерить тестовый сигнал?
Может быть, где-то описана методика, как делать этот самый "RF performance test" и что делать с модемом? Например, просто не подавать питание на модем, или что-то там командами или уровнем на управляющем пине запретить...
-
16 часов назад, Alex-lab сказал:
Он скорее создаст вообще другой прибор. Если все пойдет как нужно, то так и сделаю. Но к теме это не относится.
Да, сейчас использую F303С.
Вы делаете довольно сложную конструкцию. Но ограничили ключевой параметр (качество измерения) использованием интегрированного 12-битного АЦП (с его ENOB 11.2 bit и SNR 66 dB). Вам этого хватает??
Видимо нет. Но что именно Вы хотите улучшить этим многоканальным усилителем, и насколько?
Тут гораздо эффективней добавить внешний АЦП с последовательным интерфейсом I2C или SPI или I2S. Ну и такой АЦП может внутри и PGA иметь, и высокоимпедансный вход, и мультиплексор. Цена вопроса- зависит от быстродействия и спецификации. Первый попавшийся 24-битный аудио-АЦП PCM1808PWR за 50 центов уже обещает SNR 95 dB.
-
4 минуты назад, Alex-lab сказал:
Увы, приходится. Форма импульса такая, что на фоне основного импульса может быть всплеск х10. Упрощать нет нужды.
упрощать всегда есть нужда 🙂
Ну хорошо, если все-таки динамического диапазона (или разрешения) АЦП не хватает: сделайте два усилителя и два сигнала: один в 10 раз больше другого, и измеряйте сразу два. Но три-то зачем, причем всего в два раза отличающиеся по амплитуде? Настолько плохой АЦП?
-
В 13.08.2023 в 14:38, Alex-lab сказал:
Пришлось подбирать резисторы что бы обеспечить усиления в каналах с соотношением 1:2:4|
А это нужно? Не хватает динамического диапазона (resolution) при измерении токов на единственном пределе "100A"?
Как-то сложно всё, хочется упростить...
-
1 час назад, makc сказал:
Попробуйте, должно стать лучше.
Супер! Стало работать для Win11 на 175%, для Win7 на 150%.
Спасибо!
-
Про тему "Electronix Neoclassic":
при масштабировании в Хроме больше чем 150% (то есть 175% и больше) пропадает информация о дате последнего сообщения в топике. Причем только при выборе темы Electronix Neoclassic(default), в других темах все остается на местах.
проверял на Win10 (Chrome).
На Win7- тот же эффект начинается с 150%.
Может быть, это особенности местного драйвера видеокарты и Хрома, но тогда почему на других темах такого эффекта нет.
-
А 7022 действительно значительно меньше потребляет чем 7020G, или там какие-то маркетинговые хитрости в расчетах?
PSM: 0.8 uA, 7020G: 3.4 uA
Idle: 0.11mA(DRX=2.56s), 7020G: 5.6 mA
Idle: 12uA (eDRX=163.84s, PTW=25.6s). 7020G: 30 uA (eDRX=655.36s)
Ну и интересен диапазон напряжение питания, 2.2-4.2 (SIM7020G: 2.1-3.6V). Хотя эти "4.2" не помогут питать напрямую от батареи. Хоть бы 4.4 сделали бы уже 🙂
-
47 minutes ago, MiKrobYc said:
Да, действительно не хватало символом, плохой терминал использовал
Купите логический анализатор типа Saleae, на Алиэкспрессе он 5-10 баксов стоит. Абсолютно необходимая и суперудобная штука. С его помощью отладка бы заняла гораздо меньше времени (сразу бы увидели, что за байты доходят до модема).
-
44 minutes ago, MiKrobYc said:
Я передаю только AT. Мне сим должен вернуть 0хD 0x41 0x54 0xA или я должен такую строку передать?
Будьте добры, приведите hex-коды того, что прилетает в модем. Я уже не надеюсь увидеть запись из логического анализатора, подключенного к пинам RX и TX, но хоть из терминалки что думаете что выдаете, напишите.
Про то, что нужно выдавать.
SIM7500_SIM7600 Series_AT Command Manual_V2.00.pdf
Quote1.4 AT Command syntax
The "AT" or "at" or "aT" or "At" prefix must be set at the beginning of each Command line. To terminate a Command line enter <CR>.
Commands are usually followed by a response that includes. "<CR><LF><response><CR><LF>"
Throughout this document, only the responses are presented,<CR><LF> are omitted intentionally.
FreeRTOS и другие, имеет ли смысл использовать?
в ARM, 32bit
Опубликовано · Пожаловаться
Задача№1: принимает решение о включении (на основе данных) и выдает этот сигнал в очередь для задачи №4
Задача№2 (или прерывание): принимает решение о выключении (на основе данных) и выдает этот сигнал в две очереди: для задачи №3 и для №4.
Задача№3: ждет (очередь с сигналами от №2) и выключает. больше ничего не делает.
Задача№4: ждет (очередь с сигналами от 1 и 2), и принимает решение по заранее обработанному алгоритму. Например, включает если пришел сигнал от №1(включить) и не пришел сигнал от №2(выключить) в течении предыдущих 2 ms и в течении следующих 10 ms.
Но вариантов много. Идея в том, чтобы разделить сложное действие на небольшие простые модули(задачи), с входом и выходом, которые просто спят пока нет новой входной информации.