Автор Тема: Oberon & Flash/ROM  (Прочитано 7840 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Oberon & Flash/ROM
« : Август 10, 2012, 05:37:50 pm »
Это из мира программирования под микроконтроллеры (в основном, хотя и на PC такой код есть).

Итак, рассмотрим какой-нибудь типичный микроконтроллер, ну например msp430g2452. У него ОЗУ (RAM) 256 байт, замечу что в эта RAM на все - и на стек тоже, и на глобальные переменные (которые можно менять) и на кучу. На все. При этом у этого микроконтроллера аж целых 8 Кб Flash (1024*8 = МНОГО!). Flash во время работы писать нельзя (точнее можно, но это о-очень медленно и flash от этого быстро сдохнет), зато можно читать на той же скорости что и RAM, также у микроконтроллера плоское адресное пространство - и RAM и этот Flash лежат в едином адресном пространстве (и кто где кончается и начинается определить, по сути нельзя, не попытавшись туда что-то записать).

Собственно программа пишется во Flash и прямо оттуда исполняется, в ОЗУ она не грузится.

Очень часто возникает необходимость иметь довольно большие (сотни байт) массивы и другие структуры данных содержимое которых полностью известно на этапе компиляции (простейший пример с которым я сталкивался лично - массив коэффициентов для FIR-фильтра (FIR == КИХ)) и во время исполнение программы их модификация не требуется. В RAM это все пихать глупо, да и не поместится. Им самое место во Flash'e.

Внимание вопрос - как такие структуры данных оформить в Обероне?
В Си и С++ с этим проблем нет (я знаю как), а как в Обероне - не знаю.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #1 : Август 10, 2012, 06:00:11 pm »
в какой конкретной реализации?

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #2 : Август 10, 2012, 06:01:50 pm »
Внимание вопрос - как такие структуры данных оформить в Обероне?
В Си и С++ с этим проблем нет (я знаю как), а как в Обероне - не знаю.
А в чём проблема объявить эти массивы и структуры константами?
В тех же сях для мелкоконтроллеров часто вводятся расширения -- модификаторы области памяти data/idata/xdata или просто прагмы с указанием адреса, по которому начинает располагаться переменная/константа.

Или речь о том, как описать такой массив? Нет конструкторов массивов типа как в сях { 1, 2, 3 } ?
ну так добавить и дело с концом )))
to iterate is human, to recurse, divine

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #3 : Август 10, 2012, 06:11:58 pm »
в какой конкретной реализации?
Насколько я знаю, пока нет оберонов под msp430. Поэтому просто речь о языке. Язык думаю стоит рассматривать Oberon-07/12.

Я посмотрел Astrobe - там вроде бы решения подобных проблем не предлагают (но оно и понятно - там ну очень жирные микроконтроллеры поддерживаются, другие не поддерживаются).

Рассмотрю любые предложения, в том числе и расширизмы языка.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #4 : Август 10, 2012, 06:16:34 pm »
Внимание вопрос - как такие структуры данных оформить в Обероне?
В Си и С++ с этим проблем нет (я знаю как), а как в Обероне - не знаю.
А в чём проблема объявить эти массивы и структуры константами?
В тех же сях для мелкоконтроллеров часто вводятся расширения -- модификаторы области памяти data/idata/xdata или просто прагмы с указанием адреса, по которому начинает располагаться переменная/константа.

Или речь о том, как описать такой массив? Нет конструкторов массивов типа как в сях { 1, 2, 3 } ?
ну так добавить и дело с концом )))
В Обероне нет константных массивов и рекордов тоже нет.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #5 : Август 10, 2012, 07:03:05 pm »
В Обероне нет константных массивов и рекордов тоже нет.
И это -- его фатальный недостаток, делающий его непригодным для практического использования без расширений ))))
to iterate is human, to recurse, divine

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #6 : Август 10, 2012, 07:07:07 pm »
В Обероне нет константных массивов и рекордов тоже нет.
И это -- его фатальный недостаток, делающий его непригодным для практического использования без расширений ))))
Не, ну можно конечно руками (в каком-нибудь FAR'e) в hex-файл вбить нужные данные, а в рантайме завести указатель нужного типа и уже через SYSTEM подправить его содержимое чтобы он указывал на начало объекта во Flash'e. Но по моему, это как-то не слишком безопасно и не особо удобно.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #7 : Август 10, 2012, 07:29:36 pm »
Или речь о том, как описать такой массив? Нет конструкторов массивов типа как в сях { 1, 2, 3 } ?
ну так добавить и дело с концом )))

Именно так. До кучи еще сделать возможность декларировать по какому адресу.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #8 : Август 10, 2012, 07:35:30 pm »
Или речь о том, как описать такой массив? Нет конструкторов массивов типа как в сях { 1, 2, 3 } ?
ну так добавить и дело с концом )))

Именно так. До кучи еще сделать возможность декларировать по какому адресу.
По какому адресу - это уже существенно другая задача (по крайней мере из моего не шибко богатого опыта). И решать её, видимо, нужно другими средствами.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #9 : Август 11, 2012, 06:30:22 am »
Не, ну можно конечно руками (в каком-нибудь FAR'e) в hex-файл вбить нужные данные, а в рантайме завести указатель нужного типа и уже через SYSTEM подправить его содержимое чтобы он указывал на начало объекта во Flash'e. Но по моему, это как-то не слишком безопасно и не особо удобно.
Отцы-основатели примерно так и делают - разрабатывают структуры данных, наполняют, пишут тулзовину, которая эти данные сбрасывает в файл в бинарном формате, а затем этот файл используют.
И этот геморрой по причине отсутствия константных массивов/записей и/или инициализаторов

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #10 : Август 11, 2012, 06:35:18 am »
До кучи еще сделать возможность декларировать по какому адресу.
В новом компиляторе в А2 такая возможность уже есть. С учетом, что в логах на свн проскакивало что-то про микроконтроллер чьей-то 510-й серии, то там уже более приближено к реалиям жизни

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #11 : Август 11, 2012, 06:37:20 am »
в общем, я думаю, что это должен быть инициализатор, что позволяет разместить данные на этапе компиляции

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #12 : Август 11, 2012, 07:52:34 am »
До кучи еще сделать возможность декларировать по какому адресу.
В новом компиляторе в А2 такая возможность уже есть. С учетом, что в логах на свн проскакивало что-то про микроконтроллер чьей-то 510-й серии, то там уже более приближено к реалиям жизни
А как это выглядит?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Kemet

  • Hero Member
  • *****
  • Сообщений: 587
    • Просмотр профиля
Re: Oberon & Flash/ROM
« Ответ #13 : Август 11, 2012, 08:30:34 am »
А как это выглядит?
как-то так
VAR
  test {FIXED(1000H)}: ARRAY OF CHAR;

PROCEDURE {NOPAF, FIXED(401000H)} EntryPoint;

но там что-то ещё было, искать надо
у этих компиляторов существенный недостаток - полное отсутствие документации