@dlangru

Страница 361 из 719
qwerty
05.01.2018
11:21:15
я так и думал(

Google
qwerty
05.01.2018
11:25:27
Замути структурку
я думаю в двух словах рассказать не получится) Может статью знаете какую?

Ned Ogl
05.01.2018
11:25:44
Кстати, про асм и Ди. Не суйте асм в Ди, он там плохо сидит. Линкуйте отдельно

Evgeny
05.01.2018
11:26:14
нет, не очень. очень-очень маленькие и совсем не дженерик. хардкодю под STM32F103C8T6 - дешевый МК

Ned Ogl
05.01.2018
11:26:16
Интересен только inline llvm asm в случае с ldc

Evgeny
05.01.2018
11:26:56
Нормально он там сидит

Ned Ogl
05.01.2018
11:27:03
нет, не очень. очень-очень маленькие и совсем не дженерик. хардкодю под STM32F103C8T6 - дешевый МК
Юджин, я как-то собирался наехать на тему СТМ32, но тогда я ещё не знал о D. Ты ведь лдц компилишься?

Evgeny
05.01.2018
11:27:04
по крайней мере x86

Ned Ogl
05.01.2018
11:27:10
Нет

Убого он там сидит

Тот же НАСМ гораздо приличнее

Evgeny
05.01.2018
11:27:33
Для мелочей он нормально сидит

Ned Ogl
05.01.2018
11:27:45
Ну, для мелочей да

Google
Ned Ogl
05.01.2018
11:27:55
Я прост ядро пилю

На х86-64

Stepanos
05.01.2018
11:28:07
https://github.com/mit-pdos/xv6-public

Ned Ogl
05.01.2018
11:28:10
Мне не обойтись без асм макросов

Stepanos
05.01.2018
11:28:23
вот прикольная темка, перепилить на D можно

Evgeny
05.01.2018
11:28:23
На х86-64
под это дело кто-то уже пилит ядро, можно надыбать на гитхабе

Ned Ogl
05.01.2018
11:29:11
И он абсолютно нормально работает?

под это дело кто-то уже пилит ядро, можно надыбать на гитхабе
Ну ты че, я ж новатор. Своё болото теплее и жиже

Я по фану пилю

Чтоб научиться пилить

Не чтоб юзать

Stepanos
05.01.2018
11:30:20
все ОС по фану пилят)) не по фану - пилят существующие

Evgeny
05.01.2018
11:30:22
И он абсолютно нормально работает?
Ну что значит абсолютно? Напильника много нужно. Линкер используется от gcc для arm, скрипт линкера нужно свой делать

Ned Ogl
05.01.2018
11:30:39
Почему не lld?

Он ведь мультитаргет

То есть, кросслинчит искаропки

Evgeny
05.01.2018
11:31:07
не знаю насколько он мультитаргет, я не пробовал

Ned Ogl
05.01.2018
11:31:13
Плюс, понимает с недавних пор ld скрипты

Evgeny
05.01.2018
11:32:15
надо учесть, что я все творю под линупсом

Google
Ned Ogl
05.01.2018
11:32:28
Я тоже

А в чем у тебя сложности?

Evgeny
05.01.2018
11:32:46
как на виндовс готовить LDC для ARM я не знаю

А в чем у тебя сложности?
а должны быть сложности?

Ned Ogl
05.01.2018
11:36:22
Прост для меня, человека, который никогда не прогал контроллеры, есть только две проблемы. Всё ведь рано или поздно упирается в адреса там всякие и прочее. Должна быть либа, которая хоть как-то оборачивает голое железо. Я просто даже не знаю, какую команду отдать СТМу, чтобы он на конкретной ноге выдал единицу, итд. Это надо даташит читать для каждого чипа и пилить отдельный D модуль с обёрткой. Тогда заведётся. Вторая проблема: зашив. Надо составить какой-то особый объектник в каком-то формате "прошивки". Для этого и нужен линкер, но я даже не знаю, как СТМы хавают прошивку, как их загнать в режим прошивки, как указать интерфейс, по которому будешь шить, тип памяти, в которую её положить, итд.

То есть как сделать вручную то, что делает фирменная IDE. У меня как-то валялась ардуинка и я хотел заняться реверсингом Arduino IDE, чтобы глянуть, как она компилит и шьёт. А потом забил. Вот хочу стм32 погонять немношк

Evgeny
05.01.2018
12:04:28
Для плюсов есть всякие либы, хорошие или не очень. Для D мало что есть. Поэтому я написал мелкую либку для более легкого маппинга "адресов".

Фактически это более удобный вариант низкоуровневой либы CMSIS - https://developer.arm.com/embedded/cmsis

Тончнее она (либа) только по функциональности совпадает с CMSIS, больше ничего общего между ними нет. Подход радикально иной. В моей либке используются всякие чисто дешные фичи, которые позволяют красиво все упаковать

что касается прошивки, то генерится обычный elf-бинарник, из которого тем же линкером вытаскивается "чисто прошивка"

шить можно разными способами, лично я заливаю через китайский копеечный клон STLink при помоще OpenOCD

Точнее через связку GDB + OpenOCD

Evgeny
05.01.2018
12:10:05
заодно можно и худо-бедно отлаживать

Но в целом STM32 на D - это явно не для профессионалов. Я-то чисто как хобби это делаю, мне не впадлу даташиты курить и тратить время на ковыряние в ld-скриптах

