Выполнить микропрограмму из внешнего источника

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Добрый день.

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

1) Есть некий абстрактный контроллер, в нем процессор достаточной производительности

2) Есть некий источник памяти. Это может быть EEPROM или флеш или иной контроллер (например, SD карта или USB жесткий диск или иной источник, преобразуемый иным контроллером к интерфейсу I2C)

3) Есть ужасно огромная программа, которая ни за что не вместится во флеш нашего контроллера. И не только нашего. Допустим, программа весит магабайт эдак 200 или более.

 

Отсюда вопрос: как организовать выполнение такой программы в нашем контроллере? Необходимо наименьшей кровью создать некий аналог выполнения программы процессором с жесткого диска, как происходит в ПК.

 

Что касается применения, то тут все банально. Есть некий робот, есть наисложнейший алгоритм его работы, который после компиляции явно не поместится ни в один популярный контроллер за адекватную цену. 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Этот "наисложнейший" алгоритм сам по себе весит 200 мб? Т.е. чистая логика, без привязки к железу и ОС?

 

toc
Offline
Зарегистрирован: 09.02.2013

LastHopeMan, почитайте о Bitlash может пригодиться

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Такая цифра взята исключительно как пример того, что не влезет на родной флеш. Гипотетическая логика гипотетического робота в вакууме. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

"абстрактный" ... "некий" ... "доустим" ... предельно конкретно, однако!

Ну, если надо организовать выполнение "абстрактной" программы на "неком" контроллере, то, "допустим", можно сделать так, что контроллер занимается только управлением своей периферией (ногодрыжеством, т.е. своим прямым делом) общаясь при этом через скть с PC (да хоть с суперкомпьютером!) который молотит абстрактную программу на 100500 мегабайт своими 100500 ядрами.

Не слишком абстрактно написал? Вакуум достаточно чистый?

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

toc пишет:
LastHopeMan, почитайте о Bitlash может пригодиться

Во, интерпретатор по сути. На крайний случай можно залить в 64 килобайта этот интерпретатор и организовать ему шину. Только мне-то нужно что-то более машинного уровня, чтобы быстродействие контроллера не падало до неузнаваемости. 

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

ЕвгенийП пишет:

"абстрактный" ... "некий" ... "доустим" ... предельно конкретно, однако!

Ну, если надо организовать выполнение "абстрактной" программы на "неком" контроллере, то, "допустим", можно сделать так, что контроллер занимается только управлением своей периферией (ногодрыжеством, т.е. своим прямым делом) общаясь при этом через скть с PC (да хоть с суперкомпьютером!) который молотит абстрактную программу на 100500 мегабайт своими 100500 ядрами.

Не слишком абстрактно написал? Вакуум достаточно чистый?

а я не могу точнее, потому что вопрос стоит так: либо я этим начинаю заниматься в серьез, либо я не берусь за эту "глупую" затею. Нужно понимать, могу ли я решить задачу, используя контроллер в роли процессора, или же он аппаратно не готов и нужно придумывать что-то с реальными процессорами типа армов.

toc
Offline
Зарегистрирован: 09.02.2013

LastHopeMan пишет:

toc пишет:
LastHopeMan, почитайте о Bitlash может пригодиться

Во, интерпретатор по сути. На крайний случай можно залить в 64 килобайта этот интерпретатор и организовать ему шину. Только мне-то нужно что-то более машинного уровня, чтобы быстродействие контроллера не падало до неузнаваемости. 

он способен читать программы с sd карты.
при хорошей реализации гипотетическое падение производительности на глаз не заметишь.

toc
Offline
Зарегистрирован: 09.02.2013

LastHopeMan пишет:

toc пишет:
LastHopeMan, почитайте о Bitlash может пригодиться

Во, интерпретатор по сути. На крайний случай можно залить в 64 килобайта этот интерпретатор и организовать ему шину. Только мне-то нужно что-то более машинного уровня, чтобы быстродействие контроллера не падало до неузнаваемости. 

Он способен читать программы с sd карты.
При хорошей реализации гипотетическое падение производительности на глаз не заметишь.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

хмммм... а что, если присмотреться к более современной архитектуре, которую предложил? ЕвгенийП?

есть какие-то примеры такой реализации на простенькой атмеге и каком-нибудь проце на посмотреть? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LastHopeMan пишет:

