OberonCore https://forum.oberoncore.ru/ |
|
Компилятор Oberon → ARMv6-M, ARMv7E-M https://forum.oberoncore.ru/viewtopic.php?f=137&t=5232 |
Страница 8 из 9 |
Автор: | Kubanych [ Суббота, 04 Февраль, 2017 02:34 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Kemet писал(а): Я пробовал (для другого компилятора ) для A2? А где можно посмотреть попытку? |
Автор: | Kemet [ Суббота, 04 Февраль, 2017 17:12 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Kubanych писал(а): Kemet писал(а): Я пробовал (для другого компилятора ) для A2? А где можно посмотреть попытку? |
Автор: | Comdiv [ Суббота, 04 Февраль, 2017 18:29 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Kemet писал(а): Так что лучший вариант именно в Си. Или в С++. Си. Абстракции С++, на первый взгляд, лучше подходят под Oberon, но являются довольно медленными. |
Автор: | Comdiv [ Суббота, 04 Февраль, 2017 18:31 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Kemet писал(а): В LLVM нет стабильности, а гнаться от версии к версии за ними нет ни возможности ни желания. Изменяется API библиотек или код виртуальной машины? |
Автор: | Kubanych [ Воскресенье, 05 Февраль, 2017 15:00 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Comdiv писал(а): я API библиотек или код виртуальной машины? код виртуальной машины не меняется. есть два варианта API: С и C++. Вариант C не меняется, вариант C++ меняется. |
Автор: | Илья Ермаков [ Воскресенье, 05 Февраль, 2017 15:56 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Comdiv писал(а): Си. Абстракции С++, на первый взгляд, лучше подходят под Oberon, но являются довольно медленными. А что там может оказаться медленным для Оберона? ЧТо там вообще медленное, кроме обычного оверхеда косвенности ООП (виртуальные вызовы и т.п.)? (который будет таким же и при имитации ООП на С). В трансляции в С++ есть один плюс: если ваш модуль X и тип превращаются в классы, то их можно использовать в приличном виде в С++-софте. И наоборот - вы можете биндить в КП определённым образом подготовленные С++-абстракции. Что даёт схему "КП как DSL над С++" в обе стороны (и использую нижний С++ из КП, и делаю какие-то сложные, алгоритмоёмкие абстракции на КП, затем используя их удобно из С++). |
Автор: | Comdiv [ Воскресенье, 05 Февраль, 2017 18:43 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Илья Ермаков писал(а): А что там может оказаться медленным для Оберона? ЧТо там вообще медленное, кроме обычного оверхеда косвенности ООП (виртуальные вызовы и т.п.)? (который будет таким же и при имитации ООП на С) К примеру, в С++ есть обращение к массиву с проверкой границ - array.at(i). При желании, можно переопределить стандартное обращение через [] с теми же проверками, и тогда код, переведённый с Оберона будет выглядеть идентично оригиналу. Но тестовый код сортировки массива с заранее известными границами показал почти 3-х кратное отставание такого С++ кода от кода на Oberon, переведённого на Си, в котором обращение к массиву выглядит как arr[ind(arr_len, i)], где ind это Код: static inline int ind(int len, int i) __attribute__((always_inline)); static inline int ind(int len, int i) { assert((unsigned)ind < (unsigned)len); return i; } Достаточно весомая разница, не 10 %. Идём дальше. Охрана типа через dynamic_cast в С++ с его множественным наследованием существенно медленней реализуемой на Си охраны для Oberon, в котором тип можно расширить от единственного базового. Тестовая сортировка объектов динамического типа на С++ оказалась в 4-е раза медленней идентичной сортировки на Обероне. Даже виртуальные методы на Обероне могут быть реализованы немного эффективней, чем в С++, если обойтись без таблиц, но это действительно незначительно и проигрывает по памяти. Не проверял скорость работы арифметических операций, воплощённых с помощью С++ абстракций, но подозреваю, что и в этом случае С окажется быстрей. Дополнительным преимуществом Си является и то, что при правильном подходе код на нём может быть интерпретирован и как C++. |
Автор: | Илья Ермаков [ Воскресенье, 05 Февраль, 2017 20:10 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Хм, ну такие операции можно и странслировать по-сишному. А общую структуру программы транслировать в С++-сное (модуль, тип => класс). |
Автор: | Иван Денисов [ Вторник, 21 Март, 2017 18:56 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Чтобы освежить ветку, так сказать... выкладываю фотку нашего почти готового шрицевого насоса. Прошивка подготовлена на компиляторе O7. Используются внешние прерывания для работы с энкодером (это такая крутилка тут с черно-белой ручкой), встроенный в МК ЦАП для управления напряжением на шаговом двигателе. Как все будет доделано, выложу видео как этот аппарат работает в деле. Вложение:
|
Автор: | Artyemov [ Среда, 22 Март, 2017 14:20 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
ЦАП для управления напряжением на шаговом двигателе? Всю жизнь считал, что нужен (минимум) трёхфазный сигнал для "шагания вала"… Для энкодера (валкодера) в STM32 (его используете?) есть "Encoder interface mode" у таймеров. Но вообще, гениально! Не знаю как насос, а дозатор с запредельной точностью - 5 баллов… |
Автор: | albobin [ Среда, 22 Март, 2017 16:38 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Artyemov писал(а): дозатор с запредельной точностью , на конце иглы
|
Автор: | Artyemov [ Среда, 22 Март, 2017 16:45 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
А у них, у биофизиков, медики ближайшие родственники… |
Автор: | Alexander Shiryaev [ Понедельник, 10 Апрель, 2017 21:43 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Для того, чтобы разрешить использование "_" в идентификаторах, нужно заменить Код: UNTIL (ch < "0") OR (ch > "9") & (ch < "A") OR (ch > "Z") & (ch < "a") OR (ch > "z"); наКод: UNTIL (ch < "0") OR (ch > "9") & (ch < "A") OR (ch > "Z") & (ch < "a") & (ch # "_") OR (ch > "z"); в O7S.Identifier иКод: ELSE (* _ ` *) sym := null наКод: ELSIF ch = "_" THEN Identifier(sym) в O7S.Get
ELSE (* \ ` *) sym := null |
Автор: | prospero78 [ Вторник, 11 Апрель, 2017 09:24 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Всё это хорошо, Александр. Я тут попытался модифицировать твой компилятор. А тут бац!!! И репа обновилась!!)) Так что, лучше это на гитхабе исправить. Без нижнего подчёркивания, имхо -- неудобно. Да и ради мимикрии под ББ я совсем не против поддержки юникода. Раз пошла такая пьянка. |
Автор: | Artyemov [ Вторник, 11 Апрель, 2017 10:56 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Спасибо. Я чуть слукавил (: В O7S.Identifier я добавлял выход из цикла при (ch # "_"), а вот до остального не дотянулся. Ща подкручу у себя. PS: Ура!!! Как к бабушке сводили… |
Автор: | Artyemov [ Вторник, 11 Апрель, 2017 11:06 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
prospero78 писал(а): Без нижнего подчёркивания, имхо -- неудобно. Да и ради мимикрии под ББ я совсем не против поддержки юникода. Раз пошла такая пьянка. С первым аргументом солидарен. "Потроха" периферийные мудрёно обзываются, внятный "разделитель" в идентификаторах полезен. По второму аргументу: юникод для исходника - нет мнения, а вот внутри прошивки текстовые стоки в юникоде - оверхед, ныне ресурсы контроллеров хоть и немаленькие, но и не настолько большие. CP1251, мне кажется, достаточно (как в своё время и 640К ОЗУ-хи). |
Автор: | prospero78 [ Вторник, 11 Апрель, 2017 14:06 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Artyemov писал(а): По второму аргументу: юникод для исходника - нет мнения, а вот внутри прошивки текстовые стоки в юникоде - оверхед, ныне ресурсы контроллеров хоть и немаленькие, но и не настолько большие. CP1251, мне кажется, достаточно (как в своё время и 640К ОЗУ-хи). Да боже упаси юникод в МК пихать!! Конечно, cp1251-string only. Я имел в виду идентификаторы (переменные, процедуры, типы, константы и т. д.) А чтобы русские строки пихать (а тут ещё подумать можно) -- прозрачный конвертер в CP1251. |
Автор: | Artyemov [ Среда, 12 Апрель, 2017 12:22 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
Есть ли где шпаргалка по ключам\параметрам от ARMv7MP.Compile, ARMv7MTool.DecObj и т.д.? |
Автор: | Alexander Shiryaev [ Четверг, 13 Апрель, 2017 09:48 ] |
Заголовок сообщения: | Re: Компилятор Oberon → ARMv6-M, ARMv7E-M |
P.Compile: @: компилировать текущий документ /s: заменять символьные файлы Tool.DecObj: информаия об объектном файле Tool.DecSym: информация о символьном файле Tool.DecBin: дизассемблер bin-файлов Tool.DecHex: дизассемблер hex-файлов |
Страница 8 из 9 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |