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