Ви не увійшли.
Прошу тих, хто у темі, дати пояснення: які плюси має такий підхід?
Плюси: одночасний доступ до декількох бітів у межах однієї GPIO банки; на деяких контролерах можливіть атомарного toggle; зазвичай трохи швидше, трохи менше розмір коду.
Мінуси: не кросплатформно.
На скільки швидше виконується операція?
На якому контроллері, з яким фреймворком?
Реалізуйте обидва варіанти, заміряйте швидкість або проаналізуйте асемблерний код.
І чи варто взагалі використати такий підхід?
Іноді варто, іноді ні. Залежить від задачі.
Який є простий спосіб "скидання" всіляких зарядів до заданого виводу (виводам), щоб вимірювана величина ємності відповідала дійсності?
Щоб вимірювана величина відповідала дійсності, проводять калібровку, і враховують паразитні ємності при обчисленні актуального значення з виміряних величин.
Є декілька методів вимірювання ємності. Ви який збираєтесь використовувати?
https://forum.arduino.ua/img/members/4196/123.rar скетч
Це код, згенерований FLProg. Він не призначений для читання та редагування людиною. Змінювати потрібно в оригінальному .flp файлі, а не в генерованому проміжному коді.
А враховуючи географію розташування видавця того FLProg, сто раз подумайте, чи варто ним користуватись.
Звісно, якщо у когось багато вільного часу та натхнення, можна реверс-інженерити і розібратись, які змінні там за що відповідають. Але куди простіше написати таку ж функціональність з нуля.
посилання та скетч прикріпив
Це посилання на відео. Покажіть сам скетч, щоб не доводилось колупатись в якихось незрозумілих архівах на гугл драйв з корявим кодуванням імен файлів.
Несколько библиотек найдено для "Control_Surface.h"
Используется: C:UsersSDadminDocumentsArduinolibrariesControl_Surface
Не используется: C:UsersSDadminDocumentsArduinolibrariesControl-Surface-main
Як сказано вище, у вас чомусь дві бібліотеки, що надають Control_Surface.h. Що таке Control-Surface-main?
Як ви встановлювали Control_Surface? Яку версію?
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Увімкніть цю опцію. Покажіть повний лог збірки, з командами, які виконуються. Бажано збережіть у файл та завантажте сюди чи на який-небудь pastebin, бо форум вирізає бекслеші у повідомленнях і робить логи погано читабельними.
Помилка можливо пов"язана з тим що компілятор С++ старий. Візьміть свіжу Arduino IDE.
Та наче і Legacy IDE, і 2.x IDE використовують один і той же тулчейн з gcc 7.3.0.
Щойно перевірив: в Arduino IDE 1.8.19 приклад "3. MIDI Interfaces/USBMIDI-Adapter" з Control_Surface версії 2.1.0 компілюється успішно для UNO, якщо замінити "midi_ser {Serial1}" на "midi_ser {Serial}". Але це ніяк не повʼязано з помилкою, що вилазить у автора.
Припускаю, що автор багато років не оновлював тулчейн, і там ще якийсь 5.x. Але це не точно. Потрібно бачити лог компіляції.
До речі, в кожному радіокерованому дроні є esp8265/esp8266/esp32. Таке життя..
Ну, не прям в кожному, різні бувають. А там де є - то не від хорошого життя, а за принципом "краще так, ніж ніяк".
Причем пишут, что эта часть работает на ядре 0, то если свою прошивку запустить на втором ядре, всё равно когда никогда может тормозок проскочить.
Ну, блоби фірмварі зараз багато де завантажуються: на GPU, на аудіочіпах, на мережевих адаптерах. Але що в ESP32 воно прямо на одному з ядер виконується, не знав. Не розумію таких рішень.
Так что, для управления ядерным реактором, я больше бы доверился стм, а не этой китайской фигне.
100%
Вот мне и стало интересно, каким образом нынче можно проверить безотказность действия электронной приблуды, если даже программист не знает как работает та ОС, если исходники закрыты и хрен его знает что она там вытворит.
В теорії, має бути специфікація інтерфейсів такої ОС. Якщо програма користується інтерфейсами коректно, згідно специфікації, то все ок. Для того такі мови як C та C++ стандартизовані по ISO. А наскільки довіряти самій такій закритій ОС - нехай уже менеджмент вирішує і бере на себе відповідальність, а не програміст.
Те ж саме і з залізом.
когда появились есп (а там без freertos никак) ... видимо та ос что-то себе там придумала поработать...
Хіба там якась закрита ОС? Я глибоко не копав, але наскільки знаю, там похідна від FreeRTOS чи щось подібне, і збирається з ісходніків. То сама архітектура Xtensa наче б то пропрієтарна. А останні сімейства ESP32 на ядрі Risc-V взагалі.
Случайно, не Вы ли мне ТАУ в КПИ преподавали? )))
Ні, не памʼятаю такого в своїй біографії)
Помница на ютубе видел передачку, где аппарат лучевой терапии, из-за глюка в программе убил несколько пациентов. А ведь наверняка такой аппарат проходил все проверки.
Therac-25? Якраз після того інциденту вимоги до сертифікації в мед.індустрії були переглянуті та суттєво посилені.
Представляю как сейчас такое можно показать, например, на есп32 со встроенной закрытой операционкой.
Із теорії надійності, система може вважатись надійною лише коли доведена коректність взаємодії між її складовими компонентами, і кожний компонент системи є також надійним (рекурсивно).
Проприєтарні технології - то взагалі окрема тема.
я не про бытовые безделушки, а там, где глюк в программе может стоить человеку здоровья или жизни.
Такі проекти мають проходити незалежний аудит і сертифікацію.
Чет у автора через полдня нифига не запрацювало... или это другое?
Яка там у автора мотивація використовувати STM32 і RTOS для цієї задачі - то не моя справа) Я про загальну тенденцію в індустрії, де "не влазить в STM32F103 - візми STM32F411", бо так виходить дешевше.
лет двадцать назад такие проекты умудрялись в тини13 впихивать, а нынче стм с 32кб не хватает.
Зараз теж ніхто не заважає впихнути. Але критерії змінились. Зараз цінується, щоб без занурення в тему і через півдня якось запрацювало. Ресурси на розробку (час × кваліфікація) дорожчі за елементну базу.
Походу тут дилема.
В розробці так завжди
За виграш в одному доводиться платити чимось іншим.
І лібу знайти можна під що завгодно.
Можна відмовитись від ардуіно фреймворка і збирати прямо з FreeRTOS. Звісно, бібліотеки, що використовують ардуіно-специфічні API, доведеться або адаптувати, або замінити, або реалізувати самому.
Але жирне.
Жирне воно буде в будь-якому разі. 32 кілобайта на 32-бітній архітектурі - це не ті ж 32 кілобайта на 8-бітній.
Як мінімум для дисплея з i2c ліба під cmsis існує
Доречі, хіба у 1602 дисплея рідний інтерфейс - I2C? Там же мабуть HD44780 і екстендер типу PCF8574. Якщо підключити через рідний інтерфейс, то не потрібно ні Wire, ні I2C HAL. Датчик MAX6675 на SPI же наче б то.
Зручніше ніж ардуїнівський суперцикл - окремі ізольовані таски. ... Але розмір не радує.
А ще окремий стек в RAM для кожної задачі. Та й цикл воно, наскільки бачу, все одно крутить, тільки пустий.
Логіку ізолювати можна і без RTOS. То якщо задачам пріорітети потрібні, тоді має сенс. Ну то таке.
Правда цілочисленний PID регулятор може спрацювати не так як хочеться
Fixed point? Для вашої задачі, думаю, точності має вистачити.
Походу так. І походу притягнув її дисплей з i2c.
Якщо в самому HAL так інтерфейс до I2C реалізовано, то воно і напряму, без Wire, буде здорове. Я би пошукав альтернативні імплементації, щоб без slave mode. Якщо нема, то можна й HAL'івську імплементацію трохи порізати. Але там окрім I2C іншого болота теж вистачає.
Також можна спробувати зібрати з LTO (build_flags = -flto). Але не факт, що успішно злінкується без танців з бубном.
Що у вас за конфігурація platformio?
Які саме ліби використовуєте?
Для термостата що там потрібно? Регулятор та примітивний UI. Не дуже розумію, навіщо там RTOS.
взяв тулзовину puncover, дивлюсь куди ділось 32к флешки.
А objdump що показує? Окрім .text є ще секції .data та .rodata.
Наприклад, дисплей хоч і символьний, але бібліотека може тягнути кастомні бітмапи для завантаження в CGRAM.
Я так розумію, дуже багато місця зайняла float математика, яку притягнула з собою ліба термометра (_adddf3, __aeabi_dmul і тому подібне).
Їх може і який-небудь snprintf() притягнути.
Але абсолютний рекордсмен - HAL (HAL_I2C_EV_IRQHandler, HAL_RCC_OscConfig,HAL_UART_IRQHandler).
Так це мабуть ардуінівська Wire. Вона дурна.
UPD: сама по собі HAL_I2C_EV_IRQHandler() в stm32f1xx_hal_i2c.c монструозна. Не розумію, навіщо імплементувати і master, і slave mode в одному місці одночасно.
Теж не працює на arduino nano, на іншій платі процює
На якій іншій? Подивіться, чим ті плати відрізняються. Може це підкаже де проблема.
Яка версія прошивки, 1.5, чи 1.4, чи ще якась?
DEBUG_UART ставив в 1, нічого не змінилось
Навіть "start" на UART не зʼявляється після ресету?
При включенні помпа одразу працює, sw енкодера як інвертовано працює.
Там в якості вимикача живлення навіщось цілий драйвер двигунів використовується. У вас такий же драйвер? Що на D3 при включенні?
Вот это самый главный неиследованный вопрос. Почему должно что-то не то записаться? Если, например, подключить к выводу XTAL генератор импульсов и подавать по одному импульсу хоть раз в день, от этого программа не будет выполняться?
З даташита Atmega328P:
When applying an external clock, it is required to avoid sudden changes in the applied clock frequency to ensure stable operation of the MCU. A variation in frequency of more than 2% from one clock cycle to the next can lead to unpredictable behavior. If changes of more than 2% is required, ensure that the MCU is kept in reset during the changes.
Це якщо сконфігуровано для External Clock. Якщо сконфігуровано для кварца, то таке взагалі не передбачається.
Чисто теоретично, в повністю статичному МК (без DRAM, такому як AVR), якщо імпульси з правильними фронтами (з одного боку достатній slew rate, з іншого вищі гармоніки на допустимому рівні), то має працювати (ще питання по роботі АЦП та записі в EEPROM).
Але які там будуть імпульси, коли генерація ще не стабілізувалась? От перевищить амплітуда поріг на декілька наносекунд, один блок МК сприйме це за тактовий імпульс, а інший його пропустить, і все.
В деяких схемах ставлять D-тригер для поділу частоти кварца навпіл, це дещо підвищує стабільність, але не у всіх випадках.
Согласен, в авр для этого даже фьюзы специальные есть. (65 мс максимум, если память не подводит). Только речь же была, что программа "херовила", т.е. тактирование, какое-никакое, но всё же было. Или я не понял вопрос.
Ну ось іде нормальне тактування, програма виконується. Тут приходить імпульс, який зриває генерацію, кварц починає "розкачуватись" заново. Ядро замість стабільних 16 МГц отримує хто зна шо в якому спектрі. При цьому відбувається читання/запис регістрів чи SRAM. Прочитатись чи записатись може зовсім не те, що мало би при нормальній роботі.
зы. Да и то, что выручил внешний генератор тоже такое...
Автор же про внутрішній RC писав. Релаксаційний осцилятор сам по собі набагато стабільніший, тим більше на кристалі самого МК.
Что-то странно. Кварц может "плыть" только от перепадов температуры
Мова не про стабільність частоти, а про зрив генерації. Кварцу потрібен деякий час, щоб коливання стабілізувались та вийшли на потрібну амплітуду. А якщо в МК використовується PLL, то ще й час на захоплення фази.
Ще коли по живленню йде дзвін, близький до однієї з гармонік, кварц може намагатись заводитись не на тій гармоніці, на якій потрібно.
В мене були проблеми на avr, пов'язані з кварцем. При зовніх завадах чіп починав поводити себе хаотично. Це було не часто, але було. Точного вимірювання часу було не потрібно, тому проблема повністю була вирішена шляхом переходу на внутрішній генератор. Я більш всього не хочу щоб таке трапилось з esp32, тоб то не ребут або резет по вачдогу а саме раптова хаотична поведінка
Отож. Внутрішній RC-осцилятор надійніше, але чи буде на ESP32 з ним працювати вайфай? В цю тему не заглиблювався, припускаю, що тільки з зовнішнім кварцем. Треба дивитись в документацію, як там підсистема тактування реалізована, але мені зараз лінь шукати.
Може спеціалісти по ESP32 підкажуть, чи можна у ESP32 тактувати ядро внутрішнім осцилятором, а вайфай зовнішнім кварцем.
Там же ще низькочастотний RTC осцилятор є.
Якщо збираєтесь використовувати екранований модуль, то і кварц буде під екраном, так що з точки зору електромагнітних перешкод має бути ок. Якщо по живленню чи з периферії нічого не пролізе.
З кварцем проблеми в основному через механіку, температуру, або плату погано помили. Але у разі збою ядро з Clock Failure Detector автоматично перемкнеться на внутрішній осцилятор, і як мінімум дасть можливість сигналізувати про збій.
Також не зашкодить увімкнути бортовий ватчдог, або навіть поставити зовнішній.
Щодо можливостей самих контролерів по забезпеченню надійності, то потрібно дивитись, які можливості вам потрібні. Звісно, абсолютну надійнісь забезпечити неможливо, але потрібно намагатись, щоб у разі збою поведінка системи була принаймні детермінованою.
Наприклад, у STM32 та деяких AVR є апаратний механізм Clock Failure Detection. У ESP32 такого не зустрічав. Може тому що розробники вирішили, що збій осциляції не є проблемою у сценаріях застосування ESP32, а може тому що стабільність забезпечуєься якимись іншими внутрішніми механізмами.
Brownout Detector наче б то є у всіх.
Електромагнітна сумісність визначається для пристроя в цілому, а не для окремого компонента, такого як МК.
Результат залежить від реалізації схеми живлення, способу підключення датчиків та виконавчих пристроїв, розводки плати, екранування і т.д.
"Шумне" середовище - теж розпливчате поняття, у шума є певний спектр, інтенсивність.
Навряд чи на ваше питання "чи можна так зробити" можна відповісти без практичних випробовувань конкретного пристроя в конкретних умовах.
github.com/BruceDevices/firmware/issues - тут уже дивились?
причем младший нибл, интересненько.
А саме 3-й біт, 0x08.
Флеш посипалась, усьо.
Воно-то може полежати і після стирання ще почати програмуватись, але я б на це не розраховував і цьому чіпу не довіряв.