реклама на сайте
подробности

 
 
> Оверлеи - посоветуйте или раскритикуйте, аналог динамической линковки для AVR
ARV
сообщение Jul 4 2018, 07:22
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Коллеги! Обращаюсь к знатокам за советом.
Появилась идея сделать нечто, функционально напоминающее динамическую линковку для программ AVR. Раньше, когда DLL еще не изобрели, такое называлось "оверлейными модулями"...
Известно, что основная беда всех программ для МК AVR - это высокая трудоемкость модификации прошивки. И вот предлагаемая идея призвана значительно улучшить эту ситуацию.
Идея такая:
1. Основную программу собираем, как обычно. В ней есть интерфейс к SD-карте, и определена раз и навсегда область памяти, где будут оверлеи. Ну и выделен блок ОЗУ для данных оверлея.
2. Адреса начала кода оверлея и буфера данных фиксированы, и на этапе разработки оверлея известны.
3. Оверлей - это единственная функция, либо (предпочтительнее) несколько функций, адреса которых определены в структуре, которая как раз и размещается с адреса flash, выделенного для оверлея - ну типа таблицы векторов или вызовов. В общем, не суть важно, как.
4. Когда мы хотим наделить наше устройство другим функционалом, мы записываем на SD-карту скомпилированный оверлей, стартуем девайс, который обнаруживает соответствующий файл на карте, и прошивает его содержимое в заданную область, после чего обращается через таблицу вызовов к функциям оверлея.

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

Как оцените идею?

Это не совсем ситуация с самопрошивкой через бут-область AVR, т.к. объем прошиваемой области предполагается не с нулевого адреса, а скорее с середины flash, и при этом с перезатиранием области бута, которая в конце, как правило. Очень похоже, но чуточку отличается... в связи с чем и вопросы:

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

я сильно-сильно плаваю в скриптах линковщика (а точнее - вообще тону), и хитрости makefile меня тоже скорее пугают, чем помогают... Мне бы как-то попроще, если это возможно...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ARV
сообщение Jul 4 2018, 11:23
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Какие-то советы не совсем по теме вы даёте, коллеги sm.gif
Основной код модифицировать не нужно, он знает только номера функций в таблице оверлея и адрес этой таблицы, и обращается по ним. А все варианты оверлеев содержат в самом своём начале эту самую таблицу, ссылающуюся на собственные функции. Поэтому в одном оверлее условно 5-я функция цветомузыки может быть "красный на максимум", а в другом - "синий на минимум".

И как бы настоящую линковку мне не надо повторять, и разбираться с ней особенно не стоит, как и с форматом elf-файла - не влезет его разбор в AVR, да и ни к чему... Мне бы просто понять, как при помощи AVR-GCC собрать модуль с функциями и таблицей, и как из него получить HEX для записи...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jul 5 2018, 00:01
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(ARV @ Jul 4 2018, 14:23) *
Поэтому в одном оверлее условно 5-я функция цветомузыки может быть "красный на максимум", а в другом - "синий на минимум".

С другой стороны эти 5-е функции из разных оверлеев по сути представляют одну функцию с двумя параметрами: цвет и яркость.
И реализовать такой функционал гораздо проще через табличную организацию параметров в EEPROM.


Цитата(ARV @ Jul 4 2018, 14:23) *
И как бы настоящую линковку мне не надо повторять, и разбираться с ней особенно не стоит, как и с форматом elf-файла - не влезет его разбор в AVR, да и ни к чему... Мне бы просто понять, как при помощи AVR-GCC собрать модуль с функциями и таблицей, и как из него получить HEX для записи...


Т.е. Вы планируете не все возможные варианты функций-эффкектов собрать в один файл, а на каждую допустимую комбинацию свой файл транслировать?

Сообщение отредактировал aiwa - Jul 5 2018, 00:02
Go to the top of the page
 
+Quote Post
ARV
сообщение Jul 5 2018, 11:01
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(aiwa @ Jul 5 2018, 04:01) *
Т.е. Вы планируете не все возможные варианты функций-эффкектов собрать в один файл, а на каждую допустимую комбинацию свой файл транслировать?

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

Пока только вникаю в данные рекомендации и думаю о целесообразности... Пересилят ли плюсы минусы?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jul 5 2018, 13:28
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(ARV @ Jul 5 2018, 14:01) *
Плюс "всех вариантов в одной прошивке" в том, что переключение эффекта быстрое и без ущерба микроконтроллеру.


Вы не совсем поняли. Я имел ввиду организацию дампа на карточке для подкачки.
Здесь два варианта: иметь все спецэффекты в одном "файле", или иметь кучу "файлов" с разнообразным набором эффектов.
В первом случае Вам по сути при перезаписи с карточки во флеш придется выполнить работу линкера. Этот случай более правильный и гибкий.

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


Go to the top of the page
 
+Quote Post
adnega
сообщение Jul 5 2018, 13:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(aiwa @ Jul 5 2018, 16:28) *
просто вырезать в выхода компилятора необходимый дамп прошивки.

Это как? А адреса? А распределение ОЗУ?
Я в сообщении #13 привел пример исходников, которые можно собрать с известного адреса
и безболезненно с этого адреса грузить. Правда, придется под оверлей в основной программе
выделить ОЗУ и указатель на эту область сохранить во flash при загрузке оверлея.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jul 5 2018, 14:36
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(adnega @ Jul 5 2018, 16:39) *
Это как? А адреса? А распределение ОЗУ?

ТС вначале упоминал, что блоки ОЗУ распределены для каждого оверлея и адреса этих блоков уже известны на этапе разработки.



Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ARV   Оверлеи - посоветуйте или раскритикуйте   Jul 4 2018, 07:22
- - jcxz   Цитата(ARV @ Jul 4 2018, 10:22) 4. Когда ...   Jul 4 2018, 08:26
- - arhiv6   Вы хотите сфой формат этих библиотек использовать?...   Jul 4 2018, 08:45
- - aiwa   Цитата(ARV @ Jul 4 2018, 10:22) я сильно-...   Jul 4 2018, 08:55
- - dimone   как бородатый вариант, допаять линейку памяти, так...   Jul 4 2018, 10:40
|- - adnega   Цитата(ARV @ Jul 4 2018, 14:23) Какие-то ...   Jul 4 2018, 11:43
||- - dimone   Цитата(adnega @ Jul 4 2018, 14:43) Задачк...   Jul 4 2018, 12:12
||- - aiwa   Цитата(adnega @ Jul 4 2018, 14:43) Перефр...   Jul 5 2018, 16:51
||- - adnega   Цитата(aiwa @ Jul 5 2018, 19:51) Мне каза...   Jul 5 2018, 17:13
||- - aiwa   Цитата(adnega @ Jul 5 2018, 20:13) Хотя, ...   Jul 5 2018, 17:45
||- - adnega   Цитата(aiwa @ Jul 5 2018, 20:45) и для их...   Jul 5 2018, 17:52
|- - adnega   Цитата(aiwa @ Jul 5 2018, 17:36) ТС внача...   Jul 5 2018, 15:51
- - ARV   Именно переписыванием flash. Но вопрос в том, как ...   Jul 4 2018, 12:18
|- - adnega   Цитата(ARV @ Jul 4 2018, 15:18) как указа...   Jul 4 2018, 12:38
|- - kolobok0   Цитата(ARV @ Jul 4 2018, 15:18) ...как ск...   Jul 4 2018, 12:50
- - ARV   Этого (загрузки по произвольным адресам) не требуе...   Jul 4 2018, 12:43
|- - adnega   Цитата(ARV @ Jul 4 2018, 15:43) Этого (за...   Jul 4 2018, 14:29
- - adnega   В AVR-студии добавил пару строчек в опциях линкера...   Jul 4 2018, 18:00
- - ARV   Отвечаю оптом всем, цитировать не очень удобно. Ид...   Jul 9 2018, 08:24
|- - adnega   Цитата(ARV @ Jul 9 2018, 11:24) Адрес это...   Jul 9 2018, 14:18
|- - VladislavS   Цитата(ARV @ Jul 9 2018, 11:24) Пока что ...   Jul 9 2018, 17:39
|- - _pv   Цитата(ARV @ Jul 9 2018, 14:24) Пока что ...   Jul 10 2018, 08:06
- - haker_fox   QUOTE (ARV @ Jul 4 2018, 15:22) Известно,...   Jul 10 2018, 05:03
|- - VladislavS   Цитата(haker_fox @ Jul 10 2018, 08:03) Мн...   Jul 10 2018, 08:06
|- - haker_fox   QUOTE (VladislavS @ Jul 10 2018, 16:06) Т...   Jul 11 2018, 09:57
- - ARV   Проще всего не делать ничего - это факт, с которым...   Jul 12 2018, 10:13


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 08:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01472 секунд с 7
ELECTRONIX ©2004-2016