а я не могу точнее, 

Ну. я Вам написал как это можно сделать. Точнее тоже не могу :)

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

ЕвгенийП пишет:

LastHopeMan пишет:

а я не могу точнее, 

Ну. я Вам написал как это можно сделать. Точнее тоже не могу :)

 

с первого прочтения я подумал, что то сообщение - откровенный троллинг. Со второго нашел здравое зерно. С третьего понял, что там описана архитектура и довольно здравая =)

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

Есть какие-то примеры реализации этой архитектуре на артуине? 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, примеров я не знаю, но в целом-то вещь понятная.

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

Celestron
Offline
Зарегистрирован: 13.04.2016

Я конечно не могу претендовать на абсолютные знания, но старый опыт мне подсказывает, что сделать это возможно причем на уровне микроконтроллера (скорее вопрос к даташиту МК). Есть ведь понятия указателя стека, указателя на исполняемую команду (не помню как называется, пишу с телефона). Всем этим можно управлять. Загружаешь извне "код" в свободную PROGMEM. Сохраняешь текущие указатели и регистры для последующего восстановления. Делаешь переключение стека и вызываешь загруженный "код". По завершении возвращаешь все обратно и продолжаешь работу основного кода в МК. По этому принципу построены многозадачные ядра (под ардуину тоже). Но это все очень хлопотно. для этого "внешний" код нужно структурировать и форматировать, с программной памятью повозиться и т.п. Так что вариант, мною очень уважаемого Евгения, самый простой и доступный.

 

Извините, если где хрень написал...

arduino328
Offline
Зарегистрирован: 01.09.2016

LastHopeMan пишет:

вопрос стоит так: либо я этим начинаю заниматься в серьез, либо я не берусь за эту "глупую" затею

"Быть или не быть - вот в чём вопрос".
Если вопрос изначально стоит: браться или нет, то разумеется лучше не нужно. Гораздо проще сидеть на диване и телевизор смотреть. А роботов пусть японцы делают.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

arduino328 пишет:

LastHopeMan пишет:

вопрос стоит так: либо я этим начинаю заниматься в серьез, либо я не берусь за эту "глупую" затею

"Быть или не быть - вот в чём вопрос".
Если вопрос изначально стоит: браться или нет, то разумеется лучше не нужно. Гораздо проще сидеть на диване и телевизор смотреть. А роботов пусть японцы делают.

 

Я бы мог запросто посадить в этого робота одноплатный компьютер на каком-нибудь линуксе, а контроллеры раскидать по портам USB с эмуляцией UART для двухсторонних девайсов. И это вроде как самый в лоб простейший способ, который кстати и отлаживать и разрабатывать в разы проще. И может даже дешевле.

Но при этом я теряю контроль над форм-фактором моей начинки (зависимость от АТХ стандартов), а также теряю по себестоимости серийного продукта, если вдруг такое когда-то случится. Собственно браться или не браться относится к архитектуре "с нуля", а не к проекту в целом. 

Я приведу пример того, на что я могу напороться. Допустим, решил я сделать робота, который и пылесосит, и подметает, и тапочки приносит, и убирает вещи на место (например, лего с ковра перед тем, как пылесосить). Это только пример идеи, как здравой, которая бы выстрелила в наше время очень даже (ибо современные круглые роботы-пылесосы тупые и на поиграться). И я чую, что логика заявленной машины будет весить мегабайты, даже при попытке жесткой оптимизации и писанины кода на машинном уровне. И вот сделал я допустим прототип на скотче и картоне, закинул туда платы на клей, все работает отлично и функционально. И тут я понимаю, что этот продукт можно монетизировать. Все подготовил, сделал пробную партию 100 штук и продал как горячие пирожки. Только потянулся за производством второй партии, тут бац - платы с такими характеристиками больше не производят. На это обычно напарываются производители кассовой техники, которые за основу берут чужое готовое (термопринтеры). Плюс форму заново пересматривать, крепления, питание, да все нюансы по сути. А контроллеры и процессоры для плат - продукт надежный и долговечный, о их наличии в будущем можно не волноваться. От стороннего ПО типа операционной системы не зависят. Дешевле при адекватной компоновке, чем компы. Компактнее, форма любая хоть в клубок сверни. Ну и еще 100500 плюсов.

