Счастье не находят, его создают.
Эльчин Сафарли

Меню навигации для мобильных

Закрытость как проклятие embedded систем

Автор Slabovik, 08 Дек., 2020, 14:36

« предыдущая - следующая »

Slabovik

Хочется почесать старо-ностальгическую тему о том, почему embedded не компьютер. Embedded всегда стоит как-то в стороне. Это закономерно, т.к. ниша вполне неплоха, но судьба embedded систем - гонять по кругу одну единственную программу, которая прошита в его непоколебимой памяти.

С другой стороны - большая семья вычислительной техники (компьютеров), которые всегда вольны выполнять абсолютно любые программы (написанные для них, конечно) без ограничений. Лишь бы памяти хватало. В чём разница? Точнее, что не хватает embedded для того, чтобы стать "большими"?

Наверное, не хватает оперативной памяти. Для исполнения программы в произвольном машинном коде, эту программу необходимо загрузить в пространство памяти, из которого ядро (процессор) может её исполнять.
Не хватает устройства хранения. Потому что программу надо откуда-то загрузить и куда-то записать результаты её работы.
Устройства human interface тоже обязательны, но тут вроде больших проблем нет, и экраны и клавиатуры цепляются без проблем.

Устройство хранения - тоже решаемо не очень большими затратами. Сейчас без проблем SD (и прочие flash) накопители распространены массово. При условии "умею работать с файловой системой xxFATxx" обмен данными с "большими системами можно производить безболезненно.

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

Есть ли выход? Возможно. Практически к любому контроллеру можно "привесить" внешнее ОЗУ неограниченного объёма (на терабайты - реально и без всяких фокусов). Безусловно, "общение" с этим ОЗУ ядро вынуждено делать через порты ввода-вывода. Но вот выполнять машинный код всё-равно невозможно. Однако... однако ещё свежи в памяти ZX Spectrum, MSX, IBM PC-XT и подобные, которые включаешь кнопкой питания и... вот он, ВАСИК :) Программу можно загрузить любую (с магнитофона) - Васик исполнит. Тут же её можно отредактировать и сохранить на магнитофон (а что такое магнитофон - это устройство хранения. Старое, но тем не менее. Нынче заменяется даже не на дисковод а сразу на SD-карту).

Другими словами, если в ПЗУ (память программ) микроконтроллера иметь какой-либо интерпретатор, то можно решить и эту проблему. Да, код будет не "нативный", но система в этом случае становится вполне открытой для исполнения любого такого кода, который не нужно "прошивать" в память для бесконечного использования, не нужно иметь компьютер-матку для его создания и т.п. И да, совсем не обязательно это должен быть Васик (=BASIC - Бэйсик). Возможны реализации чего угодно, можно сделать i8080 машину, а можно и Пижона (Python) засунуть, хватило бы умения
↓ спойлер ↓
на i8080 у меня умения вполне хватит, но Питон я точно не сумею, по крайней мере в обозримом будущем
[свернуть]

