OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 20 Август, 2018 06:05

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: MicrocodeVM архитектура и реализация
СообщениеДобавлено: Вторник, 12 Июль, 2016 09:45 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Цитата:
vladfind
За 2015 год удалось внедрить специальную виртуальную машину на основе опкодов для микроконтроллера STM32F105 и написать при помощи стороннего программиста компилятор с ассемблера опкодов. Задача была передавать список файлов с настройками и алгоритмами для управления автомобилем по шине CAN. На практике оказалось, что нужно сделать многозадачную систему реального времени. В ней использовал набор виртуальных машин, которые умеют выполнять безопасно опкод алгоритма. Каждая виртуальная машина имеет свои таймеры, что позволило формировать алгоритмы во временной области без ожидания, а также взаимосвязь виртуальных машин с возможностью использовать наработки автоматного подхода ( конечные автоматы) с явно выделенными состояниями.


Получилась следующая структура OPVM виртуальной машины для микроконтроллера автомобильной CAN - https://cloud.mail.ru/public/6WCr/Xbo7DariV

Это каркас, особенности и тонкие реализации структуры OPVM буду раскрывать в следующих постах.

Объявление! Приглашаю участников к активному обсуждению архитектуры вычислительной модели проектируемой виртуальной машины.

Немного основ:

Микроко́д (Microcode - микропрограмма) — программа, реализующая набор инструкций процессора. Так же, как одна инструкция языка высокого уровня преобразуется в серию машинных инструкций, в процессоре, использующем микрокод, каждая машинная инструкция реализуется в виде серии микроинструкций — микропрограммы, микрокода.

Цитата:
Подход микропрограммирования процессоров (микрокода) был предложен в 1953 году Wilkes и Stringer[1].

Первоначально микрокод был использован в качестве более лёгкого способа разработки контролирующего устройства процессора. Прежде набор инструкций задавался жёстко, каждая машинная инструкция (сложение, сдвиг, копирование) реализовывалась непосредственно в схеме. Это давало высокую скорость, но по мере того, как набор инструкций рос, всё сложнее становилось реализовать в виде схемы и отладить инструкции всё возрастающей сложности.

Микрокод смягчил эту проблему тем, что позволил инженерам-проектировщикам при реализации сложной инструкции заменить создание сложной схемы на написание микропрограммы. Более того, микрокод можно было с лёгкостью изменить на поздних этапах проектирования, схему же изменить намного сложнее. Таким образом, микрокод облегчил проектирование процессоров,


Код операции, операционный код, опкод (OpCode)— часть машинного языка, называемая инструкцией и определяющая операцию, которая должна быть выполнена. Определение и формат кодов инструкций зависит от системы команд данного процессора (который может быть как главным процессором, так и более специализированным для работы в какой-либо конкретной области).

В зависимости от архитектуры, операнды могут быть значениями регистров, значениями стека, прочими значениями в памяти, портами ввода-вывода, и прочими, определение и доступ к которым осуществляется при помощи различных методов адресации. Типы операций включают в себя арифметические действия, копирование данных, логические операции, прочие программные конструкции, в отличие от специальных инструкций (таких как cpuid и другие).

Виртуальная машина (ВМ, от англ. Virtual Machine, VM) — программная и/или аппаратная система, эмулирующая аппаратное обеспечение некоторой платформы (target — целевая, или гостевая платформа) и исполняющая программы для target-платформы на host-платформе (host — хост-платформа, платформа-хозяин) или виртуализирующая некоторую платформу и создающая на ней среды, изолирующие друг от друга программы и даже операционные системы (см.: песочница); также спецификация некоторой вычислительной среды (например: «виртуальная машина языка программирования Си»).

Виртуальная машина исполняет некоторый машинно-независимый код (например, байт-код, шитый код, p-код) или машинный код реального процессора. Помимо процессора, ВМ может эмулировать работу как отдельных компонентов аппаратного обеспечения, так и целого реального компьютера (включая BIOS, оперативную память, жёсткий диск и другие периферийные устройства).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 12 Июль, 2016 23:57 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1537
Откуда: Беларусь, Минск
Как я понял, смысл всего этого - в переносимости. Почему не ограничиться связкой компилятор-библиотека-фреймворк? Задача окажется того же уровня сложности, но не будет иметь лишнего на исполняемой стороне.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 13 Июль, 2016 00:50 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
NOP - набор команд mcVM

Начнём проектировать микрокоды виртуальной машины.