Посему браться или не браться относится к попытке смоделировать архитектуру на уровне схемы, а не на уровне типовых модулей и проводов. Кстати убрать лего с ковра... блин все мамаши мира расцеловали бы робота, который это умеет делать =)))

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Celestron пишет:

Я конечно не могу претендовать на абсолютные знания, но старый опыт мне подсказывает, что сделать это возможно причем на уровне микроконтроллера (скорее вопрос к даташиту МК). Есть ведь понятия указателя стека, указателя на исполняемую команду (не помню как называется, пишу с телефона). Всем этим можно управлять. Загружаешь извне "код" в свободную PROGMEM. Сохраняешь текущие указатели и регистры для последующего восстановления. Делаешь переключение стека и вызываешь загруженный "код". По завершении возвращаешь все обратно и продолжаешь работу основного кода в МК. По этому принципу построены многозадачные ядра (под ардуину тоже). Но это все очень хлопотно. для этого "внешний" код нужно структурировать и форматировать, с программной памятью повозиться и т.п. Так что вариант, мною очень уважаемого Евгения, самый простой и доступный.

 

Извините, если где хрень написал...

 

то есть я правильно понимаю, что где-то на хардварном низком уровне некоторых контроллеров должна быть возможность вместо родного флеша принимать информационный поток команд из интерфейса, например I2C или UART? Тогда замудка сводится к тому, чтобы один контроллер подавал эту инфу с флешки, а более производительный выполнял эту программу? С виду получается, что на вход контроллер становится голым процессором, но на выходе способен дергать ноги и активно работать с интерфейсами.

Честно, я новичек в этой теме и из-за изобилия и отсутствия инфы (парадокс, но факт) я не понимаю самых элементарных вещей. Например, я понимаю, как прошить контроллер и даже что такое загрузчик! Я понимаю, что примерно представляет из себя прошивка на низком уровне. Но вот если вместо контроллера поставить процессор (хоть тот же Cortex-M3), то я уже ничего не понимаю: ни как его программировать, ни как его связывать с другими контроллерами. Это как безногого научить бегать ... 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LastHopeMan пишет:

я правильно понимаю, что где-то на хардварном низком уровне некоторых контроллеров должна быть возможность вместо родного флеша принимать информационный поток команд из интерфейса, например I2C или UART? 

Нет. Есть возможность принять откуда-нибудь данные и прописать их в программную память. Это не "запросто", но возможно (не будем вдаваться в технические детали). А как, Вы думаете, Ваши скетчи там оказываются? Ну, а потом уже программу в программной памяти можно исполнять обычным образом. Другое дело, что Ваши хотелки с мегабайтами ... операция записи во программную память довольно медленная, так что не знаю как это может сработать.

arduino328
Offline
Зарегистрирован: 01.09.2016

LastHopeMan пишет:

Только потянулся за производством второй партии, тут бац - платы с такими характеристиками больше не производят.

Все контроллеры когда-то кончаются, вместо них появляются более совершенные. Кстати, Ардуина по характеристикам соизмерима с древними компьютерами на процессорах 8080 (памяти только маловато).
Важнее программный код и стандартные интерфейсы.
Если использовать схему: в центре мощный компьютер, а на периферии микроконтроллеры, то при стандартных протоколах обмена центральному компьютеру даже не нужно знать какие котроллеры стоят - он просто отправляет и принимает данные.

LastHopeMan пишет:

Кстати убрать лего с ковра... блин все мамаши мира расцеловали бы робота, который это умеет делать

В принципе решаемая задача и в ней важнее не железо, а система распознавания "лего или нет".

a5021
Offline
Зарегистрирован: 07.07.2013

Вспоминается история с разработкой автоматических радаров для нужд ГИБДД. Тоже сначала хотели обойтись простыми контроллерами или системами с линуксом на борту. Закончилось все тем, что внутри радара оказалось писюковое железо, фактически топовой производительности. Иначе распознавать номера не получалось.

Задача распознавания номеров не так и сложна, если сравнивать с описанным примером. Камера всегда находится на одном месте, машины появляются всегда в определенных точках, автомобильные номера всегда выглядят одинаковым образом.

