Автор Тема: компилятор Оберона под микроконтроллер MSP430  (Прочитано 7693 раз)

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
В ходе обсуждений в конференции мы с valexey пришли к выводу, что не плохо-бы иметь компилятор Оберона под 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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #1 : Январь 17, 2013, 09:05:07 am »
Ну, все же порты то есть: http://en.wikipedia.org/wiki/TI_MSP430#Peripherals
Инача я не смог бы помигать светодиодиком :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #2 : Январь 17, 2013, 09:22:26 am »
Здесь есть некоторые потенциальные проблемы: Процессоры 16-ти разрядные, не во всех есть не только модуль плавающей точки, но  и даже банальный умножитель.
Т.е. "искаропки" микроконтроллеры не поддерживают умножение/деление целых чисел и вещественные числа отсутствуют как класс.

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

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

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

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

SET 32-х разрядный наверное не в обероне, а мире, в котором живет Вирт, где все машины 32-битные. Конечно, разрядность SET и INTEGER должна совпадать с разрядностью машины. Это естественно.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #3 : Январь 17, 2013, 09:26:16 am »
SET 32-х разрядный наверное не в обероне, а мире, в котором живет Вирт, где все машины 32-битные. Конечно, разрядность SET и INTEGER должна совпадать с разрядностью машины. Это естественно.
Я не знаю в каком мире живет Вирт, но в более ранних версиях того же Оберона-07 INTEGER у него также был 32битным. А после - уже нет. То есть по задумке автора Оберона - битность INTEGER'a не определена, может быть любой. При этом противоречий в языке возникать не должно. А вот SET - четко и всегда 32битный - это единственный тип у которого известна битность.

Быть может как-то собрать эти мысли в кучу, указать на несообразности и написать письмо Вирту?
Y = λf.(λx.f (x x)) (λx.f (x x))

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #4 : Январь 17, 2013, 09:48:59 am »
Ну, все же порты то есть: http://en.wikipedia.org/wiki/TI_MSP430#Peripherals
Инача я не смог бы помигать светодиодиком :-)
Это совсем другие порты ))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #5 : Январь 17, 2013, 09:54:10 am »
Ну, все же порты то есть: http://en.wikipedia.org/wiki/TI_MSP430#Peripherals
Инача я не смог бы помигать светодиодиком :-)
Это совсем другие порты ))
А, ты имеешь ввиду, что периферийные устройства отображают свои регистры непосредственно в плоское адресное пространство CPU?

Кстати, умножитель (если он есть) там точно такое же периферийное устройство :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #6 : Январь 17, 2013, 10:17:53 am »
А, ты имеешь ввиду, что периферийные устройства отображают свои регистры непосредственно в плоское адресное пространство CPU?

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

ну ладно, для начала и простоты сделаем SIZE OF INTEGER = SIZE OF SET = 16, и никакого ADDRESS

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #7 : Январь 17, 2013, 10:22:41 am »
А что там с разрядностью адресной шины? Разве не 20 бит? Тогда всё же нужен тип ADDRESS 20 бит...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #8 : Январь 17, 2013, 10:31:58 am »
А что там с разрядностью адресной шины? Разве не 20 бит? Тогда всё же нужен тип ADDRESS 20 бит...

Там есть отдельный 20битный "режим". Он нужен далеко не всегда (на моей памяти - не потребовалось ни разу. Это нужно иметь какой-то жутко жиррный вариант микроконтроллера (скажем чтобы флеша было больше 64 Кб) и крайне жирный вариант своей проги/прошиквки, чтобы данный режим потребовался).
В этом режиме 20битные регистры имеются.
Y = λf.(λx.f (x x)) (λx.f (x x))

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #9 : Январь 17, 2013, 12:39:30 pm »
А почему INTEGER не дает возможности работать с верхней половиной адресов? Ну, будет эта половина нижней, в смысле отрицательной.

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #10 : Январь 17, 2013, 12:50:41 pm »
Можно ещё так реализовать SYSTEM.ADDRESS:
TYPE
    ADDRESS = ARRAY [untagged] machineWordSize DIV 8 OF BYTE;
;)

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #11 : Январь 17, 2013, 01:16:45 pm »
Можно ещё так реализовать SYSTEM.ADDRESS:
TYPE
    ADDRESS = ARRAY [untagged] machineWordSize DIV 8 OF BYTE;
;)

А с выравниванием проблем не возникнет?
ARRAY OF BYTE вроде как должен выравниваться на 1 байт. Тогда как 16-битный тип выравнивается на 2 байта.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #12 : Январь 17, 2013, 01:41:49 pm »
Можно ещё так реализовать SYSTEM.ADDRESS:
TYPE
    ADDRESS = ARRAY [untagged] machineWordSize DIV 8 OF BYTE;
;)
А что такое untagged применительно к Оберону-07/11? Не помню там такого.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #13 : Январь 17, 2013, 01:44:43 pm »
А с выравниванием проблем не возникнет?
ARRAY OF BYTE вроде как должен выравниваться на 1 байт. Тогда как 16-битный тип выравнивается на 2 байта.
Про выравнивание в языке не говорится вообще ничего. То есть это на усмотрение реализатора компилятора.
Y = λf.(λx.f (x x)) (λx.f (x x))

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: компилятор Оберона под микроконтроллер MSP430
« Ответ #14 : Январь 17, 2013, 02:19:55 pm »
Можно ещё так реализовать SYSTEM.ADDRESS:
TYPE
    ADDRESS = ARRAY [untagged] machineWordSize DIV 8 OF BYTE;
;)
Так нет никакой проблемы с размещением адресов - оно в INTEGER_16 отлично влазит. Дело в семантике. Семантика типjd ADDRESS и INTEGER существенно отличается