если же зарабатывать на этом деле, то D - не годится пока для этих целей

Также я не заморачивался сильно с обобщенностью, реализую только обработку той части железа, которое мне нужно. Пока есть только инициализация, немножко работы c OLED-экраном через SPI, и чтение состояния энкодера на таймерах. Ну и просто ногами подергать тоже можно.

Расширяется это дело легко, но никаким вменяемым обобщенным высокоуровневым API даже не пахнет.

Короче основные сложности я уже решил. Я начал статейку писать по мотивам своей работы, но слишком ленив, чтобы ее закончить

Igor
05.01.2018
14:57:39
вот пояснение про RAII для betterC (https://dlang.org/blog/2018/01/04/dmd-2-078-0-has-been-released/) One of the limitations in -betterC mode has been the absence of RAII. In normal D code, struct destructors are executed when an instance goes out of scope. This is handled by DRuntime, and since the runtime isn’t available in -betterC mode, neither are struct destructors. With DMD 2.078.0, the are in the preceding sentence becomes were.

Pavel
05.01.2018
15:02:18
А как работает try finally в betterC? Я так понимаю там же нельзя исключения кидать?

Google
Igor
05.01.2018
15:04:11
получается что исключения нельзя а вот записать try..finally - можно

Evgeny
05.01.2018
15:06:52
они сделали некий резанный вариант try/catch/finally

что мешает в обычном режиме, если не бросается исключение убирать зависимость от рантайма?

Pavel
05.01.2018
15:10:55
получается что исключения нельзя а вот записать try..finally - можно
То есть это ничего не значащая конструкция или что?

Igor
05.01.2018
15:10:58
что мешает в обычном режиме, если не бросается исключение убирать зависимость от рантайма?
может и не мешает ничего, уверенно сказать не могу. но -betterC гарантирует проверки времени компиляции что рантайм не портебуется.

Pavel
05.01.2018
15:11:16
Или если будет segfault то finally все равно выполнится?

Evgeny
05.01.2018
15:11:48
segfault - это не исключение, так что конечно не выполнится

Igor
05.01.2018
15:11:59
Admin
ERROR: S client not available

Evgeny
05.01.2018
15:12:19
хотя в виндовс не знаю, в линукс точно нет

Igor
05.01.2018
15:12:52
просто импементировали через такой можно скзать костыль…

Pavel
05.01.2018
15:13:35
segfault - это не исключение, так что конечно не выполнится
Ну может там какой-то хитрый обработчик сигнала висит, который передает управление на finally )

Просто это совсем не в духе D - плодить бессмысленные конструкции.

Evil
05.01.2018
15:14:36
На правах рекламы

Боты и исследования Чат боты, игры в чатах, заработок, разработка. https://t.me/SatansonBlog

Мой канал

Начал вот

Igor
05.01.2018
15:16:18
Просто это совсем не в духе D - плодить бессмысленные конструкции.
я точно не знаю бессмысленно ли try/finally для betterC. Интересно было-бы понять это точно

Evgeny
05.01.2018
15:17:21
попробуй new вставить в свой код и компильнуть с betterC

Google
Pavel
05.01.2018
15:18:22
хм есть у меня одна идея.

Evgeny
05.01.2018
15:18:27
компилятор никаких ошибок не выдаст, линкер выдаст,

Pavel
05.01.2018
15:18:40
А есть где 078 онлайн попробовать?

Evgeny
05.01.2018
15:19:39
То есть это ничего не значащая конструкция или что?
Просто через него реализован scope(exit), вот и запилили урезанную версию

Pavel
05.01.2018
15:20:16
Да да

void test() { try { writeln("try1"); return; writeln("try2"); } finally { writeln("try finally"); } }

Вот в такой штуке try finally будет напечатано все равно.

Это я проверил на обычном D, в 2.078 betterC должно так же работать.

Evgeny
05.01.2018
15:23:09
В такой код превращается вот в это (ради чего и пилилось): void test() { scope(exit) writeln("try finally"); writeln("try1"); }

Pavel
05.01.2018
15:23:50
Вот так то выглядит гораздо красивее

Evgeny
05.01.2018
15:24:36
Поэтому finally не нужен.

особенно если учесть, что еще есть scope(success) и scope(failure)

чем вообще принципиально отличается betterC от обычного режима? Фактически умолчальными настройками линкера

Igor
05.01.2018
15:28:07
тогда непонятно - часть фич для betterC находится в настройках для линкера, часть в компиляторе?

Evgeny
05.01.2018
15:28:49
понятия не имею. я вот только что заснул в betterC вот такой код: extern(C) void main() { throw new Exception("error"); }

И что, думаете компилятор поругалса? А вот хуй. Только линкер ругнулся

Igor
05.01.2018
15:30:09
ладно, пусть пилят, я им всё-равно не пользуюсь

Evgeny
05.01.2018
15:30:24
экзешники полчаются меньше ага, потому что в режиме betterC рантайм отрывается принудительно. Что мешает в обычном режиме отрывать его, если он не используется я не знаю

А так nogc уже достаточно чтобы не напортачить

да и кто запрещает сделать свой микрорантайм с обработкой new/delete?

впиливать GC в дешку было ошибкой. Не потому что GC - это плохо, а потом что в дешке нормальный GC сделать невозможно

Страница 361 из 719