А теперь представим робота, который должен опознавать нечто с любого ракурса, находясь на неком произвольном удалении. Представили? Вот и решайте эту задачу пока, а насчет подбора контроллеров приходите лет через тридцать.

nevkon
Offline
Зарегистрирован: 20.01.2015

Думаю вам стоит обратить внимание на проект http://www.udoo.org/. Если я правильно понял там сочетается достаточно мощное железо (32Гб флеша - попробуйте забить и 8Гб оперативы если не хватит флеша) с совместимостью платформы intel 101 которую можно из ардуино иде прораммировать.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

a5021 пишет:

Вспоминается история с разработкой автоматических радаров для нужд ГИБДД. Тоже сначала хотели обойтись простыми контроллерами или системами с линуксом на борту. Закончилось все тем, что внутри радара оказалось писюковое железо, фактически топовой производительности. Иначе распознавать номера не получалось.

Задача распознавания номеров не так и сложна, если сравнивать с описанным примером. Камера всегда находится на одном месте, машины появляются всегда в определенных точках, автомобильные номера всегда выглядят одинаковым образом.

А теперь представим робота, который должен опознавать нечто с любого ракурса, находясь на неком произвольном удалении. Представили? Вот и решайте эту задачу пока, а насчет подбора контроллеров приходите лет через тридцать.

Я лишь привел пример задачи, для которой мне не хватает родного флеша у контроллера. 

 

А касаемо распознавания текста при плохом освещении под углами - решал ее довольно дешево, для нее не нужно мощностей топовых ПК. 

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

nevkon пишет:

Думаю вам стоит обратить внимание на проект http://www.udoo.org/. Если я правильно понял там сочетается достаточно мощное железо (32Гб флеша - попробуйте забить и 8Гб оперативы если не хватит флеша) с совместимостью платформы intel 101 которую можно из ардуино иде прораммировать.

 

А может есть что-то подобное на Cortex-M3 или других армах? Если бы мне дали STM32 с возможностью апнуть хотябы оперативку и подсовывать микропрограмму по шине, я был бы счастлив...

Касаемо плат по ссылке - там слишком большие размеры и много лишнего, к сожалению. Мне нужен именно юнит-контроллер с интерфейсами SPI, I2C и UART, без всяких внешних интерфейсов встроенных. Хотя как идея - близка к тому, что мне нужно. 

arduino328
Offline
Зарегистрирован: 01.09.2016

LastHopeMan пишет:

А может есть что-то подобное на Cortex-M3 или других армах?

http://arduino.ru/Hardware/ArduinoDue

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

arduino328 пишет:

LastHopeMan пишет:

А может есть что-то подобное на Cortex-M3 или других армах?

http://arduino.ru/Hardware/ArduinoDue

 

Спасибо за ссылку, но там что-то не заметил. чтоб с интерфейса инструкции читал. Да и не процессор там, а контроллер со встроенным процессором.

 

Я имел ввиду что-то, где процессор выведен отдельно и при этом принимает инструкции по шине. 

Celestron
Offline
Зарегистрирован: 13.04.2016

Да. Только их тоже перевели в класс снятых с производства, см. arduino.cc.

a5021
Offline
Зарегистрирован: 07.07.2013

LastHopeMan пишет:
А касаемо распознавания текста при плохом освещении под углами - решал ее довольно дешево, для нее не нужно мощностей топовых ПК.

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

Я вам предлагаю решить задачу "в малом": напишите софтину, которая идентифицирует предметы лежащие на столе, когда над ними проносят веб-камеру. Предметы каждый раз расположены в произвольном месте и столь же произвольно ориентированы, а направление движения камеры всякий раз отличное. Справившись с этой задачей, вы уже будете иметь более-менее обоснованное представление, какое железо вам потребуется. А сейчас о чем вообще можно говорить?

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

a5021 пишет:

LastHopeMan пишет:
А касаемо распознавания текста при плохом освещении под углами - решал ее довольно дешево, для нее не нужно мощностей топовых ПК.

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

Я вам предлагаю решить задачу "в малом": напишите софтину, которая идентифицирует предметы лежащие на столе, когда над ними проносят веб-камеру. Предметы каждый раз расположены в произвольном месте и столь же произвольно ориентированы, а направление движения камеры всякий раз отличное. Справившись с этой задачей, вы уже будете иметь более-менее обоснованное представление, какое железо вам потребуется. А сейчас о чем вообще можно говорить?

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

Касаемо предметов, пока что не решал, еще предстоит. Думаю реализовать это через предварительную разбивку изображения на грани и поверхности, причем делать это до работы основной логики распознания. И кстати эти чудо серьезные старые и не удалые программисты, которые решили-таки задачу распознавания изображений на своем мощнейшем железе - они молодцы. Настолько молодцы, что моего соседа дважды в этом году штрафовали за пересечение сплошной. На довольно четкой фото изображено, как ТЕНЬ его машины пересекает сплошную. Поэтому никакого морального права испарять и умывать молодых со счетами они не имеют. 

 

И это все оффтоп, и не мной стартованный. Мне достаточно производительности всяких кортексов и атмелов, не хватает всего лишь RAM и способа красиво скомпоновать. Только перед этим хотелось бы пощупать подобную модель или хотябы посмотреть на нее... 

a5021
Offline
Зарегистрирован: 07.07.2013

LastHopeMan пишет:
Я по-моему написал, что уже решал задачу с распознаванием текста под различными углами с картинки сомнительного качества.

Я вам уже отвечал на это. Теперь вы еще раз процитировали сами себя и еще раз напомниили. Мне тоже еще раз ответить? Сомневаюсь, что это поможет вам уловить  разницу в классе задач.

Цитата:
На довольно четкой фото изображено, как ТЕНЬ его машины пересекает сплошную.

Поздравляю! Вы только что пересказали сюжет, который крутили по всем новостным телеканалам с месяц назад. Только добавили, видимо для убедительности, что это был ваш сосед. В этой связи возникает вопрос -- в историю с блестящим распознаванием текстов "под различными углами", вы ничего таким же образом не добавляли?

Цитата:
Мне достаточно производительности всяких кортексов и атмелов, не хватает всего лишь RAM и способа красиво скомпоновать.

То вы говорите, что новичок в теме, то уверенно оцениваете производительность "всяких кортексов". Чудно это как-то.

С идеей "картриджей" для МК (по аналогии с игровыми приставками) носятся почти столько же, сколько существуют сами МК. Только до сих пор, насколько мне известно, никаких картриджей так и не появилось.

Celestron
Offline
Зарегистрирован: 13.04.2016

ЕвгенийП пишет:

Нет. Есть возможность принять откуда-нибудь данные и прописать их в программную память. Это не "запросто", но возможно (не будем вдаваться в технические детали). А как, Вы думаете, Ваши скетчи там оказываются? Ну, а потом уже программу в программной памяти можно исполнять обычным образом. Другое дело, что Ваши хотелки с мегабайтами ... операция записи во программную память довольно медленная, так что не знаю как это может сработать.

Ну, как раз, с программной памятью проблем меньше. Выделяется массив с объявлением PROGMEM и пишется в него загружаемый код. Потом все манипуляции с контекстом. Там боюсь дело, как правильно сказано, в скорости и еще нужно грамотно структурировать загружаемый код, поскольку он тоже должен уходить в память блоками (и исполняться блоками) и целиком не ляжет. Поэтому контекст во время загрузки следующей части кода должен сохраняться для последующего использования в новом блоке, ну или вообще блоки кода сделать в виде отдельных функций, тогда с контекстом возни меньше (для ленивых ;) ). В этой ситуации можно воспользоваться ссылкой ниже, где одну из функций для многозадачности заменить на массив PROGMEM и вызывать ее по ссылке. Но тоже, слегка передалать придется работу со стеком.

PS: есть обобщающая статейка http://robocraft.ru/blog/985.html , в которой более-менее все про переключение контекстов на atmega разжевано. Так что, мне кажется, "миссия выполнима".

Celestron
Offline
Зарегистрирован: 13.04.2016

a5021 пишет:

С идеей "картриджей" для МК (по аналогии с игровыми приставками) носятся почти столько же, сколько существуют сами МК. Только до сих пор, насколько мне известно, никаких картриджей так и не появилось.

Я думаю вопрос не в том, что это не возможно, а в том, что это не целесообразно. Не надо делать на базе микроконтроллера полноценный компьютер, они для других задач (это мое мнение).

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

Logik
Offline
Зарегистрирован: 05.08.2014

