Pingvin писал(а):
Спрошу "в лоб" - поделитесь кодом?
Особливо интересует работа с радиомодулем и парсинг ini-файла.
В данный момент показать код не готов. У меня были идеи
возможно сделать коммерческую версию потом. Поэтому насчёт всего кода - пока нет.
Но, отдельными частями, вроде работы с радиомодулем и парсинга ini-файлов я поделюсь, это дело не сложное. Ну и бинарную прошивку, конечно, мне не жалко.
Насчёт nfr24l01, как писал
LTagKirov, примеров в сети много, по ним я и учился. Вряд и мой код содержит что-то новое...
Парсинг ini-файла - тут ничего особенного. Несложная state-машина из цикла и свитча. Прикрепляю к сообщению тот код, который отвечает за парсинг ini-файла
Ещё один нюанс: я пишу на
C++. И да, кое-где юзаю C++11. Код, который в приложеном файле - копипаста из хедера и из cpp-шника с удалением всего лишнего. Скорее всего, просто добавить его в проект будет недостаточно. Он предполагает, что работает работа (о как!) с файлами через fatfs. Он вроде-как корректно обрабатывает синтаксические ошибки в ini-файле. Каждый раз, когда распознаёт ключ и значение, вызывает callback, который предварительно надо задать.
Как переделать на чистый C, я думаю, разберетесь, основной код там в одной функции.
Насчёт кода в целом... Я не использую какую-либо готовую RTOS, у меня свой планировщик с кооперативной многозадачностью. Задачи не вытесняются, а просто запускаются по очереди последовательно. Зато, есть набор интерфейсов hal (hardware abstraction layer), которые позволяют писать основной код вообще абстрагируясь от особенностей микроконтроллера. Это позволяет легко портировать код. Например, недавно я запилил простой пульт управления по ИК. Респаун, убить, сменить команду, добавить/убрать здоровье. Пульт я делал на более простом чипе stm32f100cbt6 (в оружии и повязке stm32f103ret6). В результате никакой копипасты кода, только переписал хардварный уровень, "драйверы".
Тут кто-нибудь может возразить, что C++ не оптимален, и т.п. - но это не так. Самые тяжелые части C++, такие как RTTI и exception-ы, конечно, стоит отключить. Код получается только на несколько процентов больше, а скорость и удобство разработки возрастает в разы. Рекомендую. Все прелести вроде стандартных контейнеров и динамической памяти работают на ура. Функторы в качестве коллбэков + std::bind, и любая сложная логика пишется на раз.