История микроконтроллеров:
Intel 4004 — 0xC0
Intel 8008 — 0xC0
Intel 8080 — 0x00,0x10,0x20,0x30,0x08,0x18,0x28,0x38
Intel 80x86 — 0x90
Intel 8048 — 0x00
MOS Technology 6502 - 0xEA
Atmel AT90S1200 — 0x00
MicroChip PIC10F200 — 0x00
ARM STM32F100 — 0xBF00

Intel® Atom™ Processor D400 and D500 Series — (NOP) 0x90
Intel® Atom™ Processor D400 and D500 Series — (FNOP) 0xD9D0
Intel® Atom™ Processor D400 and D500 Series Multi-Byte Sequence of NOP Instruction
Length Assembly Byte Sequence
2 bytes 66 NOP 0x6690
3 bytes NOP DWORD ptr [EAX] 0x0F1F00
4 bytes NOP DWORD ptr [EAX + 00H] 0x0F1F4000
5 bytes NOP DWORD ptr [EAX + EAX*1 + 00H] 0x0F1F440000
6 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00H] 0x660F1F440000
7 bytes NOP DWORD ptr [EAX + 00000000H] 0F 1F 0x8000000000
8 bytes NOP DWORD ptr [EAX + EAX*1 + 00000000H] 0x0F1F840000000000
9 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] 0x660F1F840000000000

Baikal-T1(2 ядра P5600 MIPS 32 r5) - NOOP 0x00000000

Даже в простом коде-инструкции NOP у разных производителей неожиданные коды...


Можно ли предложить удобное и обобщенное описание NOP для MicrocodeVM ?

Будем вызывать как функцию NOP() и представим микрокод:

NOP– нет операции

Мнемокод
OpCode, Len, Data

Реализация
1) [0x00, 0x00] - OpCode = 0, Len = 0, Data = NIL
2) [0x00, 0x01, 0x55] - OpCode = 0, Len = 1, Data = 0x55
3) [0x00, 0x05, 0x01, 0x02, 0x03, 0x04, 0x05] - OpCode = 0, Len = 5, Data = 0x0102030405


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 13 Июль, 2016 15:41 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 215
А почему ни у кого NOP не соответствует очищенной программной памяти?
NOP: 0FFH или 0FFFFH или 0FFFFFFFFH (соответственно 8-, 16-, 32-разрядная архитектура)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 14 Июль, 2016 16:32 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
/*
* $Id: MicrocodeVM.txt
* Version: 0.01
* Date: 2016-07-14 15:43:22
* Author: Владимир Васильев
* E-mail: vlad_free[@]mail[.]ru
*/

The Microcode virtual machine (mcVM)

Виртуальная машина, исполняющая микрокоды.

---------------------------------------------------------
Таблица 1. MicrocodeVM (version 0.01)

DEFINE NAME OPCODE BYTES Description
#define NOP 0x00 [2...258] No operation
#define HLT 0x01 [2] MachineVM HALT
#define ADD 0x02 [4...14] Add
#define SUB 0x03 [4...14] Subtract
#define MUL 0x04 [4...14] Multiply
#define DIV 0x05 [4...14] Divide
#define AND 0x06 [4...14] And
#define OR 0x07 [4...14] Or
#define XOR 0x08 [4...14] Xor
#define NOT 0x09 [4...10] Not
#define NEG 0x0A [2...10] Neg
#define BL 0x0B [5...11] Branch label


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Июль, 2016 01:01 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
MicrocodeVM и реализация OVM из книги "Языки программирования и методы трансляции" [1]

Написал письмо Сергею Залмановичу:

Цитата:
> Однако есть вопросы:
> 1) Какой статус исходных кодов Вашего Oberon0?

Вы немного путаете названия. Oberon0 - это в книжке Н. Вирта. У меня называется "О". Исходный текст компиляторов языка "О" был опубликован на диске к книге "Языки программирования и методы трансляции". Более -менее понятно, что это можно свободно использовать.
> 2) Можно ли оттолкнутся от Вашей реализации добавив в него на
> уровень SYSTEM таймеры реального времени, управление задачей,
> взаимосвязь с другими виртуальными машинами. Типы данных ARRAY,
> REAL, LONGREAL с целью совместимости с OBERON-2.

Разумеется.


Компилятор "О" учебный. Однако диалект синтаксиса выбран так, что исходные коды совместимы с Oberon-2.