Тема не представляет ни теоритического, ни практического интереса. Только проктологический - как вырастить развесистый геморой.  Кстати "решал задачу с распознаванием текста под различными углами с картинки сомнительного качества" и "решил задачу" отличается исходом. Я тоже в 10 лет делал ракету для полета на луну, на основании этого пойду к ракетчикам раскажу им как заменять пустые топливные баки на полные у летящей ракеты. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Celestron пишет:

Выделяется массив с объявлением PROGMEM и пишется в него загружаемый код. 

А разве PROGMEM не подразумевает const?

Боюсь, Вы что-то путаете, писать в память программ не так просто.

Celestron
Offline
Зарегистрирован: 13.04.2016

ЕвгенийП пишет:

А разве PROGMEM не подразумевает const?

Боюсь, Вы что-то путаете, писать в память программ не так просто.

Точно, она же flash. Пока Вы не написали, был уверен. :) После этого посмотрел здесь http://arduino.ru/Tutorial/Memory, похоже не просто... Сорри. Очень стыдно - это основы.

Но.. вот http://we.easyelectronics.ru/AVR/avr-zapis-dannyh-vo-flesh-pamyat.html

saftik
Offline
Зарегистрирован: 08.04.2015

не стал читать все посты. может уже кто то говорил. как мне кажеться для таких серьехных задач вам нужна не arduino a raspberry Pi

saftik
Offline
Зарегистрирован: 08.04.2015

не стал читать все посты. может уже кто то говорил. как мне кажеться для таких серьехных задач вам нужна не arduino a raspberry Pi

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

a5021 пишет:

Поздравляю! Вы только что пересказали сюжет, который крутили по всем новостным телеканалам с месяц назад. Только добавили, видимо для убедительности, что это был ваш сосед. В этой связи возникает вопрос -- в историю с блестящим распознаванием текстов "под различными углами", вы ничего таким же образом не добавляли?

 

Крутили другое авто. У соседа газель. Прекратите самоутверждаться за мой счет, просто не заходите в эту тему и не отвечайте. Спасибо.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Celestron пишет:

a5021 пишет:

С идеей "картриджей" для МК (по аналогии с игровыми приставками) носятся почти столько же, сколько существуют сами МК. Только до сих пор, насколько мне известно, никаких картриджей так и не появилось.

Я думаю вопрос не в том, что это не возможно, а в том, что это не целесообразно. Не надо делать на базе микроконтроллера полноценный компьютер, они для других задач (это мое мнение).

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

 

Ну архитектура контроллера по сути - как у ПК. Вопрос только в том, какой контроллер пустит нас вмешаться между его флешем и процессором, что я и ищу. Но почему-то мне кажется, что по шине не получится так просто процессор нагружать даже если есть прямой доступ. Пустил программу на шину, там условный переход назад или вперед - и нужно подстраивать входящий поток под эти переходы... что внутри контроллера реализовано возможно на полностью железном уровне.

Logik пишет:

Тема не представляет ни теоритического, ни практического интереса. Только проктологический - как вырастить развесистый геморой.  Кстати "решал задачу с распознаванием текста под различными углами с картинки сомнительного качества" и "решил задачу" отличается исходом. Я тоже в 10 лет делал ракету для полета на луну, на основании этого пойду к ракетчикам раскажу им как заменять пустые топливные баки на полные у летящей ракеты. 

........

 

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

saftik пишет:

не стал читать все посты. может уже кто то говорил. как мне кажеться для таких серьехных задач вам нужна не arduino a raspberry Pi

 

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LastHopeMan пишет:

Кстати для ардуины просто процессор где-то можно взять? Или только контроллеры?

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

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

ЕвгенийП пишет:

LastHopeMan пишет:

Кстати для ардуины просто процессор где-то можно взять? Или только контроллеры?

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

 

