Size: a a a

2021 April 28

I

Igor in ru.nim.talks
Регистры по идее это не сложно должно быть, используя asm (ключевое слов)
https://nim-lang.org/docs/manual.html#statements-and-expressions-assembler-statement
еще есть прагмы которые позволяют вмешиваться в кодогенерцию типа https://nim-lang.org/docs/manual.html#implementation-specific-pragmas-codegendecl-pragma
источник

I

Igor in ru.nim.talks
C eще проще чем с cpp. Начинай с простых примеров типа pin вкл выкл. Мне проще оказалось влючать транспилированный nim в проект с hal, но проект к тому моменту имел много cpp кода который было лень переводить в nim.  Есть другой более правильный путь: c и h файлы использовать при сборке с помощью nimble, но до этого у меня руки пока не дошли.
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
-d:release в конфигах не работает
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
Тоже самое с danger
источник

I

Igor in ru.nim.talks
На discord-e есть канал nim там подраздел embedded, может быть полезен.
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
Их нужно в вызове компилятора указывать, и если -d:danger указать, то release уже не нужно
источник

J

John in ru.nim.talks
Буду пробовать. Интересно, насколько проще на Nim писать, в сравнении с C++? Хотя бы приблизительно, субъективно. А то с плюсами опыта у меня не было.
источник

I

Igor in ru.nim.talks
Спасибо! Упустил этот момент, я в все в кучу закидывал чтобы командная строка была более чистая при вызове nim.
источник

f

for(int c; (c = getc... in ru.nim.talks
По сравнению с плюсами для /в основном процедурного/ кода получается гораздо проще
источник

I

Igor in ru.nim.talks
Кардинально проще. Синтаксис чище, код проще писать и  читать.
источник

I

Igor in ru.nim.talks
Вот еще опыт как avr чипах еще на старом nim (0.xx) скрещивали с ардуино:
https://disconnected.systems/blog/nim-on-adruino
a вот nim + arduino свежий:
https://github.com/zevv/nim-arduino
источник

I

Igor in ru.nim.talks
Еще подумал аргументы за и против C vs CPP vs Nim в embedded. Если работа по найму в этом направлении то мимо C точно не проскочить, CPP тоже много куда сейчас запихивать стали.
Nim же он пока только в начале пути в этом направлении.

Если же для себя или имеешь возможность выбирать языки для реализации (нет сертификации изделия и подобного) то Nim просто приятен, эстетически. Кроме того метапрограммирование весьма полезно именно в железках, вплоть до того что  можно свой DSL создать на макросах, и компилироваться он будет в супер малый код на регистрах, как будто руками писал, но гораздо удобнее.

Для примера открой какой нибудь пример на C для работы с регистрами или hal, половина кода это простыни неудобоваримого кода, вторая половина это комментарии поясняющая что эта абракадабра делает.

Когда я придя с десктопов и веба в embedded увидел эти простыни прямо фаломорфировал, насколько ужасно всё выглядит внутри. Конечно дело в том, что микроконтролеры это набор палок и веревок которые нужно собрать в нужном порядке иначе не работает. Настройка элементарных вещей не тривиальна.

Казалось бы бери HAL от производителей. Но НAL это дно с точки зрения API, написанное индусами, но лучше нет.
И тут на помощь спешит Nim который позволяет завернуть это некрасивое нечто в обертки (раз и навсегда) и в большинстве случаев просто работать с красивым кодом.
источник

I

Igor in ru.nim.talks
Ибо бомбит, от ebedded кода
источник

J

John in ru.nim.talks
Да, пока есть что выбирать. Вникаю в hal, ужас сплошной. Не смотря на наличие примеров от разработчиков hal, даже в них с трудом вникаю. Комментарии порой слишком общие. Целый блок кода, например, назвали калибровкой перед работой ADC, а что там внутри происходит сам разбирайся. Документация вообще по регистрам, а не hal. Комментарии к переменным некоторых функций типа "порт – это номер порта", а "маска – это маска". Если первое понятно, второе так и не допёр что туда писать. В итоге для переключения состояния пока использую просто запись в пин, а не переключение, для которого нужна какая-то маска.
источник

I

Igor in ru.nim.talks
Судя по контексту, маска это доступ по положению единичек в маске например 0b00000010 это второй пин в порту (скажем порт А, второй пин называется PA_2), 0b00000100 это третий,
0b00001001 это 4й и первый вместе.
Используя маски групповые операции с пинами порта можно делать атомарно, одновременно зажигая или сбрасывая несколько пинов
источник

J

John in ru.nim.talks
Может быть. Попробую, спасибо. Только вот человек без опыта до такого не додумался бы наедине с их документацией.
источник

𝕍𝕃

𝕍𝕒𝕝𝕖𝕣𝕚𝕚 𝕃𝕖𝕓𝕖𝕕𝕖𝕧... in ru.nim.talks
Приветик!

Как запустить этот код?


import random
randomize()
proc randThing(): string =
   let randomInt = rand(5)
   if randomInt != 5:
       raise newException(OSError, "random number is not 5 :( ")
   return $randomInt

try:
   let start = randThing()
except:
   echo "exception"
   let start = "except"
echo start





test.nim(14, 6) Error: undeclared identifier: 'start'
источник

G

Gabben in ru.nim.talks
Поставить echo start в один скоуп с start 🤔
источник

G

Gabben in ru.nim.talks
А, м. Либо вынести start выше и объявить как var start: string, и в блоках try-except делать start = ...
Либо выводить результат сразу в блоке try-except
источник

𝕍𝕃

𝕍𝕒𝕝𝕖𝕣𝕚𝕚 𝕃𝕖𝕓𝕖𝕕𝕖𝕧... in ru.nim.talks
Solved!
Объявляю var start до try как string
источник