LINUX.ORG.RU

[хочу странного] как разнести платформозависимые вещи.

 


0

1

Есть несколько программ, которые должны работать на платах с разными ARM-процами, разных производителей. Основная часть кода от железа не зависит и работать будет и так, но есть небольшие куски, которые завязаны на особенности процессора - работа с GPIO, например.

Собственно вопрос - как бы сорганизовать эти куски так, чтобы в коде было как можно меньше #ifdef, а в идеале вообще не было.

Пока предполагаю организовать в виде gpio.h gpio-arm1.c arm2.c и т.п. А уже при помощи cmake выбирать какой конкретный исходник подсовывать в бинарник. в gpio.h - заголовки функций и структур данных, а в .c - реализации под разные процессоры.

Собственно вопрос - как бы сорганизовать эти куски так, чтобы в коде было как можно меньше #ifdef, а в идеале вообще не было.

Для начала прочитать про стандартную надстройку для GPIO в sysfs, после этого думаю станет ясно что никакой платформо-зависимости нет, номер GPIO для конкретной цели - хоть через конфиг указывай.

anonymous
()
Ответ на: комментарий от anonymous

уже почитал. Да, через sysfs - правильнее, для gpio так и сделаю.

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

Dark_SavanT ★★★★★
() автор топика

Отдельные исходники типа feature-<arch>.c. А в них одинаковые по заголовкам функции, но с разной реализацией. Выбирать при сборке.

r2d2
()
Ответ на: комментарий от Dark_SavanT

для разных платформ понадобится различная реализация одного и того же интерфейса.

Не представляю даже - как такое может быть, все интерфейсы имеют стандарты и спецификации, если вдруг у вас такая ситуация - вы либо что-то не так делаете, не там смотрите или изобретаете велосипед, в любом случае это неправильно, весь платформо-зависимый код должен быть на уровне драйверов ОС.

anonymous
()
Ответ на: комментарий от anonymous

Есть ещё код который зависит от реалий платы. Например - на разных платах есть разный набор светодиодов и кнопочек. и исходя из того, на какой плате(а иногда и какой версии платы) работает софтина, надо зажигать разный набор светодиодов.

Можно конечно попытаться вынести в конфиги, но смысла как такового мало, поскольку список конфигураций ограничен.

Dark_SavanT ★★★★★
() автор топика
Ответ на: комментарий от Dark_SavanT

Например - на разных платах есть разный набор светодиодов и кнопочек.

Если это гирлянда - не вижу смысла применять для такой примитивной логики ОС, для более реальных целей есть подсистемы gpio-led и gpio-button.

anonymous
()
Ответ на: комментарий от anonymous

хм, спасибо за наводку, что-то я про эти вещи забыл совсем.

Dark_SavanT ★★★★★
() автор топика

странного

разнести платформозависимые вещи

Одна из основных причин засилия говнопрограмм.

По сабжу — ну посмотрите на ядро что ли. Или на Gforth, например.

buddhist ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.