А теперь вопрос: где-нибудь есть подобные реализации? Быстрый поиск мне показал, что народ уже этим занимался. Ну вот, например
Arduino Nano 3.0 - эмулятор компьютера под управлением ОС CP/M (http://arduino.ru/forum/proekty/arduino-nano-emulyator-kompyutera-pod-upravleniem-os-cpm), то же самое  (https://acdc.foxylab.com/node/76)
Вектор-06Ц: Эмуляция - КР580ВМ80А (https://zx-pk.ru/threads/9826-vektor-06ts-emulyatsiya-kr580vm80a.html)
Intel 8080 emulator: CP/M on an ARM microcontroller (http://mail.embedded-it.de/en/bsp/demos/8080_emulator.php)
AVR CP/M (https://www.mikrocontroller.net/articles/AVR_CP/M)
ну и так далее...

бррр.... как всегда, я опоздал лет на пятнадцать...
MicroPython (https://micropython.org/)
python-on-a-chip (https://groups.google.com/g/python-on-a-chip)
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Могу предположить что спрос тут виноват. Хотя формированием спроса тоже занимаются люди.
Тут для меня непонятно само понятие Embedded, знать вроде знаю, а понять/воспринять до сих пор сей термин не могу.
Хотя я помоложе чуть, Спектрум в руках не держал, для меня знакомство началось краем с Искры, а уж первым был 386.
https://github.com/minamonra/

Slabovik

Embedded - это группа по условиям эксплуатации. Ну т.е. "embedded" = "встроенный". Типичные примеры: блок управления двигателем, блок управления ПОС, и даже эти поделки, которые мы делаем на микроконтроллерах. Главное их свойство - они исполняют какую-либо одну (пусть даже и сложную) узкоспециализированную функцию без возможности использовать его вычислительные возможности "вообще", ну т.е. произвольно.  На "большом" компьютере мы имеем такую возможность - берём программу, грузим, исполняем (была бы программа, либо её можно просто написать самому). В Embedded именно этой возможности нет.

Виртуальную машину можно придумать какую угодно. Правда, тут есть как раз потребительский вопрос; мало кто хочет иметь девайс, к которому из программ ничего нет. Именно это определяет интерес, и именно поэтому вновь создаваемые устройства практически всегда эмулируют что-либо старое - к старому просто есть кое-какой софт, который можно заюзать нахаляву. Много игрушек - это наиболее интересно. Поэтому Спектрум, Денди - они в топе. Ибо самое фиговое это то, что софт делать заметно затратнее, нежели "железо", поэтому так...

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

Кстати, вот занятный пример дани ностальгии https://gigatron.io/

зы: а что у STM32 с возможностью исполнения кода из своего ОЗУ? SMT8 маленько умеет (с ограничениями и понижением бытродействия). Со схемотехническими приёмами умеет i8031.
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

stm32 вроде не плохо это умеет попадался запуск и бейсика из озу.
Ретро комп на stm (https://pmk.arbinada.com/ru/node/1389).
Из uart (https://startmilandr.ru/doku.php/prog:uart:run_ram_uart).
А так - питон и lua в моде же, ни до первого ни до второго не добрался... :)
Скрипты как-то пытался писать на питоне - не увидел в своих целях преимуществ перед башем.
https://github.com/minamonra/

Shaman

Цитата: Slabovik от 09 Дек., 2020, 14:59Embedded - это группа по условиям эксплуатации. Ну т.е. "embedded" = "встроенный". Типичные примеры: блок управления двигателем, блок управления ПОС, и даже эти поделки, которые мы делаем на микроконтроллерах. Главное их свойство - они исполняют какую-либо одну (пусть даже и сложную) узкоспециализированную функцию без возможности использовать его вычислительные возможности "вообще", ну т.е. произвольно.  На "большом" компьютере мы имеем такую возможность - берём программу, грузим, исполняем (была бы программа, либо её можно просто написать самому). В Embedded именно этой возможности нет.

Как мне кажется сейчас это определение стало весьма расплывчатым У мелкомяких есть ОС для встроенных систем, по сути та же ОС, что и на десктопах только там нет некоторых служб, пакетов драйверов и иногда эксплорера. Называется она также Embedded, но преспокойно позволяет ставить на себя любой софт с десктопа только бы железо подходило, ну и естественно DOOM 2 на осцилографах и банкоматах это классика  ;D
Еще пример: Машрутизаторы под управлением linux преспокойно расширяют свой функционал дополнительными программными модулями. На них вон даже ботов делают  ;D

Slabovik

А видел на твоём стенде вольтметры. Слабо Линух на них поставить?  ;)
Не, я не спорю о том, что граница при ближайшем рассмотрении скорее размыта, чем чётко очерчена, но пытаюсь разобраться, как надо сделать. Меня этот вопрос интересует.

Ещё меня интересует сигнал Sync, формируемый i8024 (она же 580ГФ24). Вот кто бы рассказал мне, почему графики в документации от Интела нифига не совпадают с тем, что я ожидаю видеть исходя из анализа её структурной схемы, приведённой на соседней странице этого же документа  :)
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Давно смотрю на малины... одна из фич - хороший звук за относительно не дорого, I2S у неё есть, на pcm5102 получается хорошо.
https://github.com/minamonra/

Slabovik

А кто мне может рассказать, как структурно устроено железо "малины"? Что от чего зависит, где какие циклы и т.д. Ну, хотя бы это фон-неймановская архитектура или чего?
Общением на форуме подпитываю свою эгоистичную, склонную к самолюбованию сущность.

zenon

Это вроде Cortex A Risc, и наверное Гарвардская архитектура... тут я вообще не силён... :)
И родной ОС для неё считается Risc OS.
https://github.com/minamonra/