Вот цитата из книги:
Цитата:
Язык программирования «О»
Все последующие вопросы, связанные с конструированием компиляторов, мы
будем рассматривать на примере разработки транслятора для минимального
подмножества языка Оберон-2. Такой конкретный и предметный подход наверняка сузит
круг обсуждаемых тем, не позволит рассмотреть тонкие и сложные вопросы,
связанные с оптимизацией кода, зато гарантирует полное понимание основ.
Тот простой язык, для которого мы и напишем компилятор, будет называться
«О». Это шуточное название, во-первых, подчеркивает некоторую несерьезность,
учебный характер, «игрушечность» языка — уж очень он будет прост. Во-вторых,
буква «О», похожа на ноль (сложность языка стремится к нулю) и в то же время
это первая буква слова Оберон.

Краткая характеристика языка «О»
» Язык «О» является точным подмножеством Оберона и Оберона-2, то есть
любая программа на языке «О» является правильной программой на языках
Оберон и Оберон-2.
* Программа на языке «О» состоит из единственного модуля. Выполнение
программы начинается с первого оператора, записанного после слова begin.
Процедуры в языке «О» отсутствуют.
ж Предусмотрены константы и переменные только целого (integer) типа.
Выражения логического типа (без логических операций) могут использоваться в
операторах if и while. Массивов и записей нет.
ш Выражения строятся по правилам языка Оберон. Допустимы все операции,
применимые к целым и дающие результат целого типа: +, -, *, div, mod. В
логических выражениях используются операции отношения: =, #, <, >, <=, >=,
которые применимы к целочисленным операндам.
ш Набор операторов включает присваивание, вызов процедуры (стандартной), if -
THEN - ELSIF ... ELSE - END, WHILE - DO - END.
* Предусмотрены стандартные процедуры и процедуры-функции abs, dec, halt,
inc, max, min, odd. Их смысл такой же, как и в языке Оберон-2 (см.
приложение 1).
* Разрешается импорт стандартных (псевдо-) модулей in и Out,
предоставляющих процедуры ввода-вывода in. Open, in. int, Out. int, Out. Ln. Их свойства
приведены в таблице.

В записи программы разрешены комментарии, которые могут быть
вложенными.
* Большие и малые буквы различаются.
4 Кроме ключевых слов, используемых в языке «О», зарезервированными
считаются также все остальные служебные слова языка Оберон-2. Их нельзя
использовать в качестве идентификаторов в программах на «О». Это обеспечивает
полную совместимость снизу вверх с Обероном-2.



Исходные коды Компилятор "О" разместил на github здесь [2] - https://github.com/askfind/computer_language_O

Ключеные слова компилятора "О":
ARRAY - нет реализации
BY - нет реализации
BEGIN - используется
CASE - нет реализации
CONST - используется
DIV - используется
DO - используется
ELSE - используется
ELSIF - используется
END - используется
EXIT - нет реализации
FOR - нет реализации
IF - используется
IMPORT - используется
IN - нет реализации
IS - нет реализации
LOOP - нет реализации
MOD - используется
MODULE - используется
NIL - нет реализации
OF - нет реализации
OR - нет реализации
POINTER - нет реализации
PROCEDURE - нет реализации
RECORD - нет реализации
REPEAT - нет реализации
RETURN - нет реализации
THEN - используется
TO - нет реализации
TYPE - нет реализации
UNTIL - нет реализации
VAR - используется
WHILE - используется
WITH - нет реализации

1. Свердлов С.3., Языки программирования и методы трансляции: Учебное пособие. // [текст] .— СПб.: Питер, 2007. — 638 с: ил. ISBN 978-5-469-00378-6 5-469-00378-7
2.Свердлов С.3., Исходные коды компилятора языка «О» (реализация на С, CSharp, Java, Oberon, Pascal). [электронный ресурс] .- https://github.com/askfind/computer_language_O


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Июль, 2016 02:14 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2516
Откуда: Россия, Ярославль
А что тут происходит?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Июль, 2016 09:43 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Пётр Кушнир писал(а):
А что тут происходит?


С соседней ветки обсуждения - "Язык с динамически мутирующим синтаксисом?" - http://forum.oberoncore.ru/viewtopic.php?f=28&t=76&start=120

Цитата:
Специально создал новую тему. "MicrocodeVM архитектура и реализация" - viewtopic.php?f=28&t=5810, где будет обсуждение идеи и полезных потребительских свойств виртуальной машины для микроконтроллеров.

