Information
- Rating
- Does not participate
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Registered
- Activity
Specialization
Бэкенд разработчик, Инженер встраиваемых систем
Ведущий
From 200,000 ₽
C#
C++
Английский язык
Git
.NET
Visual Studio
C
Многопоточность
Программирование микроконтроллеров
Windows Forms
Ну ни кто не мешает перенаправить printf из скрипта в какой-нить отладочный канал и смотреть че творится внутри скрипта. Системный софт как-то на этом уровне отлаживает, не всегда можно дебажится. Да вопрос проверки корректности аргументов тоже можно зарешать.
А подскажите куда по графическим языкам глянуть?
Типовую VMLua не кручу, потому что мне на фиг не надо программировать контроллер из под виртуалки, не решаются так мои системные задачи и ПЛК для АСУ ТП так не делаются. Мне нужно программировать только бизнес-логику. Что бы править ее без перекомпиляции ядра и пускать в нее прикладных инженеров. А корутину пользую потому что так проще решить задачу - мне нужна явная передача управления из цикла скрипта обратно в процесс RTOS, с сохранением контекста скрипта, и явный возврат обратно в скрипт. И статью я собственно писал именно по это, что вот какая классная штука Lua, можно приспособить как ПЛК в маленьких реалтайм системах на раз-два.
Все, я понял вашу мысль. Вы абсолютно правы, но у меня специфическая штука, у меня нет главного стейта и основного стека:) У меня есть только стейт корутины, и корутина делает уступку только хосту. Т.е. по сути у меня нет корутины:) Я использую ее механизм для передачи управления между хостом и прикладной функций Lua, которая у меня бесконечный цикл и никогда не завершается. Можно было сделать и без коруитны, но поскольку у меня на Lua по сути написана итерация прикладного алгоритма (или функция выходных значений от входных если в терминах релейки), мне удобно через resume\yield передавать входные переменные и забирать выходные. Плюс явная уступка хосту дает мне возможность контроля над временем итерации прикладного алгоритма. И собственно в статье я про это и пишу, про использование механизма корутины, и в этом случае не нужно отдельного стейта, все живет в основном.
Если имеется ввиду внешний флэш, то да, есть такой вариант, но в любом случае основное ограничение в системе RAM. Флэша больше чем виртуальный памяти Lua машины не нужно.
Нет, я не использую файловую систему вообще. Я гружу байт код в выделенный сектор флеша и при старте система пытается запустить байт-код от туда. Файловая система может быть оправдана чисто с инструментальной точки зрения, usb mass-storage к примеру. Но вот у меня девайс по CAN скрипт получает, зачем там файловая система?
Для корутин не нужно отдельного стейта. Если она одна, то ее можно размешать в основной стейт без проблем.
Ну расширение расширениями, а доступ к памяти это уже не про ядро, а про архитектуру самого чипа. Физическим флэшем рулит не ядро, а контроллер флэш видимо. И пока адреса попадают в кэшируемую область там все на системной частоте. Т.е. шина контроллер фелш/ядро - высокоскоростная и 32-х битная. А вот дальше оно тормозиться. Но spi флэши не то что бы моя компетенция, не знаю какая там может быть производительность в принципе. В случае с WCH лишь могу предположить, что там все завязано на тех. процессы и наработки на младших 48Mhz ядер, с которых WCH и начинали. Раскатали какие-то готовые решения и тех. процессы. Жду релизов этого года от WCH, там как минимум двухъядерный H417 и неожиданно V305CC в 48-ногом корпусе с памятью как 64-х ногих братьев. Т.е. что принципиально новое они по памяти походу сделали. Но ждем-с...
Ну и это не однобитный доступ. По документам WCH на младшие ядра, 20МГц это не скорость физического SPI, это скорость внутренней шины. Что там у них на физической шине науке не известно.
Смотрите, давайте очень грубо прикинем. Я в реальном проекте туда перекинул инициализацию периферии. 12кб кода на -O3 оптимизации живет без кэша. Ну ок, имеем 12*1024 байта. Пусть грубо это поток команд из 3072 шт. что для такой оптимизации может быть близко к правде. Ну реально, какая на фиг разница какая там частота, это же все равно мегагерцы, миллионы операций в секунду:) Даже если оно не 20 микросекунд стартовать будет, а 200, как это увидеть?:) Поэтому моя стратегия, кидать туда инициализацию, которая обычно линейная и выполняется один раз при старте, но места может занимать прилично. А системный код циклический, там замедление будет скорее всего уже ощутимо.
Спасибо, может перепишу когда уляжется все в голове. Сабж мой личный ад последней пары дней, написал с терапевтической целю:)
RVF расширение выбрать и все работает. Но я то про логику IDE. От визарда IDE я ожидаю что мне настроят проект под выбранное ядро:) IDE то не сторонняя, а своя. Вот и все.
В IDE это выглядит в духе конструктора "собери сам". Не очень понятно кто такой RVXW.
Ну да, сам дурак, слишком долго жил в мире розовых пони и CubeIDE:) Счас проверил как перетаскивал проект на Geehy F405, таки да, в примерах под Eclipse у них FPU выключен. Просто раз WCH запилили свой IDE на Eclipse, то логично хотя бы в примере, который называется FPU, врубить этот самый FPU в настройках проекта:)
Рискну предположить что это про GCC. Я все проекты MoutRiver собираю на оптимизации -Оs. Начинал с портирования рабочего проекта с ST32F103R. Без оптимизации вообще не лезет в CH32V203R (FreeRTOS + CanOpenNode). Прям катастрофический. C оптимизацией примерно тоже самое по размеру что и STM-й код (собранный на -O2) и разница где-то 15-20КБ. Глянул на текущие .lst файлы, вроде как ничего лишнего из библиотек нет ни на V203, ни на V307.
У нас разные представления об экосистемах:)
Я пишу про работу из под IDE. Обычно, если производитель дает примеры под тот же чистый Eclipse, не говоры уже про IAR и Keil, в настройках проекта делается вся конфигурация. Тут, для CH32V3XX даже в примере с названием FPU, собственно FPU не настроен. Из встроенного в MoutRiver генератора проектов под CH32V3 тоже не включается FPU. Так что я исключительно про экосистему WCH.
Так вроде BT не то что бы опен-сурс, видимо дело в лицензировании, поэтому и закрыто все А вот почему не дают доступ к RF непонятно, но какая-то логика в этом определенно есть.
TMOS же менеджер стека, единое с ним целое. А вот на кой черт они 4 RTOS выложили без примеров интеграции с Ble...
Согласен полностью. А еще мы не знаем на чем сумрачный Китайский гений летает в космос и делает едрены бомбы:)
Думается в поставках сами производители не отказывают, но и двигать продукцию в РФ не рвутся (включая клонов STM). Вот только кто из российских дистрибов в одно лицо потянет раскрутить новый бренд, затаврить склад номенклатурой, плат отладочных притащить? C STM клонами по крайне мерее можно хоть как-то спрогнозировать спрос.
Ну деньги то сами себя не заработают:) Совместимые корпуса, знакомая периферия, низкая цена - норм стратегия по выходу на рынок. Кому Китайцы глобально нафиг сдалиcь лет 5 назад, когда F103 был меньше бакса? А в пандемию, половина рынка услышала от STM - несите ваши деньги и поставим вас в очередь на производство через пару лет, а вторая увидела F103 по 15USD:) Инженерная школа опять же таки сама себя не создаст. Что бы делать прям свое, без оглядки на предыдущие наработки и старших товарищей, надо и рынок сбыта иметь как у STM и бюджеты разработки сопоставимые. Посмотрим на следующие генерации. А пока да, плачем и жуем кактус:)
О, нет. Я просто посмотреть че вообще такое BLE запустил, так сказать для расширения кругозора:) Поскольку я других стеков ble не видел, мне сложно судить о корявости решения от wch. Если чисто о впечатлениях, они стек перетащили откуда-то сбоку. Он идет в составе операционки TMOS единой библиотекой на asm. В TMOS можно вкидывать callback на свои прикладные задачи. TMOS вытеснять задачи не умеет, так что не рассчитал время прикладного процесса, сломал стек:) Отсюда моя вторя ссылка на проект под RT-Thread. Как я нашел инфу на китайском сапорте, CH581 и прочие мелкие ядра, были экспериментом по закинуть к ble чутка периферии. А CH32V208 это эксперимент по накинуть на эксперимент с мелкими ядрами нормальную машину. И по моим ощущениям они сами не очень понимают что у них получилось:) Как итог, V208 сырой прям жесть. Весь SDK натянут с CH581 и прочих чахлых машинок, они мне не интересны, не смотрел туда. Но судя по китайском саппорту, у себя на родине они вполне популярный продукт.
Спасибо за замечание. Поправил.
1. Можно послушать лекции с жутким акцентом https://m.youtube.com/watch?v=6NE61BdSvqA На том же канале еще 3 части. Вот код к этим видосикам на оф. аккаунте WCH на Git. https://github.com/openwch/ch32_training_documentation/tree/main/04_remote_control_car
Это вообще единственное что официально есть про CH32V208:)
2 .Самое интересное что я накопал вот https://codeload.github.com/treideme/reaction-trainer/zip/refs/heads/master По проекту у чувака есть немного инфы на его стайте, искать надо, не помню уже. Найти можно. Там суть в чем, чувак запустил на CH32V208 RT-Thread, а в ее потоке запустили TMOS со стеком Ble.