Oberon space

General Category => Общий раздел => Тема начата: Kemet от Январь 17, 2013, 08:53:40 am

Название: компилятор Оберона под микроконтроллер MSP430
Отправлено: Kemet от Январь 17, 2013, 08:53:40 am
В ходе обсуждений в конференции мы с valexey пришли к выводу, что не плохо-бы иметь компилятор Оберона под MSP430 (http://ru.wikipedia.org/wiki/MSP430).Архитектурно в нём много заимствований из PDP-11 (правда существенно упрощенного), с которым мы( в смысле моя контора) плотно работаем. К тому же как-то на досуге я реализовал Обероон-07 под PDP-11 (ну почти Оберон-07).
Здесь есть некоторые потенциальные проблемы: Процессоры 16-ти разрядные, не во всех есть не только модуль плавающей точки, но  и даже банальный умножитель.
Т.е. "искаропки" микроконтроллеры не поддерживают умножение/деление целых чисел и вещественные числа отсутствуют как класс.

Никаких специальных команд или средств для организации ввода/вывода(портов) нет, т.к. регистры устройств отображаются в адресное пространство.

В PDP-11 в верхние 8к(у некоторых 4к) адресов зарезервированы под регистры устройств. В MSP430 регистры устройств находятся в нижних адресах, а в верхних адресах находятся вектора прерываний и флэшпамять в которой хранится сама программа.
Т.е. к регистрам можно обратиться как обычной ячейке памяти. В Обероне, обращение к переменной по определенном адресу вызовет обращение к определенному регистру, без всяких SYSTEM.PUT/GET/IN/OUT. что лично для меня существенно упрощает работу с внешними устройствами.

Как известно, в Оберонах отсутствует поддержка беззнаковых целых, что не дает возможности нормально работать с верхней половиной адресов (при использовании типа INTEGER).
Нужно подумать, как работать с внешними устройствами и как обращаться к памяти за пределами 32К. Использовать для этого какой-нибудь REAL не получится по причине его отсутсвия как класса, а софтверная эмуляция вызовет существенный оферхед. Может есть смысл ввести тип ADDRESS как это сделали в Активном Обероне?

Тип SET в Обероне 32-х разрядный, а INTEGER в этой реализации 16-ти разрядный, т.е. во первых прямого взаимного отображения не получится, и для реализации 32-х разрядного SET'а на 16-ти разрядных машинах опять потребуется дополнительные телодвижения, снижающие эффективностьт. Может есть смысл сделать SET тоже 16-ти разрядным.

Вобщем, если у кого-то есть мысли, идеи, предложения и решения на этот счет, хотелось бы увидеть.
А может вообще, нафик он нужен, Оберон-07 под MSP430?  :D
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: valexey_u от Январь 17, 2013, 09:05:07 am
Ну, все же порты то есть: http://en.wikipedia.org/wiki/TI_MSP430#Peripherals
Инача я не смог бы помигать светодиодиком :-)
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: akron1 от Январь 17, 2013, 09:22:26 am
Здесь есть некоторые потенциальные проблемы: Процессоры 16-ти разрядные, не во всех есть не только модуль плавающей точки, но  и даже банальный умножитель.
Т.е. "искаропки" микроконтроллеры не поддерживают умножение/деление целых чисел и вещественные числа отсутствуют как класс.

Ну так придется эмулировать матсопроцессор и умножитель.

Может есть смысл ввести тип ADDRESS как это сделали в Активном Обероне?

А другого выхода здесь по-видимому нет.

Тип SET в Обероне 32-х разрядный, а INTEGER в этой реализации 16-ти разрядный, т.е. во первых прямого взаимного отображения не получится, и для реализации 32-х разрядного SET'а на 16-ти разрядных машинах опять потребуется дополнительные телодвижения, снижающие эффективностьт. Может есть смысл сделать SET тоже 16-ти разрядным.

SET 32-х разрядный наверное не в обероне, а мире, в котором живет Вирт, где все машины 32-битные. Конечно, разрядность SET и INTEGER должна совпадать с разрядностью машины. Это естественно.
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: valexey_u от Январь 17, 2013, 09:26:16 am
SET 32-х разрядный наверное не в обероне, а мире, в котором живет Вирт, где все машины 32-битные. Конечно, разрядность SET и INTEGER должна совпадать с разрядностью машины. Это естественно.
Я не знаю в каком мире живет Вирт, но в более ранних версиях того же Оберона-07 INTEGER у него также был 32битным. А после - уже нет. То есть по задумке автора Оберона - битность INTEGER'a не определена, может быть любой. При этом противоречий в языке возникать не должно. А вот SET - четко и всегда 32битный - это единственный тип у которого известна битность.

