Evgeny_CDАрхитектор (01.08.2011 14:43, просмотров: 8118)
Обобщенное программирование. Как бы научиться просто решать сложные задачи? Вот есть некое устройство - UART. I2C или еще что. На самом верхнем уровне его можно представить как:
* Справочник – совокупность неких структур, с описанием их смысла и смысла их полей
* Некий интерфейс по передаче им указателей на эти структуры и получения обратно указателей
* Сигнальная система – типа отдали мы указатель на структуру, и ждем какого-то события, что структура обработана. Или неблокирующе проверяем – готово или как?
Заметим, что реализация высокоуровневой красоты в железе может сильно разная. В качестве «простенького» примера приведем наличие или отсутствие DMA…
Еще у нас устройство может быть удаленным, и вообще все общение с ним происходит посредством потока команд. Непосредственно по регистрам полазить нельзя :).
В POSIX идеологии все красиво, просто и универсально. За вычетом одного – память! Прогресс силен, и накристальная память современных контроллеров все больше, но хочется масштабируемости. Чтобы некий отлаженный код можно было впихнуть в простенький контроллер, в котором POSIX не заведется никогда.
Т.е. по сути надо сделать то, чем набиты все книжки по C++ - разделить интерфейс и его реализацию.
C++ один из вариантов реализации обсуждаемого здесь, но стремно! Чего там этот C++ нагенерит – одному Страуструпу известно. И средства управления этой «генерацией» простому смертному доступны с большим трудом…
Еще C++ может быть недоступным либо сильно глючным|неэффективным для целевой платформы, и это тоже большая проблема.
Вариант с С макросами отметаем как путь, при котором отладка – прямой путь в психушку.
Остается интеллектуальный кодогенератор, который генерит нечто, приводящее высокоуровневый код к исполняемому коду при заданных архитектурных ограничениях…
Я так себе это представляю. Есть прикладной код, который работает с виртуализированным драйвером посредством работы с полями структур и «сигналами», описанными выше.
Есть, в терминах C++, С код, который реализует стандартизованные методы работы с полями структур неким оптимальным для данной реализации способом.
При синтезе целевого кода кодогенератор «раскрывает» работу с полями структур в реальный С код, но при этом автоматически, в комментариях, показывает соответствие между обобщенным и реальным кодом.
Как именно отформатировать эти каменты, пока не знаю. Преобразование может быть значительным.
В качестве бредовой идеи выступает форматирование исходного и сгенерированного кода в 80 колонок и одновременный вывод «в одной строке» двух вариантов кода, (с совокупной шириной 160 символов) но я не уверен, что это хорошо.
У кого какие мысли есть по теме?