Как стать автором
Обновить
4
0
Сергей Гаврилов @Dr_Zlo13

Пользователь

Отправить сообщение

Как обычно, слинковавшись с этими функциями/переменными на этапе загрузки в оперативную память.

У нас на устройстве реализован полноценный ELF загрузчик, и всё работает как на большой взрослой ОС, за исключением изоляции процессов.

А что пришлось додумывать?

Я пробовал разные концепты, все они или не влезают в память, или ты пишешь на Си без компилятора, что сложнее чем писать с компилятором.

Кстати, скомпилировать и запустить приложение на Флиппере быстрее, либо эквивалентно по времени "закинуть скрипт в папку".

Ссылка на собранное приложение

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

Например вот как приложение выглядит на гитхабе, и вот так оно расположено в applications_user.

applications_user

собрано под v0.70, работает после обновления на v0.71

Для внешних приложений у Флиппера своя версия, указана в api_symbols.csv и увеличивается только при изменении API.

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

Что же тут может демотивировать писать статьи? Мое предположение тут скорее нехватка документации и слишком злые правила написания под эмбед (которые мы еще ужесточили строгими проверками в компиляторе).

отсутствие нормальных инструкций от разрабов

Сейчас проблема (и она упомянута в статье) в том, что мы очень часто переделываем API или систему сборки, и пока мы не поймем что все работает как нужно, заморозим API и скажем что прошивка достигла версии 1.0 любая документация по сборке приложений преждевременна и замедлит нашу работу.

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

Да, флиппер понимает только свой формат изображений, heatshrink-compressed xbm image. Из минусов - все нужно конвертировать. Из плюсов - изображения занимают очень мало места.

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

Спасибо, приятно слышать.

просто задать несколько параметров, а на выходе готовая основа для приложения

Что-то подобное есть в недавно зарелизившемся uFBT (standalone система сборки приложений для флиппера). Наверное перенесем это и в обычный FBT.

заставить VS Code видеть моё приложение и подсвечивать ошибки у меня почему-то не получилось

./fbt firmware_cdb делали? Это генерация compile_commands.json, без которого vscode не знает как процессить файлы через intellisense.
Постараемся хотя бы основные тонкости описать в документации.

вопрос эффективности чтения байт файловой системы

На самом деле кроме кеширования на уровне стрима, есть еще кеширование на уровне блочного устройства (сд-карты), последние 8 запрошенных секторов всегда кешируются. Иногда это приводит к тому что буферизированные стримы медленнее чем работа через storage_file_xxx.

Уже делалось на хакатоне, это вполне себе работает

Не нашли ничего распространенного (что можно было бы купить в текущей ситуации) и универсального.

Конечно. Флешка у ядер общая.

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

заводское КБ

В этом вся особенность. Заменить компонент на другой в документации возможно и несложно. Сложно проверить как эта замена повлияла на всё, от процесса пайки и сборки до работы конечного устройства.

Завод не у нас под боком, и он не принадлежит только нам.

На чехле тоже перевод слетел, поправьте.

>Тогда нужно использовать стандарт abi для ARM.
Вы не понимаете что такое abi.

Я продолжу диалог после того как вы приведете пример кода приложения которое бы вызывало функцию printf из ядра ОС и могло быть как вкомпилировано в ядро, так и запущено извне.

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

Плюс механизм верификации совместимости abi в этом случае будет очень не гибким.

А зачем это может быть нужно? В любом случае, в чем проблема?

Сотни килобайт в RAM? Даже в ROM оно не всегда помещается.

А библиотека-то где хранится?

Нет, код компилируется в нулевой адрес, при загрузке релоцируется.

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность