Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 20 окт 2019, 16:15

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 12 мар 2019, 07:12 
Не в сети

Сообщения: 28
N.Wirth писал(а):
6.1. Basic types
The following basic types are denoted by predeclared identifiers. The associated operators are defined in 8.2, and the predeclared function procedures in 10.2. The values of a given basic type are the following:
1. BOOLEAN the truth values TRUE and FALSE.
2. CHAR the characters of the Latin-1 set.
3. INTEGER the integers between -231 and +231-1.
4. REAL real numbers (IEEE Standard, 32 bits).
5. LONGREAL long real numbers (IEEE Standard, 64 bits).
6. SET the sets of integers between 0 and 31.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 12 мар 2019, 07:15 
Не в сети

Сообщения: 32
Zorko
Это описание старого компилятора. В документации используется UTF-8, но текстовые редакторы в KolibriOS её не поддерживают. Я вчера заменил старый компилятор на новый в дистрибутиве KolibriOS, при этом, документацию перекодировал через Windows-блокнот в cp1251. Но я не учёл, что WebSVN умеет только cp866. Кто-то увидел, что новая документация нечитабельна и дал ссылку на старую). А так, там нет типа LONGREAL и вещественных литералов с "D". Зато есть WCHAR.

trurl
Это старый репорт 2007-2011.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 12 мар 2019, 07:30 
Не в сети

Сообщения: 28
Ага, но тогда 07 из названия надо исключить.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 12 мар 2019, 07:46 
Не в сети

Сообщения: 32
Как я понимаю, Oberon-07 -- это не официальное название, а обобщенное обозначение для всех реализаций, сделанных по мотивам репортов 2007(2008)-2016.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 12 мар 2019, 08:03 
Не в сети

Сообщения: 28
Что не официальное, это точно. А вот что оно обозначает, я уже не пойму.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 12 мар 2019, 08:06 
Не в сети

Сообщения: 28
Почему "Compiler.exe не является приложением Win32"? Он 64-битный?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 12 мар 2019, 08:15 
Не в сети

Сообщения: 32
1) Обозначение Oberon-07 используется для отличия от классического оберона.
2) Исполняемые файлы 64-битные (Windows/Linux). Я посчитал, что 64-битная ОС есть у всех и поэтому нет смысла держать там еще и 32-битные.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 12 мар 2019, 16:34 
Не в сети

Сообщения: 204
akron1 писал(а):
1) Обозначение Oberon-07 используется для отличия от классического оберона.

Наверное, пора уже забыть про "классический" оберон.
Есть виртовский язык, и самим Виртом он называется Oberon. Никаких -07 там нет...


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 24 июл 2019, 12:09 
Не в сети

Сообщения: 32
Появился третий бэк-энд, на этот раз для MSP430.

Язык пришлось несколько сократить, исключены:
- DISPOSE (практически невозможно реализовать для МК - недостаточно памяти)
- WCHAR (есть сложности и практически не нужно для МК)
- Вещественная арифметика (сложно, неэффективно и не очень нужно, но, в принципе, можно будет добавить в виде неявных вызовов RTL)
- Системные флаги (пока не нужно)

Качество кодогенерации пока оставляет желать лучшего. Размер пустой программы (один RTL) ~3 Кб.
Минимальные требования: ОЗУ 128 байт, ПЗУ 4096 байт.

Использование регистров:

R4 ... R7 - регистровый стэк
R8 ... R12 - не используются
R13 - используется при обработке прерываний
R14 - указатель "кучи"
R15 - указатель кадра стэка

В дальнейшем, для улучшения качества кодогенерации можно:
- задействовать регистры R8 ... R12 для хранения локальных переменных
- переписать RTL на асме (маш. кодах)
- удалять неиспользуемые процедуры RTL

Компилятор производит файл прошивки в hex-формате.
Пример командной строки:
Compiler.exe test.ob07 test.hex msp430 -ram 512 -rom 16384

Код: "OBERON"
  1. (*
  2.  
  3. Пример для LaunchPad MSP-EXP430G2 Rev1.5
  4.  
  5.   Мигает зеленый светодиод.
  6.   При нажатии на кнопку P1.3, включается/выключается красный светодиод.
  7.  
  8. *)
  9.  
  10. MODULE Button;
  11.  
  12. IMPORT SYSTEM, MSP430;
  13.  
  14.  
  15. CONST
  16.  
  17. REDLED = {0};
  18. GREENLED = {6};
  19. BUTTON = {3};
  20.  
  21. (* регистры порта P1 *)
  22. P1OUT = 21H;
  23. P1DIR = 22H;
  24. P1IFG = 23H;
  25. P1IE = 25H;
  26. P1REN = 27H;
  27.  
  28.  
  29. PROCEDURE test_bits (mem: INTEGER; bits: SET): SET;
  30. VAR
  31. b: BYTE;
  32.  
  33. BEGIN
  34. SYSTEM.GET(mem, b)
  35. RETURN bits * BITS(b)
  36. END test_bits;
  37.  
  38.  
  39. PROCEDURE set_bits (mem: INTEGER; bits: SET);
  40. VAR
  41. b: BYTE;
  42.  
  43. BEGIN
  44. SYSTEM.GET(mem, b);
  45. SYSTEM.PUT8(mem, BITS(b) + bits)
  46. END set_bits;
  47.  
  48.  
  49. PROCEDURE clr_bits (mem: INTEGER; bits: SET);
  50. VAR
  51. b: BYTE;
  52.  
  53. BEGIN
  54. SYSTEM.GET(mem, b);
  55. SYSTEM.PUT8(mem, BITS(b) - bits)
  56. END clr_bits;
  57.  
  58.  
  59. PROCEDURE inv_bits (mem: INTEGER; bits: SET);
  60. VAR
  61. b: BYTE;
  62.  
  63. BEGIN
  64. SYSTEM.GET(mem, b);
  65. SYSTEM.PUT8(mem, BITS(b) / bits)
  66. END inv_bits;
  67.  
  68.  
  69. (* обработчик прерываний *)
  70. PROCEDURE int (priority: INTEGER; interrupt: MSP430.TInterrupt);
  71. BEGIN
  72. IF priority = 18 THEN (* прерывание от порта P1 *)
  73. IF test_bits(P1IFG, BUTTON) = BUTTON THEN (* нажата кнопка *)
  74. inv_bits(P1OUT, REDLED); (* изменить состояние светодиода *)
  75. MSP430.Delay(500); (* задержка для отпускания кнопки *)
  76. clr_bits(P1IFG, BUTTON) (* сбросить флаг прерывания *)
  77. END
  78. END
  79. END int;
  80.  
  81.  
  82. PROCEDURE main;
  83. BEGIN
  84. (* инициализация регистров порта P1 *)
  85. SYSTEM.PUT8(P1DIR, REDLED + GREENLED); (* выход *)
  86. set_bits(P1REN, BUTTON); (* включить подтягивающий резистор *)
  87. set_bits(P1OUT, BUTTON); (* подтяжка к питанию *)
  88. set_bits(P1IE, BUTTON); (* разрешить прерывания от кнопки *)
  89.  
  90. MSP430.SetIntProc(int); (* назначить обработчик прерываний *)
  91. MSP430.EInt; (* разрешить прерывания *)
  92.  
  93. (* бесконечный цикл *)
  94. WHILE TRUE DO
  95. inv_bits(P1OUT, GREENLED); (* изменить состояние светодиода *)
  96. MSP430.Delay(800) (* задержка *)
  97. END
  98. END main;
  99.  
  100.  
  101. BEGIN
  102. main
  103. END Button.


Пока, в программах интенсивно используются SYSTEM.PUT, SYSTEM.GET и даже SYSTEM.CODE, что не добавляет наглядности. Но это решаемо (можно добавить псевдопроцедуры в SYSTEM). Возможна также реализация встроенного ассемблера (система команд простая). Также, рассмотрю возможность добавления в язык константных массивов - это важно для микроконтроллеров.


Последний раз редактировалось akron1 12 авг 2019, 16:55, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 26 июл 2019, 13:01 
Не в сети

Сообщения: 144
Здорово.

Цитата:
Язык пришлось несколько сократить, исключены:
- DISPOSE (практически невозможно реализовать для МК - недостаточно памяти)
Есть простейшая реализация кучи как стека - лучше, чем ничего. Но если на всех целевых микроконтроллерах памяти всегда мало, то без освобождения только лучше.

Цитата:
- Системные флаги (пока не нужно)
Что это?

Цитата:
Пока, в программах интенсивно используются SYSTEM.PUT, SYSTEM.GET и даже SYSTEM.CODE, что не добавляет наглядности.
Необходимость использовать SYSTEM без возможности задействовать более удобные способы лезть в систему способствует выработке предметного слоя абстракции при наличии минимального понимания у разработчика.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 57 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB