LINUX.ORG.RU

[Linux Embedded] архитектура прикладного ПО


0

2

Здравствуйте! Занимаюсь разработкой автомата самообслуживания на базе Linux Embedded. Сейчас стоит концептуальный вопрос — использовать ли многопоточное монолитное приложение, или разбить на несколько процессов-серверов (демонов, если хотите) и «рабочих» процессов, которые будут устанавливать IPC-связи с серверами. Масштабы: ARM9, busybox, несколько RS-485 модулей, RS-232 модуль, SPI-модуль, дисплей на framebuffer, возможно, еще что-то.

Понимаю, что вопрос философский и холиваро-емкий. Поэтому постановка такая: какие подходы к проектированию ПО используются в удачных embedded-linux системах подобного рода (автономные устройства с разнообразной переферией)? Видел, что есть роботы под управлением Linux, но описания их ПО не нашел. Может быть, посоветуете, на какие примеры можно посмотреть?

ЗЫ: неудачные примеры тоже интересны :)

Ответ на: комментарий от elipse

Зависит от сложности проекта. Кстати, можно обойтись и одной нитью. P.S. Если нет опыта работы с говноосями типа eCos, не связывайтесь.

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

Ха ха. там хоть нормальная документация и стабильный api.
Тут же, сам черт ногу сломает как припрет ...

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

> Ха ха. там хоть нормальная документация и стабильный api.

Ха ха. Тебе по POSIX документации мало? Или POSIX нестабилен? Или в eCos свой, особый POSIX?

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

Честно говоря, от разделения времени проку было на порядок больше чем от мощей POSIX. Такая задача была.
Собственно, я сам написал тогда RTOS (адский цейтнот был, а все готовое было корявым тогда или же слишком заумным и прожорливым к ресурсам)

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

>> А зачем много потоков если ядро одно?

Ыыыы... вот и выросло поколение на многоядерных процессорах.

Тут по моему просто дело в том, что человек от программирования далек.

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

>>> А зачем много потоков если ядро одно?

Ыыыы... вот и выросло поколение на многоядерных процессорах.

Что?

Какая связь между использованием нитей и многоядерностью? Ответ: никакой.

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

> Интересно услышать, что не так с моим вопросом.

Допустим, вам надо обслужить 32 двоичных сигнала за 100 ms.

За каждым (или группой) сигналов стоит своя задача или алгоритм.
Иногда, это алгоритм может меняться.
Написать все это в однозадачном режиме можно, но лучше никогда не видеть и больше не сопровождать это.

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

В случае нескольких ядер, использование нескольких потоков может быть средством оптимизации. С одним ядром нет. Наверно я не понял исходную задачу.

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

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

Sorcerer ★★★★★
()

>Сейчас стоит концептуальный вопрос — использовать ли многопоточное монолитное приложение, или разбить на несколько процессов-серверов

Советую подумать, хватит ли ресурсов у железки на IPC в критичные моменты. Ещё, сколько человек будет писать код. Если много, можно каждому выделить своё отдельное приложение и не придётся совместно в одном коде копаться.

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

Речь была о uclibc.
И да, только отклоняетесь от i386 и сразу масса сюрпризов может быть.
И начиная с отсутствия патчей именно под ваш CPU для ядра.
Порой проще взять доки на чипсет и написать самому. Имхо.

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

Real-time это не к Linux. И не вижу проблем обрабатывать любое количество сигналов в одном процессе, со стороны сопровождаемости кода.

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

> Real-time это не к Linux.

Во-первых, это еще надо понимать, что задача лучше выпишется в Real-time. Ну да, грохнуть пеньком по дребезгу контактов - это самое то сегодня.

И не вижу проблем обрабатывать любое количество сигналов в одном процессе, со стороны сопровождаемости кода.


Именно, что не видите.

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

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

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

Наверно есть больше требований, если надо прерывать обработку одних сигналов для обработки более приоритетных, то да все сложно.

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

> Real-time это не к Linux.

а мужики то и не знали ;)

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

Нет, все еще хуже может быть:

Ветвление алгоритма от различный состояний входов + временные технологические задержки.Тут «ифы» плодятся как тараканы уже и все становится нечитабельным.

elipse ★★★
()

насколько я понял постановку задачи, делай монолит. деление на процессы здесь лишнее, нитей на pthreads будет более чем достаточно (или, если выберешь qtopia, то на QThread).

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

Кладем в очередь данные сигнала когда он приходит (в прерывании), в процессе обработчике вынимаем по одному и обрабатываем. Где ифы?

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

> деление на процессы здесь лишнее,

нитей на pthreads будет более чем достаточно (или, если выберешь qtopia, то на QThread).


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

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

Очереди - это откладывание решение, буферизация.
А работу надо таки делать.

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

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

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

С этим к TC за подробным TЗ.

этот год я только с армами и работал (как системный программист),


И теперь в мире все похоже на армы и ваши задачи ?))

я что-то упустил и вы мне сейчас всё подробно расскажете, а?


Угу, нет четких требований от ТС. Тут можно долго лялякать ни о чем.

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

> И теперь в мире все похоже на армы и ваши задачи ?))

шутка не удалась, на кошках тренируйтесь… oh, wait…

Угу, нет четких требований от ТС.

ТС дал достаточно информации.

Тут можно долго лялякать ни о чем.

но вам же это так нравится! ;) и я вам тут не «лялякаю», сударь.

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

>ТС дал достаточно информации.

Ну это вам так кажется.
Один мой заказчик смог написать ТЗ только задним числом и уже по работающей системе. Я показал ему исходный вариант ТЗ и попросил найти похожие слова там.))



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

С тобой все ясно.
зы: бесконечная самоуверенность и склонность к демонстрации своей крутости лечится только опытом и временем.))

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

У тебя какой разряд по тенису ?

а ничо так, самокритично, мне понравилось ;)


А ты как думал ?
За двадцать пять лет в разработке самому приходилось на грабли наступать и на «подвиги» других смотреть.
Так что можешь не выпендриваться. Ничего нового тут нет , на любой хрен есть своя гайка с левой резьбой.))

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

сталкивался не с одним десятком разработчиков, которые «двадцать пять лет в разработке». по их коду можно написать десятитомник «как не нужно писать программы: примеры самых неудачных решений». «Так что можешь не выпендриваться».

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

> сталкивался не с одним десятком разработчиков, которые «двадцать пять лет в разработке». по их коду можно написать десятитомник

Ай какие мы крутые , а все дурные ...
Ок, я не буду больше отписывать на твои реплики.
Ты - прав, и прав всегда. Устраивает ?))

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

> Ок, я не буду больше отписывать на твои реплики.

> Устраивает ?))

вполне ;) а если в игнор добавите — вообще будет супер.

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

> вполне ;)

вот и чудненько.

а если в игнор добавите — вообще будет супер.


Ты не тянешь пока на игнор.
Игнор у меня для «наглючих толстолобиков» и «назойливых мух».)

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

> «A Computer is a state machine. Threads are for people who can't program state machines.»

Над тобой пошутили, а ты повелся.

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

> В случае нескольких ядер, использование нескольких потоков может быть средством оптимизации.

Какая связь между использованием нитей, несколькими ядрами и оптимизацией? Ответ: никакой.

Тебе уже сказали, что нити - это способ группировки задач по приоритетам (и логического разбиения задач тоже). А еще нити - это средство мультипрограммирования.

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

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

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