Я на али заказал уже кучу всего. По одной для дискавера и остальных для непосредственно использования. Атмега328 на мой взгляд (и на взгляд всяких гуглов, прайсов и т.д.) - это восьмибитный микроконтроллер. Он совмещает в себе флеш, процессор (который по отдельности не видел), оперативки кусочек. Подходит для задач ногами подрыгать или сигналы какого-то простого устройства типа клавы обработать, на большее в моих глазах ни одна атмега не способна. Продавать такие восьмибитные процессоры в наше время было бы нерационально. Что касается контроллеров STM32, то у них и операции деления с умножением заманчивые и сами по себе они адекватно собраны для более серьезных задач, чем гирлянда или пульт переключения каналов. Изучая все изобилие контроллеров, которые нашел, я выбрал для себя именно STM32F103CxT6 - они меня устраивают во всем. Во всем, кроме возможности работать в качестве процессора через поток =)) поэтому и открыл данную тему собственно, когда отчаялся. Касаемо их ядра кортекс М, то М тоже не продается отдельно, т.к. это встраиваемое в микроконтроллер решение. А я имею ввиду процессор отдельно, т.е. как в мобильнике. тот же Cortex-A серии. Есть на ардуине что-то подобное?  

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Вон что-то типа этого, тока голое, менее производительное и рублей по 500 за штуку контрофакта. Бывает?))

 

http://ru.aliexpress.com/item/Free-shipping-pcDuino-V3-pcDuino3-1GHz-Cor...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы свалили всё в одну большую кучу. Теперь, когда Вы такх хорошо знаете что такое контроллеры и процессоры, попробуйте откуда-нибудь узнать что такое Ардуина и Ваш вопрос отпадёт сам собой.

GarryC
Offline
Зарегистрирован: 08.08.2016

ESP8266 работает так, как Вы хотите - подкачивает нужные куски из внешней FLASH во внутреннюю оперативку вроде как 32 кб.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

ЕвгенийП пишет:

Вы свалили всё в одну большую кучу. Теперь, когда Вы такх хорошо знаете что такое контроллеры и процессоры, попробуйте откуда-нибудь узнать что такое Ардуина и Ваш вопрос отпадёт сам собой.

нигде не видел, чтобы были описаны границы ардуины. Если бы границы были на микроконтроллерах атмел, я бы не писал в этом конкретно форуме свои вопросы. Да и так понятно, что китайцы размыли границы своими чудо-подделками настолько, что их уже и нет. Разве не так? Из конструктора кружка радиолюбителей превратился проект во все для дома.

Кроме того, в программе ардуины хоть и не видно армов (я не нашел), но вот кортексы в атмелах-контроллерах там присутствуют. И интелы. Неужели нет на интелах микросхемы с отдельным процессором?

 

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

GarryC пишет:

ESP8266 работает так, как Вы хотите - подкачивает нужные куски из внешней FLASH во внутреннюю оперативку вроде как 32 кб.

Ого, а я читал про нее. Но это же вайфайка. Ну по крайней мере у меня о ней сложилось впечатление, что это периферийная штуковина чисто на "вывести в интерфейс вайфай", в которой "почему-то" характеристики лучше, чем у STM32 =) Наверное это дурацкий мой стереотип, что если микроконтроллер имеет специальные средства, то он только для этого и предназначен.

А можете примерно ткнуть страницу, где этот функционал описан? В даташите я не помню такой инфы..

 

Во, нашел! 

8.1 CPU This chip embeds an ultra low power Micro 32-bit CPU, with 16-bit thumb mode. This CPU can be interfaced using:  code RAM/ROM interface (iBus) that goes to the memory controller, that can also be used to access external flash memory,  data RAM interface (dBus), that also goes to the memory controller  AHB interface, for register access, and  JTAG interface for debugging

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LastHopeMan пишет:

нигде не видел, чтобы были описаны границы ардуины. 

Вот и поищите, поизучайте. Они описаны, не сомневайтесь.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

ЕвгенийП пишет:

LastHopeMan пишет:

нигде не видел, чтобы были описаны границы ардуины. 

Вот и поищите, поизучайте. Они описаны, не сомневайтесь.

Бесполезная трата. Попробуйте поискать, что такое "обвязка" и вы меня поймете на все 100.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Блин .. очередной сферический конь в очередном мозговом вакууме, ну да ладно. Попробую поучаствовать в теме. :)

1. Можно ли исполнять программу в микроконтроллере "по частям"? Ответ: да, можно. Не так тривиально как хотелось бы, но тем не менее вопрос решаем и собственно давно решен: любой загрузчик программы во флеш поступает именно так - находясь в одной части флеша, заливает код в другую и передает на неё исполнение. У АТмелов заливать можно порциями по 256 байт (или слов - не помню уже, не вникал глубоко). Это наименьший размер флеша - страница.

Решение по "flash-оверлеям": в область загрузчика помещается процедура, которая вызывается из кода "где надо" и заливает требуемый оверлей в выделенную для этого область флеша по мере необходимости "откуда можно", например карта SD по SPI. Для Мега2560 ожидаемо удобно использовать 2 страницы (по 64к примерно) программной части флеша под "общую" и "оверлейную" области.

недостаток: ограниченное количество циклов записи, нормированное производителем в .. всего 10_000 циклов.

2. Можно ли нарастить оперативную память? Ответ: для моделей, имеющих x-bus интерфейс - можно. до 64кбайт для простых мег, до 16 Мб для икс-мег - от слова "легко", для "а побольше" - легко можно реализовать простые версии "страничного" контроллера памяти. Его организация - решение внешнее, а потому произвольное, как и получающийся объем SRAM/SDRAM. Решения по расширителям памяти есть как в Сети, так даже и на этом форуме.

недостаток этого подхода в целом - некоторое, по большей части несущественное снижение производительности камня. Доступ к внешней SRAM камень делает на 1 такт дольше, чем к своей родной. Но, учитывая что это происходит "не каждую команду" (в среднем 1 из 3-х), то можно считать "несущественно".

3. Можно, нарастив память, смотреть в сторону интерпретаторов и ОС .., но тут ИМХО проще взять "иной камень", уже имеющий "на борту" то, ради чего весь гемморой п.2. Есть камни с достаточно большими объемами как flash, так и SRAM а то и имеющие единое адресное пространство .. тут ну очень большой полет фантазии. Гуглить на предмет SoC (система на кристале).

4. Озвученная часть сферического коня ПРЕДПОЛАГАЕТ решение задачи (в том или ином виде) распознавания образов, что само по себе сразу же "вычеркивает" все меги из комплекта "подходящих" камней разом. Более того, появляется смысл искать камень со встроенным DSP-процессором и соответствующим объемом памяти.

5. Ещё одна озвученная часть предполагает управление периферией и работу с большим количеством "простых" датчиков: ИК, концевики, узв. радары, энкодеры и пр. Вот тут мега очень даже подходит.

Вывод напрашивается как-бы уже озвученный: использовать камень с DSP для работы с видео и решением задач "предраспознавания изображений" - разного рода подготовки: свертка изображения, контрастность контуров, повышение цветности, поиск "замкнутых контуров" .. на выходе которого уже "упакованный результат" .. как из глаза в моск. Тут можно смотреть разные решения по умным цифромыльницам с их распознаванием улыбок.

Плюсом камень для управления периферией и приему данных с датчиков (а то и не один) .. тут смотреть что лучше, может как раз решение на нескольких "умных" перифериях окажется интересней, чем один "чудо-камень" (Мега2560 к примеру).

И! плюсом SoC решение, так сказать "главный мозг", который все это принимает, обрабатывает и выдает команды. Молотилка.

Можно посмотреть в сторону решений с многопортовой памятью от "цитрус-логик": поток видео, данные с датчиков пишутся в память по своим портам, молотилка работает по своим.

a5021
Offline
Зарегистрирован: 07.07.2013

LastHopeMan пишет:
Прекратите самоутверждаться за мой счет, просто не заходите в эту тему и не отвечайте.

Вы кем себя воображаете, что беретесь безаппеляционно указывать другим, что им делать?

Самоутверждаться за ваш счет? Помилуйте. У вас нет никакого счета. Не на чем самоутверждаться, даже если возникнет такое необъяснимое желание. Мне нет никакого проку самоутверждаться за счет всяких чудаков, которые генерируют бредовые идеи, фантазируют насчет своих сверх-способностей и не в состоянии соизмерять свои хотелки с реалиями. Вы думаете, вы первый такой здесь? Раз в месяц на форуме объявляется очередной фантазер с "мега-проектом", три дня идет бурное обсуждение пустого места, после чего "мега-проект" погружается на дно форума и о нем никто и никогда не вспоминает. К сожалению -- это стандартный шаблон и вы зачем-то слепо ему следуете.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

LastHopeMan пишет:

Ну архитектура контроллера по сути - как у ПК.

Отнюдь.

У контроллеров - гарвардская, а у ПК - фон-неймановская.