Быть может как-то собрать эти мысли в кучу, указать на несообразности и написать письмо Вирту?
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: Kemet от Январь 17, 2013, 09:48:59 am
Ну, все же порты то есть: http://en.wikipedia.org/wiki/TI_MSP430#Peripherals
Инача я не смог бы помигать светодиодиком :-)
Это совсем другие порты ))
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: valexey_u от Январь 17, 2013, 09:54:10 am
Ну, все же порты то есть: http://en.wikipedia.org/wiki/TI_MSP430#Peripherals
Инача я не смог бы помигать светодиодиком :-)
Это совсем другие порты ))
А, ты имеешь ввиду, что периферийные устройства отображают свои регистры непосредственно в плоское адресное пространство CPU?

Кстати, умножитель (если он есть) там точно такое же периферийное устройство :-)
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: Kemet от Январь 17, 2013, 10:17:53 am
А, ты имеешь ввиду, что периферийные устройства отображают свои регистры непосредственно в плоское адресное пространство CPU?

Кстати, умножитель (если он есть) там точно такое же периферийное устройство :-)
ага, об этом.
у pdp-11 сопроцессор тоже может быть как периферия(если не интегрирован)

ну ладно, для начала и простоты сделаем SIZE OF INTEGER = SIZE OF SET = 16, и никакого ADDRESS
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: Geniepro от Январь 17, 2013, 10:22:41 am
А что там с разрядностью адресной шины? Разве не 20 бит? Тогда всё же нужен тип ADDRESS 20 бит...
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: valexey_u от Январь 17, 2013, 10:31:58 am
А что там с разрядностью адресной шины? Разве не 20 бит? Тогда всё же нужен тип ADDRESS 20 бит...

Там есть отдельный 20битный "режим". Он нужен далеко не всегда (на моей памяти - не потребовалось ни разу. Это нужно иметь какой-то жутко жиррный вариант микроконтроллера (скажем чтобы флеша было больше 64 Кб) и крайне жирный вариант своей проги/прошиквки, чтобы данный режим потребовался).
В этом режиме 20битные регистры имеются.
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: trurl от Январь 17, 2013, 12:39:30 pm
А почему INTEGER не дает возможности работать с верхней половиной адресов? Ну, будет эта половина нижней, в смысле отрицательной.
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: Romiras от Январь 17, 2013, 12:50:41 pm
Можно ещё так реализовать SYSTEM.ADDRESS:
TYPE
    ADDRESS = ARRAY [untagged] machineWordSize DIV 8 OF BYTE;
;)
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: akron1 от Январь 17, 2013, 01:16:45 pm
Можно ещё так реализовать SYSTEM.ADDRESS:
TYPE
    ADDRESS = ARRAY [untagged] machineWordSize DIV 8 OF BYTE;
;)

А с выравниванием проблем не возникнет?
ARRAY OF BYTE вроде как должен выравниваться на 1 байт. Тогда как 16-битный тип выравнивается на 2 байта.
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: valexey_u от Январь 17, 2013, 01:41:49 pm
Можно ещё так реализовать SYSTEM.ADDRESS:
TYPE
    ADDRESS = ARRAY [untagged] machineWordSize DIV 8 OF BYTE;
;)
А что такое untagged применительно к Оберону-07/11? Не помню там такого.
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: valexey_u от Январь 17, 2013, 01:44:43 pm
А с выравниванием проблем не возникнет?
ARRAY OF BYTE вроде как должен выравниваться на 1 байт. Тогда как 16-битный тип выравнивается на 2 байта.
Про выравнивание в языке не говорится вообще ничего. То есть это на усмотрение реализатора компилятора.
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: Kemet от Январь 17, 2013, 02:19:55 pm
Можно ещё так реализовать SYSTEM.ADDRESS:
TYPE
    ADDRESS = ARRAY [untagged] machineWordSize DIV 8 OF BYTE;
;)
Так нет никакой проблемы с размещением адресов - оно в INTEGER_16 отлично влазит. Дело в семантике. Семантика типjd ADDRESS и INTEGER существенно отличается
Название: Re: компилятор Оберона под микроконтроллер MSP430
Отправлено: Kemet от Январь 17, 2013, 02:22:16 pm
А почему INTEGER не дает возможности работать с верхней половиной адресов? Ну, будет эта половина нижней, в смысле отрицательной.
От этого проблем еще больше, чет от введения беззнаковых типов