Oberon space

General Category => Общий раздел => Тема начата: valexey от Август 10, 2012, 05:37:50 pm

Название: Oberon & Flash/ROM
Отправлено: valexey от Август 10, 2012, 05:37:50 pm
Это из мира программирования под микроконтроллеры (в основном, хотя и на PC такой код есть).

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

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

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

Внимание вопрос - как такие структуры данных оформить в Обероне?
В Си и С++ с этим проблем нет (я знаю как), а как в Обероне - не знаю.
Название: Re: Oberon & Flash/ROM
Отправлено: Kemet от Август 10, 2012, 06:00:11 pm
в какой конкретной реализации?
Название: Re: Oberon & Flash/ROM
Отправлено: Geniepro от Август 10, 2012, 06:01:50 pm
Внимание вопрос - как такие структуры данных оформить в Обероне?
В Си и С++ с этим проблем нет (я знаю как), а как в Обероне - не знаю.
А в чём проблема объявить эти массивы и структуры константами?
В тех же сях для мелкоконтроллеров часто вводятся расширения -- модификаторы области памяти data/idata/xdata или просто прагмы с указанием адреса, по которому начинает располагаться переменная/константа.

Или речь о том, как описать такой массив? Нет конструкторов массивов типа как в сях { 1, 2, 3 } ?
ну так добавить и дело с концом )))
Название: Re: Oberon & Flash/ROM
Отправлено: valexey от Август 10, 2012, 06:11:58 pm
в какой конкретной реализации?
Насколько я знаю, пока нет оберонов под msp430. Поэтому просто речь о языке. Язык думаю стоит рассматривать Oberon-07/12.

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

Рассмотрю любые предложения, в том числе и расширизмы языка.
Название: Re: Oberon & Flash/ROM
Отправлено: valexey от Август 10, 2012, 06:16:34 pm
Внимание вопрос - как такие структуры данных оформить в Обероне?
В Си и С++ с этим проблем нет (я знаю как), а как в Обероне - не знаю.
А в чём проблема объявить эти массивы и структуры константами?
В тех же сях для мелкоконтроллеров часто вводятся расширения -- модификаторы области памяти data/idata/xdata или просто прагмы с указанием адреса, по которому начинает располагаться переменная/константа.

Или речь о том, как описать такой массив? Нет конструкторов массивов типа как в сях { 1, 2, 3 } ?
ну так добавить и дело с концом )))
В Обероне нет константных массивов и рекордов тоже нет.
Название: Re: Oberon & Flash/ROM
Отправлено: Geniepro от Август 10, 2012, 07:03:05 pm
В Обероне нет константных массивов и рекордов тоже нет.
И это -- его фатальный недостаток, делающий его непригодным для практического использования без расширений ))))
Название: Re: Oberon & Flash/ROM
Отправлено: valexey от Август 10, 2012, 07:07:07 pm
В Обероне нет константных массивов и рекордов тоже нет.
И это -- его фатальный недостаток, делающий его непригодным для практического использования без расширений ))))
Не, ну можно конечно руками (в каком-нибудь FAR'e) в hex-файл вбить нужные данные, а в рантайме завести указатель нужного типа и уже через SYSTEM подправить его содержимое чтобы он указывал на начало объекта во Flash'e. Но по моему, это как-то не слишком безопасно и не особо удобно.
Название: Re: Oberon & Flash/ROM
Отправлено: vlad от Август 10, 2012, 07:29:36 pm
Или речь о том, как описать такой массив? Нет конструкторов массивов типа как в сях { 1, 2, 3 } ?
ну так добавить и дело с концом )))

Именно так. До кучи еще сделать возможность декларировать по какому адресу.
Название: Re: Oberon & Flash/ROM
Отправлено: valexey от Август 10, 2012, 07:35:30 pm
Или речь о том, как описать такой массив? Нет конструкторов массивов типа как в сях { 1, 2, 3 } ?
ну так добавить и дело с концом )))

Именно так. До кучи еще сделать возможность декларировать по какому адресу.
По какому адресу - это уже существенно другая задача (по крайней мере из моего не шибко богатого опыта). И решать её, видимо, нужно другими средствами.
Название: Re: Oberon & Flash/ROM
Отправлено: Kemet от Август 11, 2012, 06:30:22 am
Не, ну можно конечно руками (в каком-нибудь FAR'e) в hex-файл вбить нужные данные, а в рантайме завести указатель нужного типа и уже через SYSTEM подправить его содержимое чтобы он указывал на начало объекта во Flash'e. Но по моему, это как-то не слишком безопасно и не особо удобно.
Отцы-основатели примерно так и делают - разрабатывают структуры данных, наполняют, пишут тулзовину, которая эти данные сбрасывает в файл в бинарном формате, а затем этот файл используют.
И этот геморрой по причине отсутствия константных массивов/записей и/или инициализаторов
Название: Re: Oberon & Flash/ROM
Отправлено: Kemet от Август 11, 2012, 06:35:18 am
До кучи еще сделать возможность декларировать по какому адресу.
В новом компиляторе в А2 такая возможность уже есть. С учетом, что в логах на свн проскакивало что-то про микроконтроллер чьей-то 510-й серии, то там уже более приближено к реалиям жизни
Название: Re: Oberon & Flash/ROM
Отправлено: Kemet от Август 11, 2012, 06:37:20 am
в общем, я думаю, что это должен быть инициализатор, что позволяет разместить данные на этапе компиляции
Название: Re: Oberon & Flash/ROM
Отправлено: valexey от Август 11, 2012, 07:52:34 am
До кучи еще сделать возможность декларировать по какому адресу.
В новом компиляторе в А2 такая возможность уже есть. С учетом, что в логах на свн проскакивало что-то про микроконтроллер чьей-то 510-й серии, то там уже более приближено к реалиям жизни
А как это выглядит?
Название: Re: Oberon & Flash/ROM
Отправлено: Kemet от Август 11, 2012, 08:30:34 am
А как это выглядит?
как-то так
VAR
  test {FIXED(1000H)}: ARRAY OF CHAR;

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

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