Задачи:
  • реализовать скриптовый язык для виртуальной машины
  • реализовать переносимость микрокода (не чувствительного к начальному адресу размещения в памяти микроконтроллера)
  • безопасное исполнение микрокода в виртуальной машине
  • реализация многозадачности (параллельная работа нескольких виртуальных машин)
  • реализации работы в реальном времени (микрокоды на уровне скриптового языка RTOS)
  • реализация образа файловой системы со списками файлов конфигураций, скриптов

Две недели размышлял о месте компилятора. Была идея в микроконтроллер добавить крошечный компилятор. Очевидно стало, что это архитектурная ошибка. Компилятор необходимо вынести во внешнюю среду. Можно сделать микросервис (компилятор онлайн) http://ideone.com/ чтобы можно было исходные коды алгоритма компилировать удаленно. А готовый микрокод запускать уже в микроконтроллере. Это обеспечит компактную реализацию виртуальной машины и быстрое исполнение микрокода.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Июль, 2016 09:48 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2516
Откуда: Россия, Ярославль
Не знал, что oberoncore.ru превратился в блогоплатформу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Июль, 2016 10:27 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Пётр Кушнир писал(а):
Не знал, что oberoncore.ru превратился в блогоплатформу.


Не понял шутки . :?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Июль, 2016 12:38 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2516
Откуда: Россия, Ярославль
Ну мне кажется, вы тут устроили личный блог, со своими мыслями и чувствами.
Плюс, непонятно, даже если блог устраивает тут всех, непонятна тема исследования, вы читали про slim-binaries, про LLVM? Тем более, для микроконтроллеров, взять хотя бы проект Оберон 2013, никаких VM и прочего позора индустрии.
В общем, непонятно, при чём тут вообще Оберон и ваш pet project...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Июль, 2016 19:41 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Пётр Кушнир писал(а):
(1) Плюс, непонятно, даже если блог устраивает тут всех, непонятна тема исследования
(2) читали про slim-binaries?
(3) читали про LLVM?
(4) Тем более, для микроконтроллеров, взять хотя бы проект Оберон 2013, никаких VM и прочего позора индустрии.
(5) при чём тут вообще Оберон и ваш pet project...


Легко сеять сорняки-идеи по интернету... Вы подумали хоть чуточку? Прочитали Т.З. на VM.

Теперь по делу:

(3) читали про LLVM? Смотрел в эту сторону. Надеялся, что это ядро абстрактного процессора. А это лишь ещё один слой в этап компиляции исходного кода:
https://habrahabr.ru/flows/develop/
Цитата:
Подробности
На рисунке ниже показаны основные компоненты архитектуры LLVM (и общей архитектуры любого современного компилятора):
Изображение


Чёрным по белому показано, что это лишь генератор машинного кода. Чтобы его, целевой код исполнить, необходим или физический процессор, или виртуальный (Виртуальная машина (ВМ, от англ. virtual machine) — программная и/или аппаратная система, эмулирующая аппаратное обеспечение некоторой платформы ).

Моя цель: безопасное исполнение микрокода в виртуальной машине

(2) slim-binaries http://www.ethoberon.ethz.ch/compiler/

Из таблицы Compiler deployment in ports no longer updated
Цитата:
Windows 3.x Oberon System 3 for Windows OP2 i386 + OMI
MacOs MacOberon System 3 OP2 PPC / 68000 + OMI
MacOs 6.x to 9.x MacOberon OP2 PPC + OMI


Сами же разработчики Oberon пишут: "Это очень интересная технология не была интегрирована в новый компилятор, потому что мы изменили язык компилятора много раз, и это требовало бы глубоких изменений в компиляторе..."

