Михаил Л. aka dx3mod
44 subscribers
85 photos
11 videos
10 files
238 links
my tiny tech blog
Download Telegram
Михаил Л. aka dx3mod
Released v0.1 https://discuss.ocaml.org/t/ann-serialport-new-serial-communication-library/17594
Написал давеча утилиту для загрузки прошивки на Ардуино борду используя свою же либу (как обычно), что потребовал некоторый ресерч и изучение других проектов. В итоге получился stk500.ml. смотрите комментарии

Вам бы был бы интересен разбор того как работает загрузка прошивки на Ардуино борду под капотом, изучение того как работает загрузчик, устройство протокола? Я в принципе и так сделаю, но насколько есть интерес у местной публики :<
4
Вот в OPAM залетела и ещё одна мая библиотечка, на этот раз это frontmatter_extractor. 🫂

Вообще он требуется мне в бирблоге, где он изначально и был реализован с использования Ангстрома, но использовать Ангстром для этих задач это из пушки по воробьям.

Поэтому в этой реализации исключительно захаркоженный цикл (всё как мы любим), ну и теперь он доступен всем желающим...

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
🔥32🤯2😱1🍾1💘1
Немного про AI
👍4
Могу всех поздравить с наступившим 2026 годом — это уже второй год, который встречает этот канал и, надеюсь, не последний! 🥳

Как и в прошлом году, могу пожелать своим подписчикам здоровья и успеха в своих начинаниях. И могу только мечтать, чтобы в новом году кто-то заинтересуется или углубился в изучение и использования языка программирования OCaml, связывающий этот канал.

А я продолжу делать для вас новый контент...

С новым годом! ❤️
5
Типичный пример двойной аллокации, которую можно встретить — преобразования между bytes и string.

Это в принципе встречается и не только в Окамле, а везде где строки стали неизменяемыми и разделились на иммутабл и мутабл интерфейс как в случае Окамла.

В таком случае при образовании одного в другого требуется в memory safety, достигаемая в самом простом способе — копировании объекта, в том же Расте мы можем описать в рамках передачи владения без необходимости лишних аллокаций. Но чтобы в Окамле обойтись без этой лишней аллокации, нам надо в ручную пропедалировать этот moving посредством unsafe трансформации: использовать Bytes.unsafe_to_string, ибо мы уверены, что выделенная память не будет использована для изменения.

Этому, к слову, посвящена секция на странице про unsafe на ocamlportal.ru.
3
Михаил Л. aka dx3mod
Типичный пример двойной аллокации, которую можно встретить — преобразования между bytes и string. Это в принципе встречается и не только в Окамле, а везде где строки стали неизменяемыми и разделились на иммутабл и мутабл интерфейс как в случае Окамла. …
Intel_hex

К слову, очередной преждевременный анонс моей еще одной лучшей библиотеки для Окамла — на этот раз 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
🚬
😭3
ООО

LWT 6

ЖДЕМ-С
🔥2
Ух! OCaml Platforms все хорошеет и хорошеет 🐫
🔥3
OCaml tips. Работа с байтовыми данными на OCaml

https://ocamlportal.ru/recipes/working-with-bytes.html

Смотреть на ВК видео.
Смотреть на Ютабе.

#ocaml #video #ocamltips #ocamlportal
2🔥1
Внес несколько изменений на ocamlportal.ru: добавил рецепт про ведения пакетa в OPAM, актулизировал инфу про lwt 6, добавил ссылки на коммуните на главную страницу
🔥3
Там Раст вроде как вышел...
🤯1
Короче, на Окамле можно писать гуй под МакОсь 🚬
🔥52
К слову, от меня снова начали отписываться.... По моему это заговор против моей евангелисткой деятельности за Окамл в массы 👀
😭4😢1