-
- Бывает ещё position-independent code. - SciFi(14.09.2020 20:22)
- Не понял что ты хочешь. Ты не знаешь по какому адресу в итоге будет
размещаться программа? Для этого существуют релокации и
позиционно-независимый код. И программу при размещении во flash
нужно либо релоцировать (поменять в ней все адреса), либо, если код
позиционно-независимый, то релоцировать только данные (где адреса
записаны) и запускать как есть. Последнее сильно проще, т.к. видов
релокаций вместо ~130 штук (офигеешь код писать) остаётся
практически одна (прибавить fk0(4395 знак., 14.09.2020 19:30, ссылка, ссылка)
- См. также подробности: - fk0(16.09.2020 12:44, ссылка)
- Человек хочет проблемы с обслуживанием устройств. - BlackMorda(14.09.2020 20:00)
- сказал А говори и Б! Жду подробностей! - Aleksey_75(14.09.2020 20:03)
- Нужно ведь обновлять ПО, добавлять фичи. Вести зоопарк версий. - BlackMorda(14.09.2020 20:09)
- не вижу проблем! версии ведутся уже сейчас! модули добавляются тоже! - Aleksey_75(14.09.2020 20:17)
- Нужно ведь обновлять ПО, добавлять фичи. Вести зоопарк версий. - BlackMorda(14.09.2020 20:09)
- сказал А говори и Б! Жду подробностей! - Aleksey_75(14.09.2020 20:03)
- Если процессор ARM Cortex, то 130 видов релокаций не будет. Там,
если не склероз, используется всего пара видов. THUMB_JMP и простой
32-битный указатель. - LightElf(14.09.2020 19:50)
- А остальные для чего по-твоему??? Те которые для ARM-режима
действительно уходят. А так же Dynamic и Deprecated. Но всё что
касается Data -- остаются же. А там варианты всякие странные и
много, типа ((S + A) | T) - B(S). - fk0(14.09.2020 19:56)
- Вот тута чуваки разруливают только R_ARM_ABS32 и R_ARM_THB_JMP/CALL
- и не рыдают. - LightElf(15.09.2020 00:56, ссылка)
- Ты уверен, что хорошо понимаешь что они делают? По-моему у них уже
PIC-бинарник. Только с динамическими релокациями. Я с контроллерами
не работаю, мне сложно для thumb сказать. Но вот я взял проект
собираемый в thumb и для всей кучи *.o файлов вижу там массу видов
разных релокаций: fk0(1894 знак., 15.09.2020 02:31, ссылка)
- Я уверен, что ты преувеличиваешь проблему. У ТС нет задачи
"загрузить произвольно взятый непонятно откуда ELF". - LightElf(15.09.2020 12:06)
- От пионерской паделки до продукта -- шаг через пропасть. Где
вылезают нюансы о которых даже не догадывался. Всегда так. И мы не
определились релокации или шаред либа. Если первый вариант, то это
гиблое дело (помимо прочего сложность приводит к невыявленным
ошибкам, а расходы на разработку и тестирование уходят в космос).
Если шаред либа, то скорей вариант с тремя типами релокаций
кончится добавлением четвёртого и может пятого своими силами и всё
даже заработает. Но fk0(196 знак., 15.09.2020 12:41)
- Какое связывание символов, ты о чем? Связывание сделает линкер.
Модули у ТС самодостаточные, не имеют импортов/экспортов. LightElf(127 знак., 15.09.2020 13:23 - 13:54)
- модули могут получать доступ к функциям основной логики через
таблицу указателей размещенную по прибитому адресу! С этим не
должно быть проблем! - Aleksey_75(15.09.2020 13:27)
- Не надо прибивать адреса. Верней надо, но ровно один адрес одной функции. Нужно лишь сделать самодельный недо-COM. Где эта одна функция в зависимости от аргументов реализует несколько функций, вроде получения версии, получения интерфейса по заданным параметрам. Предполагается что компонент (библиотека) может реализовать несколько интерфейсов. А интерфейс -- это структура из набора указателей на функции. Т.е. загружаешь библиотеку, зовёшь единственную функцию и говоришь ей fk0(17590 знак., 16.09.2020 04:46, ссылка)
- Может быть, логичнее вообще подгружаемые модули сделать в виде
интерпретируемых скриптов. - SciFi(15.09.2020 13:35)
- два варианта модулей именно так и сделаны, оформлены в виде массива
структур, основная логика их разбирает и делает то что нужно, у
меня эти модули собирает даже не arm компилер а CVI. Но эти модули
достаточно примитивны, отсутствует математика. С третим вариантом
все сложнее все сложнее, там полноценные функции с математикой и
прочим! Я думал об этом, но это надо писать свой интерпретатор по
сути свой язык придумывать ))) пока отказался! Если есть готовое
нечто похожее с Aleksey_75(24 знак., 15.09.2020 13:56)
- Pawn SciFi(76 знак., 15.09.2020 14:09, ссылка)
- Мне кажется, что это не совсем решение. Код ВМ вы запустите, но он
же не сфероконь в вакууме: нужно куда-то выдавать результат,
какие-то функции нативного кода дёргать из ВМ, что в свою очередь
потребует знать адреса этих функций, переменных, и т.п. Dingo(76 знак., 16.09.2020 10:25)
- Вы не в теме. Там вакуумом и не пахнет, можно вызывать функции в ту
и в другую сторону, с передачей данных трудностей тоже нет. - SciFi(16.09.2020 10:52)
- Откуда вакуум? "ВМ" - виртуальная машина, у автора - abstarct
machine. Проблема не в вызове функций, а в том, что вызываемые
вновь добавленые должны быть position independed. Если идут с
обновлённой версией прошивки. То есть от чего уходили к тому и
вернулись. Pawn можно применить, но только если новых функций на
нативном машинном коде добавляться не будет. Dingo(361 знак., 16.09.2020 11:46)
- Он уже пояснял. Речь о том, что весь код в память не лезет, а не о том, что "обновлять по частям" >>> - SciFi(16.09.2020 12:05, ссылка)
- Откуда вакуум? "ВМ" - виртуальная машина, у автора - abstarct
machine. Проблема не в вызове функций, а в том, что вызываемые
вновь добавленые должны быть position independed. Если идут с
обновлённой версией прошивки. То есть от чего уходили к тому и
вернулись. Pawn можно применить, но только если новых функций на
нативном машинном коде добавляться не будет. Dingo(361 знак., 16.09.2020 11:46)
- Вы не в теме. Там вакуумом и не пахнет, можно вызывать функции в ту
и в другую сторону, с передачей данных трудностей тоже нет. - SciFi(16.09.2020 10:52)
- спасибо! гляну! - Aleksey_75(15.09.2020 14:14)
- Мне кажется, что это не совсем решение. Код ВМ вы запустите, но он
же не сфероконь в вакууме: нужно куда-то выдавать результат,
какие-то функции нативного кода дёргать из ВМ, что в свою очередь
потребует знать адреса этих функций, переменных, и т.п. Dingo(76 знак., 16.09.2020 10:25)
- Pawn SciFi(76 знак., 15.09.2020 14:09, ссылка)
- два варианта модулей именно так и сделаны, оформлены в виде массива
структур, основная логика их разбирает и делает то что нужно, у
меня эти модули собирает даже не arm компилер а CVI. Но эти модули
достаточно примитивны, отсутствует математика. С третим вариантом
все сложнее все сложнее, там полноценные функции с математикой и
прочим! Я думал об этом, но это надо писать свой интерпретатор по
сути свой язык придумывать ))) пока отказался! Если есть готовое
нечто похожее с Aleksey_75(24 знак., 15.09.2020 13:56)
- модули могут получать доступ к функциям основной логики через
таблицу указателей размещенную по прибитому адресу! С этим не
должно быть проблем! - Aleksey_75(15.09.2020 13:27)
- Какое связывание символов, ты о чем? Связывание сделает линкер.
Модули у ТС самодостаточные, не имеют импортов/экспортов. LightElf(127 знак., 15.09.2020 13:23 - 13:54)
- От пионерской паделки до продукта -- шаг через пропасть. Где
вылезают нюансы о которых даже не догадывался. Всегда так. И мы не
определились релокации или шаред либа. Если первый вариант, то это
гиблое дело (помимо прочего сложность приводит к невыявленным
ошибкам, а расходы на разработку и тестирование уходят в космос).
Если шаред либа, то скорей вариант с тремя типами релокаций
кончится добавлением четвёртого и может пятого своими силами и всё
даже заработает. Но fk0(196 знак., 15.09.2020 12:41)
- Я уверен, что ты преувеличиваешь проблему. У ТС нет задачи
"загрузить произвольно взятый непонятно откуда ELF". - LightElf(15.09.2020 12:06)
- Ты уверен, что хорошо понимаешь что они делают? По-моему у них уже
PIC-бинарник. Только с динамическими релокациями. Я с контроллерами
не работаю, мне сложно для thumb сказать. Но вот я взял проект
собираемый в thumb и для всей кучи *.o файлов вижу там массу видов
разных релокаций: fk0(1894 знак., 15.09.2020 02:31, ссылка)
- Data тоже может ползать. Компиляторы могут агрегатировать данные в ОЗУ, для доступа к ним, относительно одного регистра. - BlackMorda(14.09.2020 20:05)
- Вот тута чуваки разруливают только R_ARM_ABS32 и R_ARM_THB_JMP/CALL
- и не рыдают. - LightElf(15.09.2020 00:56, ссылка)
- А остальные для чего по-твоему??? Те которые для ARM-режима
действительно уходят. А так же Dynamic и Deprecated. Но всё что
касается Data -- остаются же. А там варианты всякие странные и
много, типа ((S + A) | T) - B(S). - fk0(14.09.2020 19:56)
- "Ты не знаешь по какому адресу в итоге будет размещаться программа? " - сейчас знаю! А хочу не знать! )) По озу да, только выделение для каждого модуля свою область и размер (это уже есть). модули по своей сути конечные автоматы и возвращают указатели на свои функции основной логике и сами ничего вызывают. Поэтому и прикинул что самым простым будет вычислять смещение указателя. Спасибо! почитаю! - Aleksey_75(14.09.2020 19:44)
- Когда-то в ms-dos была такая фишка, называлась оверлеи. Наборы
функций могли храниться в отдельных файлах на диске. Программа по
мере надобности подгружала функции из файла в ОЗУ и запускала их
выполнение. mmc(371 знак., 14.09.2020 18:44, ссылка)
- Оверлеи использовались для случаев, когда прога одним куском в
память не влезала. Здесь же (если я правильно понял) есть
внутренний флеш достаточного объема. Т.е. нужно просто настроить
файлы на конкретные адреса в этом флеше. - LightElf(14.09.2020 18:44)
- ну и так и не так! есть мк с 128кб флеши, под внешние модули выделено 64кб , есть внешняя флешка 8мб , в среднем полный файл прошивки занимает порядка 4мб! настройке девайса бут выдергивает необходимые модули с флеши и кладет в набортную флешь по заданому в модуле адресу (по сути это оверлеи). И все это работает! Замута из за того, что пошли модули свыше выделенного под него пространства, в тоже самое время есть модули которые гораздо меньше выделенного пространства, и если Aleksey_75(66 знак., 14.09.2020 18:52)
- Если флэши достаточно, чтобы хранить сразу все, то зачем огород городить? Пусть все там и будет. - mmc(14.09.2020 18:48)
- Оверлеи использовались для случаев, когда прога одним куском в
память не влезала. Здесь же (если я правильно понял) есть
внутренний флеш достаточного объема. Т.е. нужно просто настроить
файлы на конкретные адреса в этом флеше. - LightElf(14.09.2020 18:44)
- NuttX имеет загружаемые модули. Можно поучиться. - Evgeny_CD(14.09.2020 18:31, ссылка)
- Хранить во внешней флешке модули в виде ELF-файлов, при переносе в
набортную флеш - применять фиксапы на конкретные адреса. - LightElf(14.09.2020 18:22)
- Хм! а можно подробнее или где почитать про это ? - Aleksey_75(14.09.2020 18:28)
- Гугл дает 100500 ссылок. Например начать LightElf(6 знак., 14.09.2020 18:34, ссылка, ссылка)
- Спасибо! - Aleksey_75(14.09.2020 18:34)
- Гугл дает 100500 ссылок. Например начать LightElf(6 знак., 14.09.2020 18:34, ссылка, ссылка)
- Хм! а можно подробнее или где почитать про это ? - Aleksey_75(14.09.2020 18:28)