Далее про формат slim-binaries[ "... генерация кода объекта осуществляется на лету модулем загрузчика (в зависимости от используемого оборудования) и является столь же эффективным, как загрузка традиционных объектных файлов..."

Т.е. промежуточное представление программы. Ещё необходимо затащить в процессор этот объект.

Моя цель: реализовать переносимость микрокода (не чувствительного к начальному адресу размещения в памяти микроконтроллера и не зависящего от физического процессора.

(4) Oberon-2013 - это компилятор. Хотелось бы вот это - "Project Oberon emulator in JavaScript and Java".

Выдумаете можно "впихнуть" эмулятор/интепретатор Oberon-2013 в ROM <= 32 000 байт, RAM <= 19000 байт?

Место Oberon-компилятора в технологическом цикле разработки П.О. для микроконтроллеров - это компиляция в бинарный код целевого процессора! Что успешно и сделали здесь http://www.astrobe.com/default.htm, однако лишь для ARM CM-3 фирмы NXP (Philips).

А STM32F уже не сможете!

(5) Причём здесь LLVM и slim-binaries ??


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 18 Июль, 2016 23:49 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1537
Откуда: Беларусь, Минск
Может, у кода для ВМ и нет зависимости от процессора, но зато сама ВМ от него зависит. И написать ВМ не легче, чем кодогенератор компилятора.

ВМ, абстрагирующая программу от аппаратного уровня, - это идеализация, которая либо не покроет приличного числа микроконтроллеров, либо будет малопроизводительной. Или и то, и другое.

Связка компилятор-библиотеки-фреймворк предоставит тот же уровень абстрагирования, что и ВМ, но на уровне компиляции.
То есть, в идеализированном случае можно один раз написать программу, а потом только компилировать её под разные микроконтроллеры.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Июль, 2016 13:13 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Valery Solovey писал(а):
ВМ, абстрагирующая программу от аппаратного уровня, - это идеализация, которая либо не покроет приличного числа микроконтроллеров.


Технология для запуска алгоритмов без перекомпиляции проекта следующая:

Слой драйверов и
MicrocodeVM
+---------------------+
| Cи + Core mcVM |
+---------------------+
|
V
+---------------------+ +---------------+
| ELF -файл | + | MEM PROG |
+---------------------+ +--------------+

В область MEM PROG загружается переносимый образ FIMG со списком скриптов и настроеек
целевой системы. LOOP цикл запускает и исполняет на MicrocodeVM скрипты.

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

Естественно аппаратный слой и драйвера необходимо создавать на языке С/С++ микроконтроллеров. Готового кода для работы с драйверами переферийных устройств предостаточно.

Компании, производящие микроконтроллеры, предлагают визуальные кодогенераторы проектов. Например ST для микроконтроллеров ARM STM32CubeMX http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html позволяет в течении дня создать проект и задействовать переферийными модули. Остаётся только добавить собственный программный код.

Как раз задача уйти от перекомпиляции всего проекта, а лишь передав FIMG, изменять логику работу удалённого изделия. При этом само отлаженное и проверенное базовое ядро с переферийными устройствами останется без изменений.

Реализация MicrocodeVM для языка "О"

  • около 700 строк кода на СИ;
  • операции со стеком;
  • безопасное исполнение микрокода VM;
  • количество операций 24;
  • Микроконтроллер STM32F100, компилятор IAR ARM:
    1 856 bytes of readonly code memory
    16 bytes of readonly data memory
    4 220 bytes of readwrite data memory
  • Производительность ~ 64 000 опкодов в сек (частота 8 МГц).

Этап отладки и исследования исполнения кода, сгенерированного компилятором "О" для виртуальной машины OVM ( автор Свердлов).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Июль, 2016 17:32 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2516
Откуда: Россия, Ярославль
История Java показала, что несмотря на рекламное "write once, run everywhere" в реальности всё совсем не так. И невозможно писать код под все платформы одинаково.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 19 Июль, 2016 22:09 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1537
Откуда: Беларусь, Минск
vladfind писал(а):
Как раз задача уйти от перекомпиляции всего проекта, а лишь передав FIMG, изменять логику работу удалённого изделия.
А что преследует эта задача?
vladfind писал(а):
При этом само отлаженное и проверенное базовое ядро с переферийными устройствами останется без изменений.
Библиотеки+фреймворк решат эту задачу не хуже ВМ. Или даже лучше.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 20 Июль, 2016 00:30 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Valery Solovey писал(а):
(1) А что преследует эта задача?
(2)... Библиотеки+фреймворк решат эту задачу не хуже ВМ. Или даже лучше.


(1) - Была задача на работе сделать шлюз и HTTP-сервер для конфигурации. Это некая крошечная файловая система. Исходные коды были приложены к микроконтроллеру TI AM335X. Скачать можно здесь - https://github.com/embest-tech/AM335X_StarterWare_02_00_01_01/tree/master/tools/makefsfile

Пример генерации образа FIMG утилитой makefsfile каталога с файлами Task.f (исходный код для Forth), конфигурация Config.txt.

Код:
const unsigned char data_np002_fimg[] = {
/* /np002.fimg */
0x2F, 0x6E, 0x70, 0x30, 0x30, 0x32, 0x2E, 0x66,
0x69, 0x6D, 0x67, 0x00,
0x46, 0x49, 0x4D, 0x47, 0x58, 0x00, 0x00, 0x00,
0x2F, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
0x1C, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
0x2F, 0x43, 0x6F, 0x6E, 0x66, 0x69, 0x67, 0x2E,
0x74, 0x78, 0x74, 0x00, 0x31, 0x2C, 0x31, 0x2C,
0x30, 0x2C, 0x30, 0x2C, 0x78, 0x32, 0x63, 0x33,
0x2C, 0x78, 0x32, 0x63, 0x33, 0x2C, 0x31, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18,
0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2F,
0x54, 0x61, 0x73, 0x6B, 0x2E, 0x66, 0x00, 0x31,
0x20, 0x74, 0x64, 0x30, 0x20, 0x21, 0x0D, 0x0A,    
};

const fsdata_file file_np002_fimg[] =
{{  NULL,
     data_np002_fimg,
     data_np002_fimg + 12,
    sizeof(data_np002_fimg) - 12
}};


Движок с виртуальной машиной MicrocodeVM будет подключать FIMG и выполнять скрипты.

Версии для контроллера CAN, который сейчас выпускается одной из фирм Питера, именно так и работают. Загрузчик удаленно получает FIMG с сайта и для различных марок автомашин выполняется уникальный набор файлов конфигурации и алгоритмов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 20 Июль, 2016 10:46 

Зарегистрирован: Пятница, 13 Март, 2015 16:40
Сообщения: 215
"Пример генерации образа FIMG…" и далее исходник на C. Казалось бы, при чём здесь Оберон? Оберон применялся?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 20 Июль, 2016 12:00 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Artyemov писал(а):
"Пример генерации образа FIMG…" и далее исходник на C. Казалось бы, при чём здесь Оберон? Оберон применялся?


Из книги Свердлов С. 3. "Языки программирования и методы трансляции: Учебное пособие." рисунок поясняющий какое место и назначение займёт MicrocodeVM.

Учебный компилятор "О" (диалект совместимый с языком программирования Oberon-2) сгенерирует объектную программу для виртуальной машины OVM. Этот файл будет также выполняться на микроконтроллере ARM.

Цитата:
стр. 310
Трансляция языков программирования Компилятор языка «О»

Учебный компилятор языка «О» будет однопроходным. Простота устройства для
нас сейчас важнее возможностей оптимизации и скорости результирующей
программы. Наша цель — написать работающий компилятор. И быть при этом в возможно
большей степени уверенными, что работает он правильно1. Программировать будем
на Паскале, который в этой книге играет роль основного языка. В приложениях вы
можете также найти версии компилятора, написанные на Обероне, Си, Яве и Си#.
Приступим. Вот первый эскиз главной программы (листинг 3.1).


Какое преимущество такого подхода?

1) Интерпретация и отладка программы на языке программирования "О" производится на компьютере разработчик.
2) Разместить на целевой плате с процессором ARM FIMG-образ с объектным файлом для запуска на MicrocodeVM.


