|
Оверлеи - посоветуйте или раскритикуйте, аналог динамической линковки для AVR |
|
|
|
Jul 4 2018, 07:22
|

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

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

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

|
Отвечаю оптом всем, цитировать не очень удобно. Идея такая: "основная программа" выделяет некий буфер, грубо говоря, все свободное ОЗУ за вычетом необходимого пространства стека и собственных нужд. Адрес этого буфера известен всем оверлеям на этапе разработки, т.е. в модуле оверлея это просто указатель на буфер ИЗВЕСТНОГО размера. Оверлей накладывает на этот указатель тип структуры собственных данных и работает с ними. таким образом, все оверлеи разделяют одну и ту же область памяти, никакого выделения/освобождения не требуется - только инициализация при старте оверлея. Как вариант, каждый оверлей имеет функцию №1 init, которой передается адрес этого буфера, что принципиально ничего не меняет. На счет того, что будет содержать в себе оверлей в плане эффектов цветомузыки, я еще до конца не решил - то ли один-единственный эффект, то ли некий набор... Принципиальным тут для меня является крайне небольшой ресурс перезаписей flash у МК AVR - гарантируется 1000 раз всего-то... Разумеется, буду продумывать механизм проверки имеющегося оверлея на карточке на загруженность, чтобы не переписывать понапрасну, но все равно, 1000 "переключений" режима цветомузыки - это как-то маловато... Еще одна проблема, над решением которой придеттся думать, это необходимость передачи оверлею набора функций из основной программы, т.е. аналогично некоему BIOS, чтобы в каждом оверлее не тянуть одинаковые функции типа memcpy или иные, которые активно используются в цветомузыке...
Пока что все на этапе обдумывания, но, как я понял, принципиально идею оверлеев вы одобряете?
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Jul 9 2018, 17:39
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Цитата(ARV @ Jul 9 2018, 11:24)  Пока что все на этапе обдумывания, но, как я понял, принципиально идею оверлеев вы одобряете? Не одобряем. Надо параметризовать эффект-автомат и придумать какой-нибудь упрощённый язык его программирования. Программу для него писать в виде обычного текстового файла и разрешить пользователям самим это делать.
|
|
|
|
Сообщений в этой теме
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 ARV Какие-то советы не совсем по теме вы даёте, коллег... Jul 4 2018, 11:23 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 aiwa Цитата(ARV @ Jul 4 2018, 14:23) Поэтому в... Jul 5 2018, 00:01  ARV Цитата(aiwa @ Jul 5 2018, 04:01) Т.е. Вы ... Jul 5 2018, 11:01   aiwa Цитата(ARV @ Jul 5 2018, 14:01) Плюс ... Jul 5 2018, 13:28    adnega Цитата(aiwa @ Jul 5 2018, 16:28) просто в... Jul 5 2018, 13:39     aiwa Цитата(adnega @ Jul 5 2018, 16:39) Это ка... Jul 5 2018, 14:36      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 adnega Цитата(ARV @ Jul 9 2018, 11:24) Адрес это... Jul 9 2018, 14:18 _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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|