Анонс моей Serial communication library
пока еще в разработке и без релиза
Из заявленного
работает пока только под POSIX'ом, потому что я пока не осилил родить себе Windows окружение для реализации platform-depend части кода ...
На данный момент оно вроде работает и по дизайну на голову выше, чем безобразный и мертвый OSerial, задроченный к тому же только на Lwt, когда мой Serialport I/O-agnostic по сути своей.
При работе с Ардуино мне крайне не нравятся эти sleep, но черт знает, что я делаю не так.
#ocaml #ann
пока еще в разработке и без релиза
Из заявленного
A cross-platform library for serial port communication in OCaml, which supports both POSIX and Windows systems. It provides a synchronous and asynchronous interface using various I/O libraries, such as Lwt, Async and Eio.
работает пока только под POSIX'ом, потому что я пока не осилил родить себе Windows окружение для реализации platform-depend части кода ...
На данный момент оно вроде работает и по дизайну на голову выше, чем безобразный и мертвый OSerial, задроченный к тому же только на Lwt, когда мой Serialport I/O-agnostic по сути своей.
При работе с Ардуино мне крайне не нравятся эти sleep, но черт знает, что я делаю не так.
#ocaml #ann
👍2
OCaml Tips. Публикация пакета в OPAM репозиторий.
Youtube
https://youtu.be/8WzDs1lb8rg
VK Video
https://vkvideo.ru/video-232966291_456239020
Видео иллюстрация статьи с ocamlportal.ru про то, как опубликовать свой пакет (библиотеку) в OPAM репозиторий для общего пользования:
https://ocamlportal.ru/recipes/publish-package.html
#ocaml #video #ocamltips #ocamlportal
Youtube
https://youtu.be/8WzDs1lb8rg
VK Video
https://vkvideo.ru/video-232966291_456239020
Видео иллюстрация статьи с ocamlportal.ru про то, как опубликовать свой пакет (библиотеку) в OPAM репозиторий для общего пользования:
https://ocamlportal.ru/recipes/publish-package.html
#ocaml #video #ocamltips #ocamlportal
❤2🔥2
[ANN] Mosaic - A Modern Terminal User Interface Framework for OCaml (Early Preview)
#share #ocaml
Mosaic is a high-level terminal UI framework for OCaml. It provides The Elm Architecture (TEA) for declarative UI development, with flexbox layout and efficient rendering.
#share #ocaml
😱2
Добавил на сайт ссылок на все более менее мои скринкасты (смотрите закрепы). Попробовал написать туториал.... Надо удалить даже упоминание этого. У меня рука от слова совсем не лежит в сторону написания чего-то такого обучающего, так как я хочу излить всё и сразу эдакий максимализм.
Оказывается можно локально определять эксепшены....
См. https://ocaml.org/manual/5.4/patterns.html#pattern
#ocaml
# let exception Stop_loop in
while 1 > 0 do
raise Stop_loop
done;;
См. https://ocaml.org/manual/5.4/patterns.html#pattern
#ocaml
🤯2👏1
Михаил Л. aka dx3mod
Анонс моей Serial communication library пока еще в разработке и без релиза Из заявленного A cross-platform library for serial port communication in OCaml, which supports both POSIX and Windows systems. It provides a synchronous and asynchronous interface…
OCaml
[ANN] Serialport - new serial communication library
Hi there! I’m happy to announce the first release of the serialport library. The library is planned to be a cross-platform library for serial port communication in OCaml, which supports both POSIX and Windows systems. It provides synchronous and asynchronous…
Я бы сказал, что ни говна ни ложки, но в эмбеддеде так много говна, что даже ложки из него.
Херня, нужна херня для херни, херня для херни лежала на форуме 2003 года, форум сдох пару месяцев назад, есть новая херня для херни на Гите, она не запускается, разраб херни для херни умер ушел в банкинг 6 лет назад, 3 ищуи (вкл закрытые), кто то решал твою проблему 23 года назад, решение не отписал, спасибо, вдупляешь в код херни для херни, оказывается она не для твоей херни, пишешь свою херню для херни, она не работает, читаешь даташит херни, первый раз прочитал криво и херня для херни не нужна.
Кратко про эмбедед
😁3
Очень ждём-с настоящий релиз Lwt6
https://discuss.ocaml.org/t/ann-lwt-6-0-0-beta-direct-style-multi-domain-parallelism/17283/8?u=dx3mod
https://discuss.ocaml.org/t/ann-lwt-6-0-0-beta-direct-style-multi-domain-parallelism/17283/8?u=dx3mod
OCaml
[ANN] Lwt.6.0.0~beta (direct-style, multi-domain parallelism)
After some feedback and some work, I’m happy to announce the release of lwt.6.0.0~beta00 and lwt_direct.6.0.0~beta00! (2 packages from ocsigen/lwt at 6.0.0~beta00 by raphael-proust · Pull Request #28558 · ocaml/opam-repository · GitHub) major CHANGES are:…
Михаил Л. aka dx3mod
Released v0.1 https://discuss.ocaml.org/t/ann-serialport-new-serial-communication-library/17594
Написал давеча утилиту для загрузки прошивки на Ардуино борду используя свою же либу (как обычно), что потребовал некоторый ресерч и изучение других проектов. В итоге получился stk500.ml. смотрите комментарии
Вам бы был бы интересен разбор того как работает загрузка прошивки на Ардуино борду под капотом, изучение того как работает загрузчик, устройство протокола? Я в принципе и так сделаю, но насколько есть интерес у местной публики :<
Вам бы был бы интересен разбор того как работает загрузка прошивки на Ардуино борду под капотом, изучение того как работает загрузчик, устройство протокола? Я в принципе и так сделаю, но насколько есть интерес у местной публики :<
❤4
Most functional code in OCaml go brrr
https://github.com/dx3mod/frontmatter_extractor/blob/master/lib/frontmatter_extractor.ml
https://github.com/dx3mod/frontmatter_extractor/blob/master/lib/frontmatter_extractor.ml
Вот в OPAM залетела и ещё одна мая библиотечка, на этот раз это frontmatter_extractor. 🫂
Вообще он требуется мне в бирблоге, где он изначально и был реализован с использования Ангстрома, но использовать Ангстром для этих задач это из пушки по воробьям.
Поэтому в этой реализации исключительно захаркоженный цикл (всё как мы любим), ну и теперь он доступен всем желающим...
P.S.
https://discuss.ocaml.org/t/ann-frontmatter-extractor-0-1/17634
#ocaml #ann
Вообще он требуется мне в бирблоге, где он изначально и был реализован с использования Ангстрома, но использовать Ангстром для этих задач это из пушки по воробьям.
Поэтому в этой реализации исключительно захаркоженный цикл (всё как мы любим), ну и теперь он доступен всем желающим...
P.S.
https://discuss.ocaml.org/t/ann-frontmatter-extractor-0-1/17634
#ocaml #ann
❤1🔥1
Михаил Л. aka dx3mod
Написал давеча утилиту для загрузки прошивки на Ардуино борду используя свою же либу (как обычно), что потребовал некоторый ресерч и изучение других проектов. В итоге получился stk500.ml. смотрите комментарии Вам бы был бы интересен разбор того как работает…
Прошивка Arduino под капотом
Кто меня давно читает, может знать, что я периодически вспоминаю про такую штуку Arduino и вообще про программирование под МК AVR, ибо это мой бэкграунд со времен шараги, который я с интересом вспоминаю.
Так вот, всегда было интересно как работает механизм прошивки МК. Вообще для тех, кто не в теме, то обычно существует два способа прошить микруху. Первый это использовать программатор, внешнее физическое устройство для прошивки по хардверному интерфейсу ISP (in-system programming). Второй способ программный, это использовать всевозможные загрузчики (они же бутлоудоры).
Сегодня поговорим про последнее, так как в Ардуино оно как раз и используется. Бутлоудер это такая часть прошивки, которая нужна чтобы загрузить основную часть прошивки (т.е. пользовательскую программу). Плюсы в удобстве, не требуются сторонние инструменты. Минусы в занимаемом месте и скорости старта.
Технически это работает так, в более старших моделях 8-битных авэрок есть поддержка bootloader section, включается определенным фьюзом. Таким образом после включения МК исполнение инструкций начнется не с 0x0000, а со секции загрузчика.
В Ардуино используют загрузчик Optiboot, умещающийся вроде как в 512 байт и имеющий разные фичи, вроде программного загрузчика (на моделях без bootloader section), ну и другие. Может техническая реализация и не тривиальная, но сама логика, алгоритм работы вполне очевидный - после запуска МК загрузчик пытается считать команды по UART интерфейсу, что подключен к чипу-конвертору для работы с USB, таким образом получаем последовательную связь к ПК или иным устройством.
Общение с Optiboot происходит на подмножестве протокола stk500v1. Про него я тоже недавно упоминал, когда реализовывал библиотеку.
Если вы прогали UART, то в принципе понимаете как это будет выглядеть. Теперь получив команды (опустим это), надо исполнить их. Для этого потребуются специальные инструкции для программной записи данных - SPM (self programming).
И... на этом все?
Ну... да. Вся сложность заключается в аппаратно-зависимых штуках. Тут могу посоветовать только пойти читать исходники. Я думал, смогу даже видео на тему сделать, но в итоге я осознал топик и теперь не знаю, о чем рассказывать. Кек. А я этим постом, надеюсь, закрыл свой гештальт.
P.S.
https://github.com/m3y54m/simple-avr-bootloader
https://github.com/dx3mod/toy-atmega328p-bootloader
#embedded #arduino
Кто меня давно читает, может знать, что я периодически вспоминаю про такую штуку Arduino и вообще про программирование под МК AVR, ибо это мой бэкграунд со времен шараги, который я с интересом вспоминаю.
Так вот, всегда было интересно как работает механизм прошивки МК. Вообще для тех, кто не в теме, то обычно существует два способа прошить микруху. Первый это использовать программатор, внешнее физическое устройство для прошивки по хардверному интерфейсу ISP (in-system programming). Второй способ программный, это использовать всевозможные загрузчики (они же бутлоудоры).
Сегодня поговорим про последнее, так как в Ардуино оно как раз и используется. Бутлоудер это такая часть прошивки, которая нужна чтобы загрузить основную часть прошивки (т.е. пользовательскую программу). Плюсы в удобстве, не требуются сторонние инструменты. Минусы в занимаемом месте и скорости старта.
Технически это работает так, в более старших моделях 8-битных авэрок есть поддержка bootloader section, включается определенным фьюзом. Таким образом после включения МК исполнение инструкций начнется не с 0x0000, а со секции загрузчика.
В Ардуино используют загрузчик Optiboot, умещающийся вроде как в 512 байт и имеющий разные фичи, вроде программного загрузчика (на моделях без bootloader section), ну и другие. Может техническая реализация и не тривиальная, но сама логика, алгоритм работы вполне очевидный - после запуска МК загрузчик пытается считать команды по UART интерфейсу, что подключен к чипу-конвертору для работы с USB, таким образом получаем последовательную связь к ПК или иным устройством.
Общение с Optiboot происходит на подмножестве протокола stk500v1. Про него я тоже недавно упоминал, когда реализовывал библиотеку.
Если вы прогали UART, то в принципе понимаете как это будет выглядеть. Теперь получив команды (опустим это), надо исполнить их. Для этого потребуются специальные инструкции для программной записи данных - SPM (self programming).
И... на этом все?
Ну... да. Вся сложность заключается в аппаратно-зависимых штуках. Тут могу посоветовать только пойти читать исходники. Я думал, смогу даже видео на тему сделать, но в итоге я осознал топик и теперь не знаю, о чем рассказывать. Кек. А я этим постом, надеюсь, закрыл свой гештальт.
P.S.
https://github.com/m3y54m/simple-avr-bootloader
https://github.com/dx3mod/toy-atmega328p-bootloader
#embedded #arduino
🔥3❤2🤯2😱1🍾1💘1
Могу всех поздравить с наступившим 2026 годом — это уже второй год, который встречает этот канал и, надеюсь, не последний! 🥳
Как и в прошлом году, могу пожелать своим подписчикам здоровья и успеха в своих начинаниях. И могу только мечтать, чтобы в новом году кто-то заинтересуется или углубился в изучение и использования языка программирования OCaml, связывающий этот канал.
А я продолжу делать для вас новый контент...
С новым годом! ❤️
Как и в прошлом году, могу пожелать своим подписчикам здоровья и успеха в своих начинаниях. И могу только мечтать, чтобы в новом году кто-то заинтересуется или углубился в изучение и использования языка программирования OCaml, связывающий этот канал.
А я продолжу делать для вас новый контент...
С новым годом! ❤️
❤5
Типичный пример двойной аллокации, которую можно встретить — преобразования между bytes и string.
Это в принципе встречается и не только в Окамле, а везде где строки стали неизменяемыми и разделились на иммутабл и мутабл интерфейс как в случае Окамла.
В таком случае при образовании одного в другого требуется в memory safety, достигаемая в самом простом способе — копировании объекта, в том же Расте мы можем описать в рамках передачи владения без необходимости лишних аллокаций. Но чтобы в Окамле обойтись без этой лишней аллокации, нам надо в ручную пропедалировать этот moving посредством unsafe трансформации: использовать Bytes.unsafe_to_string, ибо мы уверены, что выделенная память не будет использована для изменения.
Этому, к слову, посвящена секция на странице про unsafe на ocamlportal.ru.
Это в принципе встречается и не только в Окамле, а везде где строки стали неизменяемыми и разделились на иммутабл и мутабл интерфейс как в случае Окамла.
В таком случае при образовании одного в другого требуется в memory safety, достигаемая в самом простом способе — копировании объекта, в том же Расте мы можем описать в рамках передачи владения без необходимости лишних аллокаций. Но чтобы в Окамле обойтись без этой лишней аллокации, нам надо в ручную пропедалировать этот moving посредством unsafe трансформации: использовать Bytes.unsafe_to_string, ибо мы уверены, что выделенная память не будет использована для изменения.
Этому, к слову, посвящена секция на странице про unsafe на ocamlportal.ru.
❤3
Михаил Л. aka dx3mod
Типичный пример двойной аллокации, которую можно встретить — преобразования между bytes и string. Это в принципе встречается и не только в Окамле, а везде где строки стали неизменяемыми и разделились на иммутабл и мутабл интерфейс как в случае Окамла. …
Intel_hex
К слову, очередной преждевременный анонс моей еще одной лучшей библиотеки для Окамла — на этот раз intel_hex для манипуляции над Intel HEX форматом, который особо распространен в эмбдеде системс.
На данный момент библиотека в принципе позволяет все что от нее требуется, а именно читать и писать IHEX объекты:
#ocaml #ann
К слову, очередной преждевременный анонс моей еще одной лучшей библиотеки для Окамла — на этот раз intel_hex для манипуляции над Intel HEX форматом, который особо распространен в эмбдеде системс.
На данный момент библиотека в принципе позволяет все что от нее требуется, а именно читать и писать IHEX объекты:
let ihex =
Intel_hex.Record.
[
Data { offset = 0; payload = "hello " };
Data { offset = 7; payload = "world" };
]
let () = ihex |> Intel_hex.to_string |> print_endline
In_channel.with_open_text "firmware.hex" Intel_hex.of_channel
#ocaml #ann
❤2