Вложения:
Однопроходный компилятор.png
Однопроходный компилятор.png [ 45.63 КБ | Просмотров: 4279 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Июль, 2016 22:15 

Зарегистрирован: Понедельник, 12 Декабрь, 2005 22:44
Сообщения: 85
Откуда: С.-Петербург
Делаю обзор микро виртуальных машин с целью поучиться делать быструю и скростную реализацию.

Обнаружил очень интересный проект
1. http://www.algo-prog.info/ocapic/web/index.php?id=ocapic
2. http://www.algo-prog.info/ocapic/distribution/ocapic-ocamlmeeting-2011.pdf

Цитата:
OCAPIC + PIC18F4620
~400,000 VM instructions/second
~25 machine cycles/VM instruction
(~18 for a standard processor)

PICOBIT runs 37,000 VM instructions/second
less by 11 times, but for a different bytecode

64 kB of flash memory on PIC18F4620
Interpreter: 4954 B (7.6%)
Runtime library: ≤ 4254 B (≤ 6,5%)
Bytecode: up to 55kB (86%)


Уникальный вариант! В чём секрет? Виртуальная машина написана на ассемблере.
Попытался настроить инструмент в Linux. Не удалось настроить зависимости.


Вложения:
ocampic.png
ocampic.png [ 47.69 КБ | Просмотров: 4181 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

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


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

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


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB