Оказывается можно локально определять эксепшены....
См. 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
Михаил Л. aka dx3mod
Intel_hex К слову, очередной преждевременный анонс моей еще одной лучшей библиотеки для Окамла — на этот раз intel_hex для манипуляции над Intel HEX форматом, который особо распространен в эмбдеде системс. На данный момент библиотека в принципе позволяет…
Intel HEX разбор формата.pdf
113.9 KB
Состряпал вот такую презентацию.. Если будет интерес, то можно будет записать очередной крутой скринкаст🚬
Михаил Л. aka dx3mod
ООО LWT 6 ЖДЕМ-С
Опа, он вышел в релиз!
https://github.com/ocsigen/lwt/releases/tag/6.0.0
https://github.com/ocsigen/lwt/releases/tag/6.0.0
Михаил Л. aka dx3mod
Intel_hex К слову, очередной преждевременный анонс моей еще одной лучшей библиотеки для Окамла — на этот раз intel_hex для манипуляции над Intel HEX форматом, который особо распространен в эмбдеде системс. На данный момент библиотека в принципе позволяет…
К слову, оно (
intel_hex) теперь доступно для установки через OPAM... Там много, что не сделано, не знаю, когда найду время, желание и силы на все это :<